![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 425 Pomógł: 0 Dołączył: 28.05.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Szukam skutecznego rozwiązania na zrobienie "spisu z natury" katalogu. Chcę sprawdzać zawartość folderu i porównać z bazą danych.
Jak zrobić to w optymalny sposób? Skrypt musi wyszukiwać skasowane i dodane pliki. Edycja: o funkcji scandir, oczywiście, czytałem... Ten post edytował Kas 4.07.2010, 16:08:36 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 441 Pomógł: 71 Dołączył: 3.09.2007 Skąd: wrocław Ostrzeżenie: (0%) ![]() ![]() |
DirectoryIterator
|
|
|
![]() ![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 425 Pomógł: 0 Dołączył: 28.05.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
A jakieś inne rozwiązanie? Wpadłem na pomysł aby dla każdego rekordu z bazy sprawdzać czy istnieje plik i odwrotnie: dla każdego pliku sprawdzać rekord. Czy jest jakiś lepszy algorytm?
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 575 Pomógł: 299 Dołączył: 26.03.2009 Ostrzeżenie: (20%) ![]() ![]() |
Pobierasz wszystkie ścieżki do plików i sprawdzasz file_exists, czy istnieje.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 66 Pomógł: 1 Dołączył: 22.06.2009 Skąd: Londyn, UK Ostrzeżenie: (0%) ![]() ![]() |
Może glob? Gdzieś słyszałem ze jest wolniejszy od scandir, ale warto spróbować.
Ten post edytował paxton 4.07.2010, 18:50:37 |
|
|
![]() ![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 425 Pomógł: 0 Dołączył: 28.05.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Aplikacja będzie uruchomiona na serwerze dedykowanym, ale z pewnych względów ekstremalnie zależy mi na jak najmniejszej złożoności obliczeniowej i pamięciowej.
Mój pomysł wygląda tak: pobieram z bazy wszystkie nazwy i sprawdzam czy istnieje, następnie skanuję katalog i sprawdzam w bazie. Da się sprytniej? |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 678 Pomógł: 124 Dołączył: 26.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
Rozumiem, że chcesz usunąć te pliki, których nie ma w bazie? Jeśli tak to można by też zrobić na inny sposób:
1. Tworzysz dwie tablice, do jednej wrzucasz ścieżki do plików z katalogu, do drugiej z bazy. 2. Przelatujesz foreach po tej tablicy z bazy, sprawdzając in_array czy te pliki są w drugiej tablicy(tej z katalogu). 3. Jeśli true to dajesz unset na danej wartości i potem na końcu dostaniesz tablicę tylko i wyłącznie z plikami, które są w katalogu a nie ma ich w bazie. Nie wiem czy do końca ci o to chodziło i czy jest to wydajniejsze, ale poddaję tylko pomysł (IMG:style_emoticons/default/winksmiley.jpg) |
|
|
![]() ![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 425 Pomógł: 0 Dołączył: 28.05.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Mniej więcej tak to zrobię.
Mam problem, chyba jakoś dzisiaj nie myślę... w tablicy $row nie ma wyników, a zapytanie SQL zwraca kilkadziesiąt rekordów. Co jest grane? |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 320 Pomógł: 53 Dołączył: 18.09.2007 Skąd: Radom Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]() ![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 425 Pomógł: 0 Dołączył: 28.05.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Jest źle.
Potrzebuję dwie tablice. Tablica $files działa dobrze, ale mam problem z wynikami z bazy danych MySQL. Z tego co widzę mysql_fetch_row pozwala na łatwe stworzenie tablicy, bez pętli. Przykład z php.net:
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 320 Pomógł: 53 Dołączył: 18.09.2007 Skąd: Radom Ostrzeżenie: (0%) ![]() ![]() |
w tym przypadku, który jest na php.net pobierany jest tylko jeden wiersz więc w ten sposób zadziała. Ty pobierasz więcej wierszy więc musisz polecieć pętlą
|
|
|
![]() ![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 425 Pomógł: 0 Dołączył: 28.05.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Kłopot w tym, że to chyba też nie działa.
Potrzebuję zapytania
stworzyć tablicę do porównania z tablicą $files. Coś dziś kiepsko ze mną... (IMG:style_emoticons/default/wstydnis.gif) |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 320 Pomógł: 53 Dołączył: 18.09.2007 Skąd: Radom Ostrzeżenie: (0%) ![]() ![]() |
w $result masz już tablicę z plikami znajdującymi się w bazie.
później wykonujesz scandir lub inna funkcję do wrzucenia plików do tablicy z twojego folderu($files -> tak jak robiłeś). Następnie porównujesz obydwie tablice($result oraz $files) za pomocą petli(foreach), array_diff, in_array etc Ten post edytował artur_dziocha 5.07.2010, 11:54:36 |
|
|
![]() ![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 425 Pomógł: 0 Dołączył: 28.05.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
A nie da się tego jakoś inaczej zrobić?
Mam taki kod, który wyrzuca mi na standardowe wyjście kolejne elementy obu tablic. Jednak one mogą być różnej długości... Zapytanie SQL daje mi wiele wierszy. Teraz chcę z tego zrobić tablicę taką, że kolejny element tablicy to kolejna nazwa pliku. Głupi jestem. (IMG:style_emoticons/default/sad.gif) |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 320 Pomógł: 53 Dołączył: 18.09.2007 Skąd: Radom Ostrzeżenie: (0%) ![]() ![]() |
zwykły przykład. możesz sobie to jakoś zoptymalizować
Do sprawdzenia czy istnieje plik , ale nie ma go w bazie możesz uzyć funkcji Edit Pisane z palca. Pokombinuj Ten post edytował artur_dziocha 5.07.2010, 12:39:20 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 14:15 |