Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MSSQL][PHP]Wyszukiwanie plików z Mysql i dysku
Forum PHP.pl > Forum > Przedszkole
redelek
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
thek
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.
redelek
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. }

erix
    1. $file2=substr($file,9);
    Co to ma za zadanie? Porównujesz katalog za każdym razem? Trochę nie rozumiem. winksmiley.jpg
  • Nie możesz sprawdzać przez in_array, tylko indeksem numerycznym? Wstawisz choćby jeden plik, który będzie przed 12 i wtedy nie znajdziesz...
redelek
@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
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.