Узнаем как загрузить файл с помощью функции PHP move_uploaded_file

В какой-то момент своей карьеры вы захотите создавать настоящие динамические веб-приложения. Может решите написать свою социальную сеть. Как разработчик вы будете стараться заинтересовать пользователей, дать им возможность загружать фотографии, музыку, обмениваться файлами. На этот случай вам необходимо знать и уметь работать с функцией PHP move uploaded file.

Функция php move_uploaded_file()

Форма для сбора данных

PHP поддерживает загрузку любых файлов методом POST. Поэтому для передачи данных серверу, или сохранения их на локальную машину нужна HTML-форма. С помощью разметки выделите отдельное место, где бы пользователь мог выбрать файл. Сценарии нужно настроить все так, чтобы данные отправлялись без сбоев. Рассмотрим этот процесс на примере загрузки фотографии для профиля.


<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST" id="signup_form"  enctype="multipart/form-data">  	<fieldset>          <label for="first_name">First Name:</label>           <input type="text" name="first_name" size="20">          <label for="last_name">Last Name:</label>           <input type="text" name="last_name" size="20">          <input type="hidden" name="MAX_FILE_SIZE" value="2000000">          <label for="user_pic">Отправка изображения:</label>          <input type="file" name="user_pic" size="30">          <input type="submit" value="Отправить">          <input type="reset" value="Очистить">        </fieldset>      </form>

Обратите внимание на атрибут enctype="multipart/form-data". Именно благодаря ему форма настроена на получение данных. Чтобы пользователи не придумали загружать котиков на 25 Мбайт, в поле hidden нужно обязательно установить ограничение на размер картинок. Для изображения профиля вполне достаточно 2 Мбайт, как в этом примере.


функция PHP move_uploaded_file

Отправка изображения

В форме выше в атрибуте action стоит <?php echo $_SERVER['PHP_SELF'];?>, означающий, что прием и обработка изображения будет происходить в этом же документе. Если вас это смущает и вы хотите, чтобы для каждого действия был свой отдельный скрипт, вставьте на место конструкции имя сценария, например, create_profile.php. Теперь весь код, включая работу с функцией PHP move uploaded file , записывайте в этом файле.

<?php  //собираю информацию из формы  $first_name = htmlspecialchars(trim($_REQUEST['first_name']));  $last_name = htmlspecialchars(trim($_REQUEST['last_name']));  //место хранения файлов  $uploads_dir = HOST_WWW_ROOT."uploads/profile_pics/";  $image_fieldname = "user_pic";    // Потенциальные PHP-ошибки отправки файлов  $php_errors = array(1 => 'Превышен макс. размер файла, указанный в php.ini',  2 => 'Превышен макс. размер файла, указанный в форме HTML',  3 => 'Была отправлена только часть файла',  4 => 'Файл для отправки не был выбран.');  //проверка ошибки при отправке файла  ($_FILES[$image_fieldname]['error']==0) or  die("Возникла ошибка при отправке файла". $php_errors[$_FILES[$image_fieldname]['error']]);  //проверить нормальный ли файл отправляют, или это попытка взлома  @is_uploaded_file($_FILES[$image_fieldname]['tmp_name']) or   die('Вы совершиете безнравственный поступок, позор!'."Имя файла: "."'{$_FILES[$image_fieldname]['tmp_name']}'");  //является ли отправляемый файл изображением  @getimagesize($_FILES[$image_fieldname]['tmp_name']) or die("Ошибочка! выбранный Вами файл не является изображением". "Имя файла {$_FILES[$image_fieldname]['tmp_name']}");  //присвоение загружаемому файлу уникального имени  $now = time();  while(file_exists($upload_filename = $uploads_dir.$now.'-'.$_FILES[$image_fieldname]['name'])){    $now++;  }  ?>

В коде присутствуют вспомогательные переменные:


  • В $upload_dir прописан путь к директории для загрузки. Вместо HOSW_WWW_ROOT пишите абсолютный путь к рабочему каталогу на сервере или у себя на компьютере.
  • Переменная $image_fieldname - это имя поля для изображения в HTML-форме.

Как видите, перед вызовом move uploaded file находятся строки, выполняющие проверку загружаемого изображения. Конечно, безопасные PHP-приложения — это миф, но должна присутствовать хотя бы минимальная защита.

