Jak pobrać plik za pomocą funkcji PHP move_uploaded_file

W pewnym momencie kariery będziesz chciał stworzyć prawdziwe dynamiczne aplikacje internetowe. Może zdecydujesz się napisać swoją sieć społecznościową. Jako programista postarają się zainteresować użytkowników, dać im możliwość przesyłania zdjęć, muzyki i udostępniania plików. W tym przypadku musisz znać i być w stanie pracować z funkcją upload przesłanego pliku PHP.

Formularz do gromadzenia danych

PHP obsługuje pobieranie dowolnych plików metodą POST. Dlatego do przesyłania danych serwera lub zapisywania go na komputerze lokalnym wymagany jest formularz HTML. Użyj znacznika, aby wybrać oddzielne miejsce, w którym użytkownik może wybrać plik. Skrypty muszą skonfigurować wszystko, aby dane były wysyłane bezbłędnie. Rozważ ten proces, pobierając zdjęcie profilowe.




enctype = "wieloczęściowe /dane formularza" & gt;











Zwróć uwagę na atrybut enctype = "multipart /form-data". To dzięki niemu formularz jest skonfigurowany do odbierania danych. Aby użytkownicy nie wymyślili 25 MB bootloadów, w ukrytym polu musisz koniecznie ustawić limit rozmiaru dla zdjęć. W przypadku zdjęcia profilowego wystarczy 2 MB, jak w tym przykładzie.

& lt; script async = "//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js">
& lt ;! - fb_336x280_2 - & gt;

& lt; skrypt & gt; (adsbygoogle = window.adsbygoogle || []). push ({});

Wysyłanie obrazu

Powyższy formularz w akcie atrybutów oznacza, że ​​odbiór iprzetwarzanie obrazu odbędzie się w tym samym dokumencie. Jeśli jesteś zdezorientowany i chcesz, że dla każdego działania miał oddzielny skrypt zastąpić nazwę projektu scenariusza, na przykład, create_profile.php. Teraz w tym pliku zapisany jest cały kod, w tym funkcja przesłanego pliku PHP move.

