Загрузка файлов при помощи PHP. Основы
Чтобы иметь возможность загрузить файл необходимо выполнить следующие действия:
- добавить в форму атрибут
enctype
, а именноenctype="multipart/form-data"
- Нужному элементу input обозначить атрибут type и присвоить ему значение
file
,type="file"
Обратите внимание, что обращаться к загруженному файлу нужно не через массив $_POST
, а посредством суперглобального массива $_FILES
.
Стоит иметь ввиду, что загружаемые файлы перемещаются во временную папку и если вы не переместите их в нужное место, они исчезнут (будут удалены). Сделано это с целью безопасности:
- вы можете просканировать файл на наличие вирусов и не только.
HTML
<input type="file" name="image" id="image">
Многомерный массив $_FILES
содержит, для вышеприведенного примера, один элемент, ключ которого соответствует значению атрибута name
. Который, соответственно, содержит другой массив, состоящий из других элементов (name,type,tmp_name,error,size
).
Права доступа
Хостинговые компании, в общей массе, налагают строгие правила на владение файлами и директориями.
Итак, некоторым директориям - директориям, в которые вы собираетесь подгружать файлы, необходимо предоставить глобальный доступ (chmod 777
).
Команды, расположенные в наименее безопасном порядке:
777
- крайняя необходимость700
770
Если вы тестируете загрузку файлов в windows, то вам не придется использовать вышеприведенные команды - все доступно.
Функция move_upload_file
позволяет переместить файл из временной папки туда, куда вам нужно. Включает два агрумента:
Имя временного файла (хранится в элементе с ключом tmp_name
) и путь к новому расположению файла, включая имя самого файла (вы можете переименовать так, как хотите).
Тестируем на локальном компьютере:
PHP
move_uploaded_file($_FILES['name_image_file']['tmp_name'], 'C:/upload_test/'.$_FILES['name_image_file']['name']);
В вышеприведенном примере загружаем файл в нужную директорию под оригинальным именем.
На удаленном сервере, наверное, стоит указать путь относительно корневой директории сайта:
/home/sss/ffff/upload_test/;
Комментарии к статье