muzruno.com

PHP: качване на файл на сървъра

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

Такива неща трябва да бъдат доведени докрай, дори и да отнеме много време. Ако оставите дупка в кода, тогава целият ви сървър може да е изложен на риск.

безопасност

Използване на PHP изтегляне на файлове на сървъра е достатъчно лесно. Кодът е много кратък и прост. Само няколко реда. Но такъв метод е опасен. Където повече време и линии код отиват за сигурност.

Опасността е, че ако не извършвате никакви проверки, всеки хакер ще може да изтегли скриптовете на вашия сървър. В този случай той ще има пълен достъп. Той може да направи всичко, което иска:

  • изтриване на базата данни;
  • изтриване на файлове в сайта;
  • модифициране на файлове в сайта;
  • добавете рекламите си в сайта си;
  • изтегляне на вируси;
  • пренасочване на всички потребители към техните сайтове;
  • и много повече, че крадецът ще дойде на ум.

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

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

Създаване на PHP формуляр

Формулярът за изтегляне на файлове изглежда много прост. Достатъчно бутони за сърфиране и бутони за изтегляне.

php файл за изтегляне форма

Няма да опишем създаването на формата, тъй като е лесно. Допълнителни указания предполагат, че вече имате основните понятия за HTML (в противен случай няма да търсите информация за зареждането в PHP).

Но имайте предвид, че за да прехвърлите данни във формата, трябва да добавите атрибута enctype.

качване на файлове чрез php

В противен случай данните за файловата обработка няма да бъдат предадени.

Как трябва да работи това?

просто изтегляне на php файловеКогато кликнете върху бутона за сърфиране, трябва да отворите прозорец, където ще бъдете помолени да изберете файл.

След това трябва да се появи пътят, където се намира файлът.

бързо изпращане на файлове чрез php

Ако пътят не се появи, направете това отново.

След като кликнете върху бутона за изтегляне, всяка информация може да бъде изведена от файла за обработка.

формуляр за качване на файлове чрез PHP

Например, можете да напишете ред, в който се казва, че файл с така нареченото име е бил качен успешно в папка "такива и такива". Разбира се, името на файла винаги ще бъде различно.

Обикновено тази подробна информация се използва за отстраняване на грешки в кода. По този начин можете да проверите дали данните се прехвърлят, а записите отиват в директорията, от която се нуждаете. Това означава, че дори името на файла не показва. Тъй като това е допълнителна информация, която потребителят не се нуждае.

Има смисъл да се извеждат данни за името само ако потребителят изтегли няколко файла. Ще разгледаме този случай малко повече. Няма да бягаме напред.

регулиране

В PHP качването на файл на сървър изисква да се направят определени настройки във файла php.ini. В този файл има много настройки. Всички ние нямаме нужда от тях. Интересуваме се от три реда: file_uploads, upload_tmp_dir и upload_max_filesize.

Моля, имайте предвид, че тези настройки ще засегнат всички ваши сайтове на сървъра, а не само един от тях. Затова задайте максималния размер според това, което ще качвате на потребителите. Не се препоръчва да зададете твърде високи стойности.

След като промените стойностите в тези настройки, сървърът трябва да се рестартира. В противен случай настройките няма да влязат в сила, тъй като те се четат по време на зареждането на сървъра.

Можете да направите това в конзолата, като свържете чрез SSH към сървъра. Достатъчно е да въведете командната услуга httpd restart и след това настройките ще влязат в сила.

Друг начин е да рестартирате през панела на ISP или чрез панела за таксуване на доставчика.

как да рестартирате сървър

Масив с файл

В PHP файлът се зарежда с масива $ _FILES. Той съдържа цялата информация за файловете, които ще изтеглим.

За да видим каква информация се съдържа в този масив, достатъчно е да напишете следното във файла за обработка.

изтегляне на php файла

Изберете всеки файл и кликнете върху "Изтегляне". Страницата с дръжки показва информация, съхранена в $ _FILES. Променливата е написана изцяло с големи букви. PHP е език, който отговаря на буквите.

php изтегляне на файлове на сървъра

Както можете да видите, в този масив има много полета. Всички те са важни за нас. Първото поле съхранява името на файла във формата, в която се използва на компютъра ви.

Типовата колона показва типа на файла. Полето tmp_name съответства на името на временния файл. След като скриптът приключи, той ще бъде изтрит.

В полето за грешка се съхранява кодът за грешка. За това малко повече. Размер - размер в байтове.

грешки

Изтеглянето на файл през PHP винаги е придружено от код за грешка. Съобщението за грешка е приложено в полето "грешка". В екранната снимка грешката е нула.

PHP скрипт за изтегляне на файлове

Помислете за стойностите на всички грешки:

изтегляне на грешкиПо-горе беше казано за параметъра, който може да бъде посочен в нормалния HTML.

Ето един пример за формуляр за качване на файл, където е зададен лимит за размера на файла, който се качва.

