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 .