От автора: у меня на компьютере творится полнейший бардак! Жена позабивала винт всякими «чемоданами без ручек», какими-то непонятными программами. Кроме этого накачала уйму книг по кулинарии, цветоводству и о том, как узнать о неверности мужа. Из-за последней категории литературы я и боюсь что-то удалять. Вот решил все ее дамские файловые «фичи» закинуть куда-нибудь в онлайн. Получается, что загрузка файлов на сервер PHP актуальна не только для вас, но и для меня :).
Зачем нам серверное пространство?
Не думаю, что такой вопрос может возникнуть у кого-то. Но всякое бывает! Скажу только, что различные решения для загрузки чего-либо на серверное пространство востребованы в сфере сайтостроения. Благо, за примерами бегать далеко не надо.
Все мы являемся пользователями той или иной социалки. Паутинки этих «липких» сетей окутали, затронули всех и каждого. Чтобы загрузить в свой профиль фотки с отдыха, с семейного торжества и другие доказательства успешной жизни, используется загрузка файлов на сервер через PHP.
Кроме этого подобный функционал реализован и на обычных сайтах с поддержкой комментариев. Пользователю предоставляется возможность украсить свой аккаунт аватаркой, выделяющей его среди остальной аудитории. В общем, по всей Сети на серверное пространство грузят все и каждый.
Проще не бывает!
Любое программное решение можно «обвешать» стольким количеством дополнительного функционала, что порой автор и сам забывает, какая из функций программы является основной.
Но мы постараемся так не закапываться. Рассмотрим основы PHP загрузки файла на сервер на примере, который не «отяжелен» различными фичами. То есть это будет просто загрузчик.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<html> <head> <title></title> </head> <body> <form name="form1" action="chernovik.php" enctype="multipart/form-data" method="post"> <input type="file" name="path" title="Выберите файл"/> </br> </br> <input type="submit" name="button" /> </br> </body> </html> <?php $file = "upload/".$_FILES['path']['name']; move_uploaded_file($_FILES['path']['tmp_name'], $file); if(isset($_FILES['path']['name'])) { echo "Загруженный файл: ".$_FILES['path']['name']."</br>"; echo "Размер: ".$_FILES['path']['size']."байт"; } ?> |
Несколько слов о коде
Теперь рассмотрим тонкости, как загрузить файл на сервер PHP. В теге формы обязательно нужно прописать enctype.
Чаще всего данный атрибут не указывается, но при пересылке файлов нам нужно отключить кодировку. Для этого используется значение multipart/form-data.
Чтобы получить доступ к полям формы, обращаемся к глобальному массиву $_FILES. Файлы не сразу загружаются в указанную папку. Первоначально они сохраняются во временной директории. Ее путь записан в значении элемента массива $_FILES[‘path’][‘tmp_name’]. Таким образом реализуется безопасная загрузка файлов на серверы PHP.
Для перемещения загруженного файла из временной директории в указанную папку используем move_uploaded_file(). Затем с помощью $_FILES выводим размер файла и его имя.
Совершенствуемся
Немного усовершенствуем наш loader. Реализуем PHP загрузку нескольких файлов на серверное пространство:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
<html> <head> <title></title> </head> <body> <form name="form1" action="chernovik.php" enctype="multipart/form-data" method="post"> <input type="file" name="path" title="Выберите первый файл"/></br> </br> <input type="file" name="path1" title="Выберите второй файл"/> </br> </br> <input type="submit" name="button" /> </br> </body> </html> <?php $file = "upload/".$_FILES['path']['name']; $file1 = "upload/".$_FILES['path1']['name']; move_uploaded_file($_FILES['path']['tmp_name'], $file); move_uploaded_file($_FILES['path1']['tmp_name'], $file1); if(isset($_FILES['path']['name'])==true & isset($_FILES['path1']['name'])==true) { echo "Загруженный первый файл: ".$_FILES['path']['name']."</br>"; echo "Размер: ".$_FILES['path']['size']."байт"."</br>"; echo "Загруженный второй файл: ".$_FILES['path1']['name']."</br>"; echo "Размер: ".$_FILES['path1']['size']."байт"."</br>"; } ?> |
Конечно, можно реализовать загрузку файлов на сервер с помощью PHP и Ajax, но тогда придется усложнять наш базовый пример. А этого нам не нужно :).