"Maks. rozmiar pliku określony w php.ini ',
2 = & gt; Max przekroczony rozmiar pliku określony w formularzu HTML ",
3 = & gt; "Wysłano tylko część pliku",
4 = & gt; "Plik do wysłania nie został wybrany.");
//sprawdza błędy podczas wysyłania pliku
($ _FILES [$ image_fieldname] ['error'] == 0) lub
die ("Błąd wysyłania pliku". $ Php_errors [$ _ FILES [$ image_fieldname ] ['error']]);
//sprawdza normalny plik jest wysyłany lub próbą złamania
@is_uploaded_file ($ _ FILES [$ image_fieldname] ['tmp_name']) lub
die ('ty sovershyete niemoralności wstyd! „. Po pierwsze plik: "." '{$ _ FILES [$ nazwa_obrazu] [' nazwa_tmp ']}' ');
//Czy proponowana plik obrazu
@getimagesize ($ _ FILES [$ image_fieldname] ['tmp_name']) or die ("Błąd! Wybrany plik nie jest obrazem." „Infomacje {$ _FILES [$ image_fieldname] ['tmp_name']} ");
//Przypisywanie pliku unikalnej nazwy do pobrania
$ now = time ();
, natomiast (file_exists ($ upload_filename = $ uploads_dir $ teraz .'- '[nazwa „]). $ _ Plików [$ image_fieldname]'). {
$ teraz ++;
}
? & Gt;
,

kodu nie są zmienne pomocnicze,


Związek pośredni scenariusz type = "text /JavaScript" & gt;
zmienna blockSettings2 = {blockID "R-A-271049-5" renderTo "yandex_rtb_R-A-70350-39" asynchroniczny :! 0};
jeśli (document.cookie.indexOf ("abmatch =") i GT = 0) blockSettings2.statId = 70350;
! Zastosowanie (a, b, c, d, e) {A [c] = A [c] || [] A [c] .Push (funkcja () {Ya.Context.AdvManager.render (blockSettings2)}), e = b.getElementsByTagName ("scenariusz")d = b.createElement ("scenariusz") d.type = "text /JavaScript" d.src = „//an.yandex .ru /System /context.js "d.async = 0e.parentNode.insertBefore (d, e)} (to this.document," yandexContextAsyncCallbacks „);
  • $ Upload_dir jest zarejestrowaną ścieżkądo katalogu do pobrania. Zamiast HOSW_WWW_ROOT, wpisz bezwzględną ścieżkę do katalogu roboczego na serwerze lub komputerze.
  • Zmienna $ image_fieldname to nazwa pola obrazu w formularzu HTML.

Jak widać, przed przejściem do pliku przesyłania, istnieją wiersze sprawdzające pobrany obraz. Oczywiście bezpieczne aplikacje PHP są mitem, ale powinna istnieć przynajmniej minimalna ochrona.

Tablica sprawdzania błędów $ php_errors nie rozpoczyna się od zera, ale od jednostki. Pod indeksemznajduje się $ _FILES [$ image_fieldname] ['error'], które w przypadku pomyślnego załadowania zwraca liczbę 0. W PHP $ _FILES jest specjalną tablicą zawierającą wszystkie informacje o pliku. Aby uzyskać dostęp do tych danych za pomocą pola wprowadzania kodu nazwą że przyniósł jako oddzielny zmiennej $ image_fieldname


Związek pośredni skryptu type = „text /JavaScript” & gt;
zmienna blockSettings3 = {blockID "R-A-271049-6" renderTo "yandex_rtb_R-A-70350-44" asynchroniczny :! 0};
if (document.cookie.indexOf ("abmatch =") & gt; = 0) blockSettings3.statId = 70350;
! Zastosowanie (a, b, c, d, e) {A [c] = A [c] || [] A [c] .Push (funkcja () {Ya.Context.AdvManager.render (blockSettings3)}), e = b.getElementsByTagName ("scenariusz")d = b.createElement ("scenariusz") d.type = "text /JavaScript" d.src = „//an.yandex .ru /System /context.js "d.async = 0e.parentNode.insertBefore (d, e)} (to this.document," yandexContextAsyncCallbacks „);
//sprawdza błędy podczas wysyłania pliku
($ _FILES [$ image_fieldname] ['error'] == 0) lub
die ("Błąd wysyłania pliku". $ Php_errors [$ _FILES [$ image_fieldname] ['error']]);

Kiedy przenoszenie przesłanego pliku PHP nie działa

Czy uważasz, że zrobiłeś wszystko dobrze, a tłumacz popełnia błąd? Plik odmawia uruchomienia w wyznaczonym katalogu i pojawia się w zupełnie nieoczekiwanych miejscach? Przede wszystkim sprawdź php.ini pod kątem dozwolonego rozmiaru w parametrze upload_max_filesize. Najczęściej jest to błądwystępuje w Denver. Tak więc otwórz plik php.ini (zazwyczaj znajduje się on w folderze php) i ustaw żądany rozmiar:

;;;;;;;;;;;;;; 
; Przesyłanie plików;
;;;;;;;;;;;;;;

; Określa, czy zezwalać na przesyłanie plików HTTP.
; http://php.net/file-uploads
file_uploads = Włącz

; Katalog tymczasowy dla przesłanych plików HTTP (użyje domyślnego systemu, jeśli nie
;
; http://php.net/upload-tmp-dir
upload_tmp_dir = "***"

; Maksymalny dozwolony rozmiar dla przesłanych plików.
; http://php.net/upload-max-filesize
upload_max_filesize = 5M

; Max_file_uploads = 50


Jeśli pracujesz na serwerze, zapytaj dostawcę, którego pliki mogą pobierać. W przypadku darmowego hostingu maksymalna kwota wynosi zwykle 2 MB. Drugim powodem, dla którego kod może się nie powieść, jest ustawienie niewłaściwego katalogu. Sprawdź drugi argument move_uploaded_file, musi zawierać ścieżkę i koniecznie nazwę.

Powiązane publikacje