PHP: качване на файл на сървъра
Изтеглянето на файлове чрез PHP е много интересно нещо, трябва да го подхождате много внимателно. В интернет можете да намерите много примери за изпълнението на изтегляния на файлове, но не всички от тях са добри и отговарят на правилата за сигурност.
съдържание
Такива неща трябва да бъдат доведени докрай, дори и да отнеме много време. Ако оставите дупка в кода, тогава целият ви сървър може да е изложен на риск.
безопасност
Използване на PHP изтегляне на файлове на сървъра е достатъчно лесно. Кодът е много кратък и прост. Само няколко реда. Но такъв метод е опасен. Където повече време и линии код отиват за сигурност.
Опасността е, че ако не извършвате никакви проверки, всеки хакер ще може да изтегли скриптовете на вашия сървър. В този случай той ще има пълен достъп. Той може да направи всичко, което иска:
- изтриване на базата данни;
- изтриване на файлове в сайта;
- модифициране на файлове в сайта;
- добавете рекламите си в сайта си;
- изтегляне на вируси;
- пренасочване на всички потребители към техните сайтове;
- и много повече, че крадецът ще дойде на ум.
Винаги трябва да проверявате какво се опитва да зареди файла за файла. Ако, например, качвате само снимки, трябва да проверите дали този файл е точно изображението. В противен случай ще бъдете изтеглени от всичко.
Как точно да приложим теста ще бъде показано по-късно, когато разглеждате пряко скрипта за изтегляне на файлове.
Създаване на PHP формуляр
Формулярът за изтегляне на файлове изглежда много прост. Достатъчно бутони за сърфиране и бутони за изтегляне.
Няма да опишем създаването на формата, тъй като е лесно. Допълнителни указания предполагат, че вече имате основните понятия за HTML (в противен случай няма да търсите информация за зареждането в PHP).
Но имайте предвид, че за да прехвърлите данни във формата, трябва да добавите атрибута enctype.
В противен случай данните за файловата обработка няма да бъдат предадени.
Как трябва да работи това?
Когато кликнете върху бутона за сърфиране, трябва да отворите прозорец, където ще бъдете помолени да изберете файл.
След това трябва да се появи пътят, където се намира файлът.
Ако пътят не се появи, направете това отново.
След като кликнете върху бутона за изтегляне, всяка информация може да бъде изведена от файла за обработка.
Например, можете да напишете ред, в който се казва, че файл с така нареченото име е бил качен успешно в папка "такива и такива". Разбира се, името на файла винаги ще бъде различно.
Обикновено тази подробна информация се използва за отстраняване на грешки в кода. По този начин можете да проверите дали данните се прехвърлят, а записите отиват в директорията, от която се нуждаете. Това означава, че дори името на файла не показва. Тъй като това е допълнителна информация, която потребителят не се нуждае.
Има смисъл да се извеждат данни за името само ако потребителят изтегли няколко файла. Ще разгледаме този случай малко повече. Няма да бягаме напред.
регулиране
В PHP качването на файл на сървър изисква да се направят определени настройки във файла php.ini. В този файл има много настройки. Всички ние нямаме нужда от тях. Интересуваме се от три реда: file_uploads, upload_tmp_dir и upload_max_filesize.
Моля, имайте предвид, че тези настройки ще засегнат всички ваши сайтове на сървъра, а не само един от тях. Затова задайте максималния размер според това, което ще качвате на потребителите. Не се препоръчва да зададете твърде високи стойности.
След като промените стойностите в тези настройки, сървърът трябва да се рестартира. В противен случай настройките няма да влязат в сила, тъй като те се четат по време на зареждането на сървъра.
Можете да направите това в конзолата, като свържете чрез SSH към сървъра. Достатъчно е да въведете командната услуга httpd restart и след това настройките ще влязат в сила.
Друг начин е да рестартирате през панела на ISP или чрез панела за таксуване на доставчика.
Масив с файл
В PHP файлът се зарежда с масива $ _FILES. Той съдържа цялата информация за файловете, които ще изтеглим.
За да видим каква информация се съдържа в този масив, достатъчно е да напишете следното във файла за обработка.
Изберете всеки файл и кликнете върху "Изтегляне". Страницата с дръжки показва информация, съхранена в $ _FILES. Променливата е написана изцяло с големи букви. PHP е език, който отговаря на буквите.
Както можете да видите, в този масив има много полета. Всички те са важни за нас. Първото поле съхранява името на файла във формата, в която се използва на компютъра ви.
Типовата колона показва типа на файла. Полето tmp_name съответства на името на временния файл. След като скриптът приключи, той ще бъде изтрит.
В полето за грешка се съхранява кодът за грешка. За това малко повече. Размер - размер в байтове.
грешки
Изтеглянето на файл през PHP винаги е придружено от код за грешка. Съобщението за грешка е приложено в полето "грешка". В екранната снимка грешката е нула.
Помислете за стойностите на всички грешки:
По-горе беше казано за параметъра, който може да бъде посочен в нормалния 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. Ако планирате да изтеглите много файлове, по-добре е да ги заредите в различни папки. Така че ще бъде по-удобно. Особено, ако искате да почистите.
Кодът за изтегляне ще бъде както следва.
/// наличност на снимки
ако ($ _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) става чрез използване на допълнителни полета във формуляра.
Този метод не е много добър, защото ограничава броя на файловете за изтегляне. Освен това се смята за лош тон при програмирането. Опитайте се да направите всичко динамично.
Идеалната опция е възможността да изберете голям брой файлове наведнъж, като натиснете един бутон.
За целта създаваме формуляра с този код.
Обърнете внимание, че думата "multiple" е добавена и името е посочено като масив []. В този случай масивът $ _FILES ще бъде малко по-различен. Ще получите масив в масива.
За потвърждение можете отново да използвате var_dump ($ _FILES);
Всичките ви файлове ще бъдат разположени в масива по този начин:
- $ _FILES ["file1"] ["име"] [0]
- $ _FILES ["file1"] ["име"] [1]
- И така нататък.
В скоби се записва номерът на файла в масива. Преброяване от нулата. Ние ги обработваме по същия начин, просто настроим цикъла и при достъпа до горния код добавим индекс [$ i] в края.
$ i = 0;
докато ($ _FILES ["file1"] ["име"] [$ i]<> `)
{
/// въведете горния код
}
По този начин ще трябва да изтегляте файлове през PHP в един цикъл без излишно повторение на кода, както обикновено, ако използвате опцията за статичен номер на файла (последната снимка).
- Как да поставите сайта в интернет?
- Подробности за това, което е на FTP сървърите
- Какво е FTPS: принципът на работа и разликите от конвенционалните FTP
- Как да създадете собствен сървър в "Agarion"? Прост начин
- Популярни файлове за изтегляне на файлове от интернет
- FTPS порт - какво е това?
- Програма FileZilla: как да използвате? Инструкция за начинаещи
- Как в "MTA" да създадем сървър за приятели?
- Актуализирайте, ако кодът на снимката не е видим, или колко лесно и бързо да изтеглите файла
- Няма връзка със сървъра "Sharemann": какво да направя?
- FTP програми: Общ преглед на клиентите за Windows
- Как да създадем торент? Точно около комплекса
- FTP протокол
- XLS файлове - какво да отворите
- Как да създадете собствен сървър
- Какво трябва да направя, ако е превишено ограничение за изтегляне за диска Yandex?
- Как да създадете torrent файл за обект от вашия компютър
- Какво е торент и какво яде?
- Как да създадете сами FTP сървър?
- Как да прехвърлите сайта на друг хостинг сайт с CMS Joomla.
- Грешка 503. Каква е причината?