PHP - upload plików - kilka ważnych wskazówek

DZIAŁANIE: brak działania
 

Kod:

brak kodu:P

Ewentualne Objaśnienia:

1). Pamiętajcie o korygowaniu typu przesyłanych plików - na przykład przez wyrażenia regularne :

if ( eregi('^image/gif(;.*)$' , $_FILES['upload']['type']) || eregi('^image/p?jpeg(;.*)?$'. $_FILES['upload']['type']))
{
    jakaś akcja
}
else { print 'Przesyłaj jedynie pliki graficzne!'; }

Lub :

$dop_typ = "image/gif";
if ( $_FILES['upload']['type'] == $dop_typ ) ...

Czy też :

if ( ereg(".gif$|.jpg$|.jpeg$|.GIF$|.JPG$|.JPEG$",$_FILES['upload']['type']) ) ....

Można też kombinować z funkcją strpos . Metod jest wiele - ale warto o tym pamiętać !

2). Jak wiecie są pewne ograniczenia wielkości pliku jaki możemy załadować na serwer poprzez taki skrypt z upload'em . Jednak faktem jest to, że nawet jeśli plik jest za duży - pierw zostanie on załadowany na serwer, a potem od razu usunięty - to trochę czasochłonne i denerwujące prawda ?
Dlatego warto PHP informować z wyprzedzeniem - jaki chcemy dopuścić max rozmiar pliku. Możemy albo zmodyfikować ustawienia opcji upload_max_filesize - jednak nie zawsze mamy do tego dostęp ( do pliki php.ini ). Jest również taka opcja post_max_size określająca max rozmiar pliku jaki można wysłać poprzez formularz.
Ale warta uwagi jest metoda inna - dołączamy do formularza ukryte pole input o nazwie MAX_FILE_SIZE i określamy wartość maksymalną. Jednak z przyczyn związanych z bezpieczeństwem nie powinna ona przekraczać wartości w opcji upload_max_filesize. Gdy podamy na przykład 1024 - mamy na myśli 1 kB .
Pole MAX_FILE_SIZE powinno pojawić się w formularzu przed znacznikami, aby poinformować PHP o ograniczeniu wielkości - zanim PHP odbierze jakiekolwiek pliki. Nie jest to do końca bezpieczna metoda bo złośliwy użytkownik może napisać i wysłać własny formularz pozbawiony ukrytego pola .
Bezpieczeństwo za to gwarantuje nam pierwsza opisana metoda.

3). PHP jest tak skonfigurowanym językiem, że wyłącza skrypty działające dłużej niż 30 sekund. Przy takim skrypcie jak upload - bardzo często właśnie taki czas będzie przekroczony. Dlatego należy skorzystać z funkcji set_time_limit - ustawiamy czas lub też wartość 0 - co pozwoli działać danemu skryptowi aż zakończy swoje zadanie, niezależnie od czasu.
Jednak broń Boże nie należy tego wykorzystywać jeśli nie mamy pewności, że skrypt nie zawiera błędów lub na przykład nie wpada w nieskończoną pętle .