Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Sprawdzenie wielkości pliku PRZED uploadem
armon
post 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
  1. if (isset($_FILES['file_name'])


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? winksmiley.jpg

Pozdrawiam,

Armon
Go to the top of the page
+Quote Post
dantes
post 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.
Go to the top of the page
+Quote Post
armon
post 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
Go to the top of the page
+Quote Post
Blame
post 1.02.2010, 16:30:50
Post #4





Grupa: Zarejestrowani
Postów: 678
Pomógł: 124
Dołączył: 26.09.2009

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


Cytat(armon @ 1.02.2010, 16:10:00 ) *
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/


--------------------
Go to the top of the page
+Quote Post
armon
post 1.02.2010, 16:36:09
Post #5





Grupa: Zarejestrowani
Postów: 66
Pomógł: 1
Dołączył: 24.09.2009

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


Cytat(Blame @ 1.02.2010, 16:30:50 ) *
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łquestionmark.gif 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
Go to the top of the page
+Quote Post
ucho
post 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 tongue.gif
Go to the top of the page
+Quote Post
armon
post 2.02.2010, 10:27:24
Post #7





Grupa: Zarejestrowani
Postów: 66
Pomógł: 1
Dołączył: 24.09.2009

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


Cytat(ucho @ 1.02.2010, 20:02:52 ) *
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 tongue.gif


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?
Go to the top of the page
+Quote Post
Pilsener
post 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.
Go to the top of the page
+Quote Post
armon
post 2.02.2010, 13:25:13
Post #9





Grupa: Zarejestrowani
Postów: 66
Pomógł: 1
Dołączył: 24.09.2009

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


Cytat(Pilsener @ 2.02.2010, 11:49:45 ) *
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"
Go to the top of the page
+Quote Post
Blame
post 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


--------------------
Go to the top of the page
+Quote Post
armon
post 2.02.2010, 16:30:29
Post #11





Grupa: Zarejestrowani
Postów: 66
Pomógł: 1
Dołączył: 24.09.2009

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


Cytat(Blame @ 2.02.2010, 15:13:50 ) *
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
Go to the top of the page
+Quote Post
-=Peter=-
post 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.


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 11.06.2024 - 00:12