Wstawianie pliku na serwer (form, input).

0

Napisałem skrypcik w PHP do wstawiania fot na serwer. Po stronie użytkownika wykorzystuję formularz <form enctype="multipart/form-data" action="&lt;?php echo ($_SERVER['SCRIPT_NAME']); ?">" method="POST">
<input name="fotografia" type="file">
<input type="submit" value="Wgraj">

</form> ``` Wysyłanie zachodzi przez metodę POST. W skrypcie PHP ze zmiennych globalnych $_FILE pobieram wielkość pliku i sprawdzam czy nie jest za duży. Czy w tym momencie, gdy mam dostępne zmienne $_FILE, plik jest już na serwerze czy też to tylko dane opisujące go dotarły a plik realnie zostanie przegrany przy metodzie PHP: move_uploaded_file()?
0

Tak, plik już jest na serwerze w katalogu temp. Ustawia się go w php.ini - upload_tmp_dir

0

spróbuj używać var_dump(); na zmiennych, których zawartości nie znasz - tam jest ścieżka, gdzie tymczasowo plik leży ;]

0

No właśnie. Czy w takim razie jest jakaś możliwość zabezpieczenia się przed przesłaniem zbyt wielkiego pliku ale od strony html u klienta? No bo moje sprawdzenie w php następuje już na serwerze kiedy operacja przesyłu została zakończona. Chodzi o taka sytuację w której ktoś złośliwie, zamiast fotografii wysyłałby np. 100 MB plik ze zmienienionym rozszeżeniem na jpg tylko po to aby obciążyć (zablokować) serwer.

1

nie ma takiej opcji, na pewno nie od strony HTML czy PHP, a raczej samego serwera.

możesz użyć javascriptowo-flashowych sztuczek albo html5 api - ale i tak nikomu nie zabronisz puścić czystego zapytania do Twojego serwera, które nawet nie będzie poprawnym zapytaniem HTTP a po prostu losowymi znakami. (choć bardziej się opłaci wysłać poprawne zapytanie HTTP z masą niepotrzebnych danych - bo dojdzie do uruchomienia skryptu, a więc tymczasowe pliki gdzieś sobie przeleżą).

przeczytaj sobie jak działa w ogóle protokół HTTP, to jest jeszcze dużo przed dotarciem do interpretera PHP

0

Ok. Dobrze wiedzieć : )

0

A czy na serwerze mogę jakoś ustawić aby serwer sam przerywał przesył pliku który trwa np dłużej niż 20 sek.?
Do mojego projektu chcę brać VPS-a więc mam trochę większe możliwości konfigurowania go.

0

to już zapewne zależy od serwera (tj. apache, nginx, lighthttpd) - raczej wszystkie powinny mieć taką możliwość, ale szczegółów nie znam

0

Będę instalował Apacha. Muszę poszukać w dokumentacji. Dzięki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1