html формат за качване на файлове

PHP: скрипт за изтегляне на файлове

Как се прави всичко на практика? В PHP файлът се изтегля с помощта на командата за копиране. Ако се интересувате от въпроса как да качите файл, то отговорът е просто копие, което използва два параметъра - файла източник и целевия файл.

Но, както беше споменато по-горе, това не може да бъде ограничено от съображения за сигурност. Например, за да проверим какъв вид файл изпращаме, можем да използваме типа поле в масива $ _FILES. Първо, ще го разберем с тест, след което ще преминем към пълния скрипт

Да приемем, че искате потребителите да качват снимка с разделителна способност само на GIF, JPEG или PNG. Можете да го посочите по следния начин.

ако ($ _FILES [`file_upload`] [`тип`]! = "image / gif") {
echo "Съжаляваме, поддържаме изтегляне само на Gif файлове" -
exit-
}

Ако искате да изпратите всичките 3 типа, просто добавете допълнително условие с различен тип изображение.

Копирането се извършва по следния начин: копие (файл 1, файл 2).

В нашия случай, когато работата продължава с изтеглянето от компютъра към сървъра, можете да го направите

копие ($ _ FILES [`file_upload`] ["tmp_name"], "1.jpg")

Тоест файлът ще бъде копиран с името 1.jpg. Това не е съвсем правилно. В този случай това е само пример. Името на файла трябва винаги да е настроено по различен начин, а разширението трябва да бъде зададено в зависимост от файла.

Можете да дефинирате разширението по много начини. Всичко зависи от ерудицията на разработчика. Един от най-бързите начини (разликата в десети от секунди) за дефиниране на разширение е следният код.

$ path_info = pathinfo ($ _FILES [`photo1`] ["име"]);

$ ext = $ path_info [`разширение`];

В променливата $ ext ще запазим желаното разширение. И името на файла може да се зададе произволно с md5. Ако планирате да изтеглите много файлове, по-добре е да ги заредите в различни папки. Така че ще бъде по-удобно. Особено, ако искате да почистите.

Кодът за изтегляне ще бъде както следва.



проверка на типа на php файла

/// наличност на снимки

ако ($ _FILES [`photo1`] [`tmp_name`] == null)

{

ехо ("

Файлът не е посочен.

Обратно ...

") -

изход;

}

///. Да приемем, че имате разрешение да качите големи файлове (видео) за даден проект на сървъра, но ще има само снимки и потребителите трябва да ограничат

ако ($ _FILES ["photo1"] ["размер"]> 1024 * 1024 * 2)

{

?>

Максималният разрешен размер на изображението 2 MB

Обратно ...

изход;

}

// създайте папки

// създайте папката за текущия месец

ако (!! file_exists ("img /". дата ("M")))

{

mkdir ("img /". дата ("М"));

}

// създайте папка от текущия ден

ако (!! file_exists ("img /". дата ("M").

{

mkdir ("img /". дата ("M").

}

/// файлово разширение

$ path_info = pathinfo ($ _FILES [`photo1`] ["име"]);

$ ext = $ path_info [`разширение`];

/// генерира името на файла

$ id = md5 (дата ("Y-M-d"));

ако копирате ($ _FILES [`photo1`] ["tmp_name"], "img /" дата ("M"). )

{

echo ("Файлът е изтекъл успешно");

}

/// всички допълнителни действия (писане в базата данни и т.н.)

}

Няколко файла

Изтеглянето на няколко файла (PHP) става чрез използване на допълнителни полета във формуляра.

изтегляне на няколко php файла

Този метод не е много добър, защото ограничава броя на файловете за изтегляне. Освен това се смята за лош тон при програмирането. Опитайте се да направите всичко динамично.

Идеалната опция е възможността да изберете голям брой файлове наведнъж, като натиснете един бутон.

За целта създаваме формуляра с този код.

Обърнете внимание, че думата "multiple" е добавена и името е посочено като масив []. В този случай масивът $ _FILES ще бъде малко по-различен. Ще получите масив в масива.

За потвърждение можете отново да използвате var_dump ($ _FILES);

Всичките ви файлове ще бъдат разположени в масива по този начин:

  1. $ _FILES ["file1"] ["име"] [0]
  2. $ _FILES ["file1"] ["име"] [1]
  3. И така нататък.

В скоби се записва номерът на файла в масива. Преброяване от нулата. Ние ги обработваме по същия начин, просто настроим цикъла и при достъпа до горния код добавим индекс [$ i] в края.

$ i = 0;

докато ($ _FILES ["file1"] ["име"] [$ i]<> `)

{

/// въведете горния код

}

По този начин ще трябва да изтегляте файлове през PHP в един цикъл без излишно повторение на кода, както обикновено, ако използвате опцията за статичен номер на файла (последната снимка).

Споделяне в социалните мрежи:

сроден