Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zmiana nazwy plików w katalogu, skomplikowane
Forum PHP.pl > Forum > PHP
miedzna
Witajcie, zastanawiam się, czy jest możliwość zmiany plików w katalogu (jest ich około 700), ale to by było zaawansowane zmienianie, otóż pliki mają losową nazwę typu d6fks09876.pdf, a chcę nadać nazwę typu janek_kowalski.pdf
W pliku tekstowym mam ułożone wszystkie te nazwy w postaci:

janek_kowalski.pdf|d6fks09876.pdf

więc trzeba by było pobrać nazwę pliku z folderu "d6fks09876", odnaleźć w pliku tekstowym ciąg "d6fks09876" pobrać odpowiadająca mu nazwę "janek_kowalski" i plik o tytule d6fks09876.pdf zmienić na janek_kowalski.pdf

Czy jest to możliwe?questionmark.gif
miedzna
Hmmm, pięknie to brzmi, podasz jakiś przykład kodu?
sowiq
Dostałeś wszystkie potrzebne funkcje. Wystarczy zajrzeć do manuala - tam masz podane przykłady użycia. Wysil się trochę.
miedzna
Kombinuję od kilku godzin i nic, napisałem coś takiego, ale to działa tylko jak jest 1 plik i jeden wpis w pliku data.txt

  1. <?php
  2. $nazwy=explode("|", file_get_contents("data.txt"));
  3.  
  4.  
  5. $lp=0;
  6. if ($handle = opendir('.')) {
  7.    while (false !== ($file = readdir($handle))) {
  8.        if ($file != "." && $file != "..") {
  9.            $pliki[$lp]=$file;
  10.            $lp++;
  11.        }
  12.    }
  13. closedir($handle);
  14. }
  15.  
  16. print $pliki[1]."<br />";
  17.  
  18. print $nazwy[0]."<br />";
  19.  
  20. print $nazwy[1]."<br />";
  21.  
  22.  
  23.  
  24. if(in_array($pliki[0], $nazwy)){
  25.    rename($pliki[0], $nazwy[0]).".pdf";
  26. }
  27. ?>


co jest źle?
sowiq
Wszystko robisz ok, ale...

1) dodaj warunek is_file($file) do if ($file != "." && $file != "..") {
2) czytasz katalog, wrzucasz do tablicy nazwy plików i wszystko jest ok, ale na końcu robisz
  1. <?php
  2. if(in_array($pliki[0], $nazwy)){
  3.   rename($pliki[0], $nazwy[0]).".pdf";
  4. }
  5. ?>
czyli sprawdzasz tylko pierwszy element tablicy z nazwami plików.

Ja bym to zrobił tak:

  1. <?php
  2. // $plik - nazwa pliku z listą plików tongue.gif
  3. // $sciezka - sciezka do katalogu z plikami
  4. $tab = file($plik);
  5. foreach($tab as $tmp){
  6.    $tmp = trim($tmp);
  7.    list($new, $old) = explode("|", $tmp);
  8.    if(is_file($sciezka.$old))
  9.        rename($sciezka.$old, $sciezka.$new);
  10. }
  11. ?>

Pisane z palca, mogą być błędy. Sprawdź winksmiley.jpg
miedzna
Niestety nie działa sad.gif
sowiq
Rozwiniesz swoją wypowiedź? Czy mamy wróżyć z fusów?
miedzna
OK:

Podany przez Ciebie kod nie działa, czyli nie zmienia nazw plików zgodnie z moim pytanie na początku postu smile.gif

Naskrobałem coś takiego, teraz nazwy plików oryginalnych i nazwy na które chcę zmienić mam w bazie:

  1. <?php
  2. $files = glob("*.pdf"); // tworzę listę plików w katalogu
  3.  
  4.  
  5. $result = mysql_query("SELECT Name, File FROM tabela WHERE File != ''"); // pobieram Name jako nazwa docelowa i File jako nazwa orginalna pliku
  6.  
  7. $a=0;
  8.  
  9. while($row=mysql_fetch_array($result)){
  10.  
  11.    for($i=0;$i<=mysql_num_rows($result); $i++){
  12.        if($files[$a] == $row["File"]){
  13.            rename($files[$a], $row["Name"].".pdf");
  14.        }
  15.  
  16.    $a++;
  17.  
  18.    }
  19. }
  20. ?>


Rzeźbię i nic z tego, ktoś pomoże?

Poradziłem sobie, jak by ktoś potrzebował, to wrzucam działający kod:

  1. <?php
  2. $files = glob("*.pdf");
  3.  
  4.  
  5. $result = mysql_query("SELECT Name, File FROM tabela WHERE File != ''");
  6.  
  7. while($row = mysql_fetch_array($result)){
  8.  
  9.    if(in_array($row["File"], $files)){
  10.        rename($row["File"], $row["Name"].".pdf");
  11.    }
  12.  
  13. }
  14. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.