Загрузка файлов при помощи 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- крайняя необходимость700770
Если вы тестируете загрузку файлов в 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/;

Комментарии к статье