Как да изтеглите файл, използвайки PHP функция move_uploaded_file

В даден момент в кариерата си ще искате да създадете истински динамични уеб приложения. Може би ще решите да напишете социалната си мрежа. Като разработчик ще се опитате да получите интересуващи се потребители, да им дадете възможност да качват снимки, музика и да споделят файлове. В този случай трябва да знаете и да можете да работите с функцията PHP move uploaded file.

Формуляр за събиране на данни

PHP поддържа изтеглянето на всякакви файлове по метода POST. Затова е необходима HTML форма за прехвърляне на данни от сървъра или за запазване на локална машина. Използвайте маркировката, за да изберете отделно място, където потребителят може да избере файл. Скриптовете трябва да конфигурират всичко, така че данните да се изпращат неуспешно. Разгледайте този процес, като изтеглите снимка на потребителския профил.




enctype = "данни от няколко части /форми" & gt;











Обърнете внимание на атрибута enctype = "multipart /form-data". Благодарение на него формата е конфигурирана да получава данни. За да не могат потребителите да получат 25 MB зареждания, в скритото поле трябва задължително да зададете ограничение за размера на снимките. За снимката на профила е достатъчно 2 MB, както е в този пример.

& lt; скрипт async = "//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js">
& lt ;! - fb_336x280_2 - & gt;

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

Изпращане на изображение

Формата по-горе в действието на атрибута означава, че приемането иобработката на изображението ще се извърши в същия документ. Ако това ви обърква и искате всяко действие да има свой собствен скрипт, поставете името на скрипта на място, например create_profile.php. Сега целият код, включително функцията за PHP файл за качване, е записана в този файл.

„Макс. размер на файла, посочен в php.ini ',
2 = & gt; Макс е превишен размер на файла, определен в HTML формуляра ',
3 = & gt; „Само част от файла е изпратена“,
4 = & gt; „Файлът за изпращане не бе избран.“);
//проверка на грешки при изпращане на файл
($ _FILES [$ image_fieldname] ['error'] == 0) или
die ("грешка при изпращане на файл". $ Php_errors [$ _ FILES [$ image_fieldname ] ['error']]));
//проверете нормалния файл за изпращане, или това е опит за хакване
@is_uploaded_file ($ _FILES [$ image_fieldname] ['tmp_name']) или
die ("Вие извършвате неморален акт, срам!") 's file: "."
//е предложеният файл с изображение
@getimagesize ($ _FILES [$ image_fieldname] ['tmp_name']) или умре ("Грешка! Избраният от вас файл не е изображение." "Име на файл {$ _FILES [$ image_fieldname] ['tmp_name']} ");
//Присвояване на уникално име за сваляне
$ now = time ();
докато (file_exists ($ upload_filename = $ uploads_dir. $ Сега.'- '. $ _ FILES [$ image_fieldname] [' name ']))) {
$ now ++;
}
?

В кода има допълнителни променливи:


& lt; script type = "text /javascript" & gt;
може да blockSettings2 = {blockId: "R-A-271049-5", renderTo: "yandex_rtb_R-A-70350-39", async:! 0};
if (document.cookie.indexOf ("abmatch =") & gt; = 0) blockSettings2.statId = 70350;
Функция (a, b, c, d, e) {a [c] = a [c] || [], a [c] .push (функция () {Ya.Context.AdvManager.render (blockSettings2)}), e = b.getElementsByTagName ("скрипт") , d = b.createElement ("скрипт"), d.type = "text /javascript", d.src = "//an.yandex .ru /system /context.js ", d.async =! 0e.parentNode.insertBefore (d, e)} (това, този.документ," yandexContextAsyncCallbacks ");
  • $ Upload_dir е регистриран пътв директорията за изтегляне. Вместо HOSW_WWW_ROOT, напишете абсолютния път към работната директория на сървъра или компютъра.
  • Променлива $ image_fieldname е името на полето за изображение в HTML форма.

Както можете да видите, преди да преминете към файла за качване, има редове, които проверяват изтегленото изображение. Разбира се, защитените PHP приложения са мит, но трябва да има поне минимална защита.

Масивът за проверка на грешките $ php_errors не започва от нулата, а от единицата. Под индексае $ _FILES [$ image_fieldname] ['error'], което в случай на успешно зареждане връща числото 0. В PHP $ _FILES е специален масив, съдържащ цялата информация за файла. За достъп до тези данни използваме индекса с името на полето за въвеждане, което по-рано сме включили в отделна променлива $ image_fieldname:


& lt; script type = "text /javascript" & gt;
може да blockSettings3 = {blockId: "R-A-271049-6", renderTo: "yandex_rtb_R-A-70350-44", async: 0};
if (document.cookie.indexOf ("abmatch =")> = 0) blockSettings3.statId = 70350;
Функция (a, b, c, d, e) {a [c] = a [c] || [], a [c] .push (функция () {Ya.Context.AdvManager.render (blockSettings3)}), e = b.getElementsByTagName ("скрипт") , d = b.createElement ("скрипт"), d.type = "text /javascript", d.src = "//an.yandex .ru /system /context.js ", d.async =! 0e.parentNode.insertBefore (d, e)} (това, този.документ," yandexContextAsyncCallbacks ");
//проверка за грешки при изпращане на файл
($ _FILES [$ image_fieldname] ['error'] == 0) или
die ("грешка при изпращане на файл". $ Php_errors) [$ _FILES [$ image_fieldname] ['error']]));

Когато преместеният файл не работи

Смятате ли, че сте направили всичко правилно и преводачът прави грешка? Файлът отказва да се зареди в указаната директория и се появява в напълно неочаквани места? Преди всичко проверете php.ini за разрешения размер в параметъра upload_max_filesize. Най-често това е грешкасе случва в Денвър. Така че отворете php.ini (обикновено е в php папката) и просто задайте желания размер:

;;;;;;;;;;;;;;;; 
; Качване на файлове;
;;;;;;;;;;;;;;;;

; Дали да се разреши качването на HTTP файлове.
; http://php.net/file-uploads
file_uploads = On

; Временна директория за заредени от HTTP файлове (ще използва системната настройка по подразбиране, ако не е
);
; http://php.net/upload-tmp-dir
upload_tmp_dir = "***"

; Максимален разрешен размер за качени файлове.
; http://php.net/upload-max-filesize
upload_max_filesize = 5M

; Max_file_uploads = 50


Ако работите на сървър, попитайте доставчика, чиито файлове са разрешени за изтегляне. На безплатен хостинг, максималната сума обикновено е 2 MBytes. Втората причина, поради която кодът може да се провали, е, че е създадена грешна директория. Проверете втория аргумент на move_uploaded_file, той трябва да включва пътя и задължително името.

Свързани публикации