Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MSSQL][PHP]Wyszukiwanie plików z Mysql i dysku
redelek
post
Post #1





Grupa: Zarejestrowani
Postów: 658
Pomógł: 37
Dołączył: 4.06.2005
Skąd: Wawa

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


Hej,

Mam na serwerku foto_dir, w nim są pliki ze zdjęciami.Wygląda to tak
foto_dir/
|-->15.jpg
|-->12.jpg
|-->01.jpg
|-->09.jpg
|-->11.jpg
|-->16.jpg

W bazie są zapisywane linki do nich np.
id_file file
1 foto_dir/15.jpg
2 foto_dir/01.jpg
3 foto_dir/11.jpg
4 foto_dir/ddd.jpg
5 foto_dir/dasdew34.jpg
6 foto_dir/dasdwewew.jpg

Robię skrypcik, który porównuje pliki zapisane w tym takalogu z plikami zapisanymi w bazie.

Zrobiłem coś takiego
  1. $folder = opendir('foto_dir');
  2. $pliki= array();
  3. $usr='root';
  4. $pass='';
  5. $host='localhost';
  6. $db_name='baza';
  7. $table='baza_file';
  8.  
  9. while(($plik = readdir($folder)) !== false) {
  10. if ($plik != '.' && $plik != '..')
  11. {
  12. $pliki[]= $plik;
  13. }
  14. }
  15. closedir($folder);
  16.  
  17. #print_r ($pliki);
  18.  
  19. @mysql_connect($host, $usr, $pass)or die('Brak połączenia z serwerem MySQL.');
  20. @mysql_select_db($db_name)or die('Błąd wyboru bazy danych.');
  21. mysql_query("SET NAMES 'utf8'");
  22. mysql_query("SET CHARACTER_SET_CLIENT=utf8");
  23. mysql_query("SET CHARACTER_SET_RESULTS=utf8");
  24. $wynik = mysql_query("SELECT * FROM $table") or die ("błąd zapytania".mysql_error());
  25. if(mysql_num_rows($wynik) == 0)
  26. {
  27. echo 'Baza pusta jak dzban nie ma co porrównywać';
  28. }
  29. else
  30. {
  31. $licz=0;
  32. while(list($id_file, $file) = mysql_fetch_array($wynik))
  33. {
  34. if ($file == "foto_dir/".$pliki[$licz] ) {
  35. echo $pliki[$licz]."<br />";
  36. echo "$file - identyczny<br />";
  37. } else {
  38. echo "$file - tylko na dysku<br />";
  39. }
  40. $licz++;
  41. }
  42.  
  43. }

I mam problem po za każdym razem znajduje mi tylko 12.jpg, a inne mówi że są tylko na dysku.
Może ktoś zobaczyć fachowym okiem co skopałem ?

Dzięki
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Zapisz sobie strukturę plików na dysku jako jedną tablicę, a z bazy danych wyciągnij nazwy plików tylko i w pętli while sprawdzaj czy wyciągnięta nazwa pliku pokrywa się z tymi w tablicy. W ten sposób dowiesz się co jest a co nie.
Go to the top of the page
+Quote Post
redelek
post
Post #3





Grupa: Zarejestrowani
Postów: 658
Pomógł: 37
Dołączył: 4.06.2005
Skąd: Wawa

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


wycinam te dane i nadal tylko pokozuje mi że jeden się zgadza i tylko 12.jpg
mam tak
  1. @mysql_connect($host, $usr, $pass)or die('Brak połączenia z serwerem MySQL.');
  2. @mysql_select_db($db_name)or die('Błąd wyboru bazy danych.');
  3. mysql_query("SET NAMES 'utf8'");
  4. mysql_query("SET CHARACTER_SET_CLIENT=utf8");
  5. mysql_query("SET CHARACTER_SET_RESULTS=utf8");
  6. $wynik = mysql_query("SELECT * FROM $table") or die ("błąd zapytania".mysql_error());
  7. if(mysql_num_rows($wynik) == 0)
  8. {
  9. echo 'Baza pusta jak dzban nie ma co porrównywać';
  10. }
  11. else
  12. {
  13. $licz=0;
  14. while(list($id_file, $file) = mysql_fetch_array($wynik))
  15. {
  16. $file2=substr($file,9);
  17.  
  18. if ($file2 == $pliki[$licz] ) {
  19.  
  20. echo "$file2 - identyczny<br />";
  21. } else {
  22. echo "$file2 - tylko na dysku<br />";
  23. }
  24. $licz++;
  25. }
  26.  
  27. }

Go to the top of the page
+Quote Post
erix
post
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Go to the top of the page
+Quote Post
redelek
post
Post #5





Grupa: Zarejestrowani
Postów: 658
Pomógł: 37
Dołączył: 4.06.2005
Skąd: Wawa

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


@ERIX

Dzięki za naprowadzenie, może moje rozwiązanie nie jest idealne.
Ale zrobiłem sobie dwie tabele
1 tabela z plikami z folderu na dysku
2 tabela z plikami z mysql

Porównałm je za pomocą array_diff
  1. $wynik = array_diff ($pliki, $mypliki);
  2.  
  3. print_r ($wynik);
  4. echo "Pliki do usunięcia<br />";
  5. foreach ($wynik as $fliczki ) {
  6. echo '<p><a href=foto_dir/'.$fliczki.'>'.$fliczki.'</a></p>';
  7. }


I wyszło tak jak chciałem. DZIĘKI
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: 25.12.2025 - 14:43