Sprawdzenie wielkości pliku PRZED uploadem |
Sprawdzenie wielkości pliku PRZED uploadem |
1.02.2010, 15:59:59
Post
#1
|
|
Grupa: Zarejestrowani Postów: 66 Pomógł: 1 Dołączył: 24.09.2009 Ostrzeżenie: (0%) |
Witam,
Próbuję napisać coś ala progress bar w AJAXIE oraz PHP, lecz nie mogę się nigdzie doszukać jak sprawdzić wielkość pliku przed zuploadowaniem go na serwer. Zauważyłem, że do wielkości pliku mogę dostać się tylko jeśli zwróci wartość true, czyli dopiero po zuploadowaniu go, a to mi nic nie pomoże. Chce uzyskać ścieżkę do tymczasowego pliku oraz pobierać wielkość pliku co np. pół sekundy no i reszta to już z górki, ale muszę mieć dostęp do ścieżki przed zuploadniem, a nie po... Wie ktoś może, czy jest to możliwe? Pozdrawiam, Armon |
|
|
1.02.2010, 16:06:21
Post
#2
|
|
Grupa: Zarejestrowani Postów: 29 Pomógł: 5 Dołączył: 22.09.2009 Ostrzeżenie: (0%) |
Z tego co wiem, to Ajaxem/Jsem będzie ciężko o ile to w ogóle możliwe. Prędzej, jeśli to będzie flashowy/javovy uploader, choć i tu nie korzystałem z tego.
|
|
|
1.02.2010, 16:10:00
Post
#3
|
|
Grupa: Zarejestrowani Postów: 66 Pomógł: 1 Dołączył: 24.09.2009 Ostrzeżenie: (0%) |
Jeżeli dostanę się do tymczasowego pliku przed zuploadowaniem to w czym problem? Brakuje mi tylko tego. Tylko nie wiem czy PHP to umożliwia, bo ten $_FILES to taki trochę ograniczony jest O.o
|
|
|
1.02.2010, 16:30:50
Post
#4
|
|
Grupa: Zarejestrowani Postów: 678 Pomógł: 124 Dołączył: 26.09.2009 Ostrzeżenie: (0%) |
Jeżeli dostanę się do tymczasowego pliku przed zuploadowaniem to w czym problem? Brakuje mi tylko tego. Tylko nie wiem czy PHP to umożliwia, bo ten $_FILES to taki trochę ograniczony jest O.o A powiesz mi gdzie wtedy będzie ten tymczasowy plik, w drodze, w locie, a może w przeglądarce? Za pomocą samego php nie da się sprawdzić wielkości uploadowanego pliku przed jego faktycznym ściągnięciem na serwer, nie ważne czy do ostatecznej lokalizacji czy do folderu tymczasowego. Pozostaje flash, np. http://www.swfupload.org/ -------------------- Napisane z palca! <- to tak dla lansu ;)
FancyStudio.pl - Tworzenie Stron WWW w Oparciu o XHTML, CSS, JS, PHP i MySQL. Mój blog :: Portfolio Fotograficzne Igora Biedrawy |
|
|
1.02.2010, 16:36:09
Post
#5
|
|
Grupa: Zarejestrowani Postów: 66 Pomógł: 1 Dołączył: 24.09.2009 Ostrzeżenie: (0%) |
A powiesz mi gdzie wtedy będzie ten tymczasowy plik, w drodze, w locie, a może w przeglądarce? Za pomocą samego php nie da się sprawdzić wielkości uploadowanego pliku przed jego faktycznym ściągnięciem na serwer, nie ważne czy do ostatecznej lokalizacji czy do folderu tymczasowego. Pozostaje flash, np. http://www.swfupload.org/ Nieważne gdzie będzie, ważne że jego rozmiar będzie się zmieniał Przecież napisałem, że będę korzystał także z AJAX'a. AJAX bez problemu uzyska dostęp do wielkości pliku przed jego zuploadowaniem (oraz podczas uploadowania) i będzie mógł go aktualizować co taki czas jaki ja będę chciał, jednak jeżeli nie ma możliwości zwykłego pobrania ścieżki tymczasowego pliku przed zuploadowaniem to całkowicie odpada taka opcja O.o |
|
|
1.02.2010, 20:02:52
Post
#6
|
|
Grupa: Zarejestrowani Postów: 300 Pomógł: 32 Dołączył: 31.07.2006 Ostrzeżenie: (0%) |
Temat był poruszany _wielokrotnie_. Są całe 3 rozwiązania:
1. Uploader we Flash/Java/itd 2. APC z włączoną odpowiednią opcją - ale są podobno problemy przy wielu uploadach na raz 3. Odbierać upload innym skryptem niż php, ja to kiedyś robiłem w perlu. JavaScript nie ma _żadnego_dostępu do pliku, który wybrałeś selektorem FILE, powinieneś się cieszyć jak możesz poznać nazwę pliku i np. sprawdzić czy rozszerzenie jest ok |
|
|
2.02.2010, 10:27:24
Post
#7
|
|
Grupa: Zarejestrowani Postów: 66 Pomógł: 1 Dołączył: 24.09.2009 Ostrzeżenie: (0%) |
Temat był poruszany _wielokrotnie_. Są całe 3 rozwiązania: 1. Uploader we Flash/Java/itd 2. APC z włączoną odpowiednią opcją - ale są podobno problemy przy wielu uploadach na raz 3. Odbierać upload innym skryptem niż php, ja to kiedyś robiłem w perlu. JavaScript nie ma _żadnego_dostępu do pliku, który wybrałeś selektorem FILE, powinieneś się cieszyć jak możesz poznać nazwę pliku i np. sprawdzić czy rozszerzenie jest ok No tak, ale mnie ciekawi fakt, jak pobrać ścieżkę do tmp file, przed jego zuploadowaniem, przecież to jest na moim serwerze to nie robi żadnej luki w zabezpieczeniach dla użytkownika? Skąd serwer wie gdzie ma zapisywać temporary file, bo skądś to musi wiedzieć, czymś, gdzieś musi zostać wysłana o tym wiadomość? Gdzieś ta informacja musi być przetrzymywana, skoro jest przekazywana dalej dla skryptu PHP? |
|
|
2.02.2010, 11:49:45
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 590 Pomógł: 185 Dołączył: 19.04.2006 Skąd: Gdańsk Ostrzeżenie: (0%) |
1. Server wie gdzie uploadować, bo jest to zapisane w php.ini
2. A pod jaką nazwą to chyba masz tablicę $_FILES? Teraz sprawdza się przesłany plik, zanim się go zapisze. Służą do tego choćby: http://pl2.php.net/manual/pl/ref.fileinfo.php Masz też cały arsenał starych sposobów: np. wczytanie kilku pierwszych i ostatnich bajtów pliku by sprawdzić, co zawiera. I nie da się sprawdzić pliku na komputerze użytkownika, stąd kwarantanna w postaci pliku tymczasowego. |
|
|
2.02.2010, 13:25:13
Post
#9
|
|
Grupa: Zarejestrowani Postów: 66 Pomógł: 1 Dołączył: 24.09.2009 Ostrzeżenie: (0%) |
1. Server wie gdzie uploadować, bo jest to zapisane w php.ini 2. A pod jaką nazwą to chyba masz tablicę $_FILES? Teraz sprawdza się przesłany plik, zanim się go zapisze. Służą do tego choćby: http://pl2.php.net/manual/pl/ref.fileinfo.php Masz też cały arsenał starych sposobów: np. wczytanie kilku pierwszych i ostatnich bajtów pliku by sprawdzić, co zawiera. I nie da się sprawdzić pliku na komputerze użytkownika, stąd kwarantanna w postaci pliku tymczasowego. ale przecież napisałem tablica $_FILES zaistnieje dopiero PO wczytaniu pliku, a PO to już progress bar ma 100% ;/ Jak masz wczytać pierwszy, ostatni bajt etc. skoro nie wiem gdzie jest ten plik przed powstaniem $_FILES? Jak już $_FILES powstanie to już jest "po ptokach" |
|
|
2.02.2010, 15:13:50
Post
#10
|
|
Grupa: Zarejestrowani Postów: 678 Pomógł: 124 Dołączył: 26.09.2009 Ostrzeżenie: (0%) |
Mamooo! Widzę że tego nie rozumiesz więc postaram ci to przedstawić jak najłopatologiczniej w kilku krokach:
1. User wybiera sobie plik, naciska przycisk uploaduj. 2. W tym momencie strona się przeładowywuje, trwa to tak długo jak długo wykonują się punkty od 3 do 4. 3. Skrypt odbiera plik do katalogu temp JUŻ NA SERWERZE. W $_FILES mamy już nazwę pliku i inne dane. 4. Jeśli plik przejdzie wszystkie nasze filtry(jeśli jakieś są) np. na rozszerzenie, wielkość itp. to jest KOPIOWANY do lokalizacji docelowej czyli z katalogu "temp" jest przenoszony do załóżmy folderu "pliki". 5. Cały skrypt kończy swoje działanie i albo wyświetla jakiś komunikat typu "Plik zauploadowany" albo przekierowuje na inną stronę, jak kto woli. Z tego względu samym php NIE da się zrobić progres bar'a, bo my nie mamy jako tako wpływu na skrypt kiedy plik jest wrzucany na serwer. Do takich rzeczy powinno się używać języków w których możemy zrobić upload w tle np. Flash bez przeładowania strony. Ten post edytował Blame 2.02.2010, 15:14:16 -------------------- Napisane z palca! <- to tak dla lansu ;)
FancyStudio.pl - Tworzenie Stron WWW w Oparciu o XHTML, CSS, JS, PHP i MySQL. Mój blog :: Portfolio Fotograficzne Igora Biedrawy |
|
|
2.02.2010, 16:30:29
Post
#11
|
|
Grupa: Zarejestrowani Postów: 66 Pomógł: 1 Dołączył: 24.09.2009 Ostrzeżenie: (0%) |
Mamooo! Widzę że tego nie rozumiesz więc postaram ci to przedstawić jak najłopatologiczniej w kilku krokach: 1. User wybiera sobie plik, naciska przycisk uploaduj. 2. W tym momencie strona się przeładowywuje, trwa to tak długo jak długo wykonują się punkty od 3 do 4. 3. Skrypt odbiera plik do katalogu temp JUŻ NA SERWERZE. W $_FILES mamy już nazwę pliku i inne dane. 4. Jeśli plik przejdzie wszystkie nasze filtry(jeśli jakieś są) np. na rozszerzenie, wielkość itp. to jest KOPIOWANY do lokalizacji docelowej czyli z katalogu "temp" jest przenoszony do załóżmy folderu "pliki". 5. Cały skrypt kończy swoje działanie i albo wyświetla jakiś komunikat typu "Plik zauploadowany" albo przekierowuje na inną stronę, jak kto woli. Z tego względu samym php NIE da się zrobić progres bar'a, bo my nie mamy jako tako wpływu na skrypt kiedy plik jest wrzucany na serwer. Do takich rzeczy powinno się używać języków w których możemy zrobić upload w tle np. Flash bez przeładowania strony. Przecież AJAX nie potrzebuje przeładowania strony i może korzystać ze zmiennych z PHP. Wystarczy skorzystać z tego, że w p. 3, który przedstawiłeś mam w tym momencie uploadowany plik, czyli jego rozmiar się zmienia z sekundy na sekundę, więc przy pomocy AJAXa oraz metody setInterval, pobieram co np. pół sekundy nowe wartości, które oznaczają aktualny rozmiar pliku. if ($_FILES['file_name']) zwraca true dopiero jak cały plik zostaje wczytany do końca i dopiero wtedy otrzymuje $FILES['file_name']['tmp_name']. Chyba, że to dlatego, że żaden skrypt nie chce działać dopóty, dopóki nie wczyta się cały plik (przeładowuje się strona). Da się to zmienić? O.o Ten post edytował armon 2.02.2010, 16:32:04 |
|
|
2.02.2010, 16:53:30
Post
#12
|
|
Grupa: Zarejestrowani Postów: 304 Pomógł: 51 Dołączył: 4.02.2005 Skąd: Kraków Ostrzeżenie: (0%) |
Sprawdź http://pecl.php.net/package/uploadprogress
Z tego co kiedyś czytałem (nie pamiętam, czy to było akurat o tym rozszerzeniu, teraz się w to nie zagłębiałem) dzięki tej bibliotece można zrobić to co napisałeś, czyli np. sprawdzić w czasie uploadu ile bajtów już dotarło na serwer. -------------------- |
|
|
Wersja Lo-Fi | Aktualny czas: 11.06.2024 - 00:12 |