Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zmiana nazwy plików w katalogu, skomplikowane
miedzna
post
Post #1





Grupa: Zarejestrowani
Postów: 401
Pomógł: 1
Dołączył: 10.03.2004
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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?(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

Ten post edytował miedzna 6.10.2008, 10:14:25
Go to the top of the page
+Quote Post
nexis
post
Post #2





Grupa: Zarejestrowani
Postów: 1 012
Pomógł: 109
Dołączył: 26.09.2003
Skąd: nexis.pl

Ostrzeżenie: (0%)
-----


1. Proponuję wczytać odpowiednie pary do tablicy: file_get_contents" title="Zobacz w manualu PHP" target="_manual explode" title="Zobacz w manualu PHP" target="_manual
2. Następnie przejść przez wszystkie pliki w katalogu: opendir" title="Zobacz w manualu PHP" target="_manual readdir" title="Zobacz w manualu PHP" target="_manual is_file" title="Zobacz w manualu PHP" target="_manual
3. I na koniec zamienić nazwy: rename" title="Zobacz w manualu PHP" target="_manual
Go to the top of the page
+Quote Post
miedzna
post
Post #3





Grupa: Zarejestrowani
Postów: 401
Pomógł: 1
Dołączył: 10.03.2004
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Hmmm, pięknie to brzmi, podasz jakiś przykład kodu?
Go to the top of the page
+Quote Post
sowiq
post
Post #4





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Dostałeś wszystkie potrzebne funkcje. Wystarczy zajrzeć do manuala - tam masz podane przykłady użycia. Wysil się trochę.
Go to the top of the page
+Quote Post
miedzna
post
Post #5





Grupa: Zarejestrowani
Postów: 401
Pomógł: 1
Dołączył: 10.03.2004
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
sowiq
post
Post #6





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/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ź (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Ten post edytował sowiq 1.10.2008, 16:52:23
Go to the top of the page
+Quote Post
miedzna
post
Post #7





Grupa: Zarejestrowani
Postów: 401
Pomógł: 1
Dołączył: 10.03.2004
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Niestety nie działa (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
sowiq
post
Post #8





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Rozwiniesz swoją wypowiedź? Czy mamy wróżyć z fusów?
Go to the top of the page
+Quote Post
miedzna
post
Post #9





Grupa: Zarejestrowani
Postów: 401
Pomógł: 1
Dołączył: 10.03.2004
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


OK:

Podany przez Ciebie kod nie działa, czyli nie zmienia nazw plików zgodnie z moim pytanie na początku postu (IMG:http://forum.php.pl/style_emoticons/default/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. ?>


Ten post edytował miedzna 6.10.2008, 12:48:41
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 4.10.2025 - 04:47