Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: jak sprawdzić czy plik jest już cały na serwerze
Forum PHP.pl > Forum > PHP
qchar
Mam katalog do którego użytkownicy mogą uploadować zdjęcia. I pytanie brzmi, czy da się sprawdzić które z plików są już kompletne, a które właśnie ktoś uploaduje?
darko
spróbuj is_readable i/lub is_writable
erix
Cytat
I pytanie brzmi, czy da się sprawdzić które z plików są już kompletne, a które właśnie ktoś uploaduje?

Zależy, w jaki sposób mogą wysyłać.

Cytat
spróbuj is_readable i/lub is_writable

Podczas wysyłania pliki nie zawsze muszą być blokowane. To zależy od przypadku.
darko
Cytat(erix @ 9.01.2010, 14:13:52 ) *
Podczas wysyłania pliki nie zawsze muszą być blokowane. To zależy od przypadku.

W takim razie dołączam się do pytania, nieco je zmieniając: jak sprawdzić czy plik jest partialem czy kompletnym przesłanym plikiem, w przypadku, kiedy nie są blokowane podczas wysyłania?
// edit
Marna metoda, ale powinno działać:
  1. //ob_implicit_flush(true);
  2. $x = file_get_contents($plik);
  3. sleep(3);
  4. $y = file_get_contents($plik);
  5. if(strlen($x) == strlen($y)) {
  6. // przesłany
  7. }
qchar
w moim przypadku pliki będą wysyłane przez ftp. a co do is_writable i is_readable (pod windowsem przynajmniej) nie działa, za chwilę jeszcze sprawdzę jak to działa pod linuxem...

na hostingu też nie działa. a co do tego rozwiązania z czekaniem mam trochę wątpliwości: po pierwsze jak to wydajnościowo będzie działało. w przypadku dużej ilości plików, powiedzmy 1000, już trzeba by to sprawdzanie rozbić na 2 pętle zeby nie czekać prawie godziny i wyniki gromadzić w jakiejś tablicy, potem poczekać i do drugiej tablicy wpisać wszystko od nowa i porównać. no ale teraz zakładając że każde zdjęcie ma 1-2 MB i że większość z nich jest kompletna, to dostajemy 2 ogromne tablice i może braknąć pamięci.

więc do póki nie znajdzie się jakieś lepsze rozwiazanie będę chyba po prostu sprawdzał rozszerzenie(lub nazwę) pliku, bo akurat na moim hostingu uploadowany plik z tego co zauważłem ma całkowicie losową nazwę bez rozszerzenia.
darko
Zdecydowanie lepiej byłoby zamiast file_get_contents dać filesize i porównywać tylko rozmiar, a nie długość stringa z wyciągniętą zawartością.
Z tego co piszesz, to najlepiej byłoby sprawdzać rozszerzenie za pomocą pathinfo i sprawdzać za pomocą in_array ze zdefiniowaną tablicą rozszerzeń obrazkowych i jeśli brak rozszerzenia obrazkowego (jpg, png itd.) to plik się jeszcze wysyła. Tylko nie wiem czy pathinfo działa via ftp ? Można też po prostu sprawdzić czy w nazwie pliku występuje kropka, a wyciągnąć rozszerzenie można alternatywnie bawiąc się

$ext = substr($filename, strrpos($filename, '.') + 1);
lub
$ext = preg_replace('/^.*\.([^.]+)$/D', '$1', $filename);

erix
Cytat
jak sprawdzić czy plik jest partialem czy kompletnym przesłanym plikiem, w przypadku, kiedy nie są blokowane podczas wysyłania?

Trzeba po prostu znać rozmiar pliku i go okresowo sprawdzać.

Z tego, co pamiętam, to via FTP rozmiar pliku nie jest alokowany z góry, tylko cały czas dopisywany, więc może to stanowić pewien problem.
qchar
nie no, właśnie dzięki temu że nie jest alokowany może mieć to ręce i nogi, bo właśnie wtedy mogę porównywać sam file_size, a nie file_contents tak jak proponował darko na początku. a nie jestem w stanie wiedzieć co kto przyśle i jakie to będzie duże. ale rozwiązanie ze sprawdzaniem rozszerzenia śmiga całkiem dobrze.
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.