Массив проверки ошибок $php_errors начинается не с нуля, а с единицы. Под индексом [0] стоит $_FILES[$image_fieldname]['error'], который в случае удачной загрузки возвращает число 0. В PHP $_FILES - это специальный массив, содержащий всю информацию о файле. Для доступа к этим данным используется индекс с именем поля ввода, которое мы ранее вывели в отдельную переменную $image_fieldname:

//проверка ошибки при отправке файла  ($_FILES[$image_fieldname]['error']==0) or  die("Возникла ошибка при отправке файла". $php_errors[$_FILES[$image_fieldname]['error']]);

Когда move uploaded file PHP не работает

Вам кажется, что вы все сделали правильно, а интерпретатор выдает ошибку? Файл отказывается загружаться в назначенную директорию и появляется в абсолютно неожиданных местах? В первую очередь проверьте php.ini на разрешенный размер в параметре upload_max_filesize. Чаще всего такая ошибка возникает у Denver. Поэтому откройте php.ini (обычно он находиться в папке php) и просто установите нужный вам размер:

;;;;;;;;;;;;;;;;  ; File Uploads ;  ;;;;;;;;;;;;;;;;    ; Whether to allow HTTP file uploads.  ; http://php.net/file-uploads  file_uploads=On    ; Temporary directory for HTTP uploaded files (will use system default if not  ; specified).  ; http://php.net/upload-tmp-dir  upload_tmp_dir="***"    ; Maximum allowed size for uploaded files.  ; http://php.net/upload-max-filesize  upload_max_filesize=5M    ; Maximum number of files that can be uploaded via a single request  max_file_uploads=50

Если вы работаете на сервере, поинтересуйтесь у провайдера, файлы какого размера разрешено загружать. На бесплатном хостинге максимальный объем обычно 2 Мбайта. Вторая причина, по которой код может давать сбой, — неверно назначенная директория. Проверьте второй аргумент функции move_uploaded_file, он должен включать путь и обязательно имя.

Чтение файла функцией file get content PHP
Чтение содержимого файла целиком - естественная операция, и во многих случаях лучшее решение - использование функции file_get_contents на PHP.
далее
Будьте осторожны с PHP empty при ее использовании в шорткодах ...
Изучаем особенности функции PHP empty на примере написания шорткода для Wordpress. Ошибки, которые могут возникать из-за неправильного ее применения. Как правильно использовать условия, чтобы не получать неожиданные результаты в своей программе.
далее
Функции файловой системы PHP: opendir, readdir, closedir
PHP предоставляет программисту возможность навигации по файловой системе сайта для поиска файлов и папок. Особенно актуально использование функций работы с файловой системой для веб-ресурсов, использующих CMS.
далее
Проверка наличия файла PHP file_exists
Широкое применение баз данных не лишило обычную файловую систему значения. Запись и чтение файлов по-прежнему занимают значимое место в программировании. Функции проверки наличия файла позволяют избежать ошибок при исполнении кода.
далее
PHP: загрузка файла на сервер
При помощи PHP загрузка файлов на сервер осуществляется дотаточно легко. Код очень короткий и простой. Всего лишь пара строк. Но такой метод опасен. Куда больше времени и строк кода уходит на безопасность.
далее
PHP: загрузка файла на сервер
Удаление файлов функцией PHP unlink
При загрузке файлов на сайт и при работе веб-ресурса возникает задача удаления устаревших или ненужных файлов. Для решения этой задачи PHP предлагает функцию unlink. Для безопасного удаления важное значение имеют имя файла и организация процесса.
далее
Удаление файлов функцией PHP unlink
Узнаем как произвести запись в файл php
Если вы самостоятельно усваиваете работу с php, то важно научиться читать данные из файла и вводить в него изменения. Запись в файл php ведется для разработки веб-приложений, изменений серверной информации и запуска внешний программ и включений.
далее
Узнаем как произвести запись в файл php
CGI-скрипты: что это, способы создания
CGI - приложение упрощает создание сложных, высокопроизводительных, многоразовых веб-приложений. Помогает выполнять проектирование, запись и развитие веб-проектов. Оно разумно применяет использование технологий и методов, которые связывают разработчика с любым набором инструментов в таких постоянных средах, как FastCGI или mod_perl.
далее
CGI-скрипты: что это, способы создания
Функция PHP file_put_contents(): безопасная запись данных
Запись и чтение данных посредством файловой системы - популярная операция. База данных - это всегда хорошо, но простые файловые операции продолжают быть актуальными. Это быстро, удобно и комфортно для разработчика.
далее
Функция PHP file_put_contents(): безопасная запись данных