Учебники

PHP — загрузка файлов

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

Информация на странице phpinfo.php описывает временный каталог, который используется для выгрузки файлов, в виде upload_tmp_dir, а максимально допустимый размер файлов, которые могут быть загружены, указывается как upload_max_filesize . Эти параметры устанавливаются в конфигурационный файл PHP php.ini.

Процесс загрузки файла состоит из следующих шагов:

  • Пользователь открывает страницу, содержащую HTML-форму с текстовыми файлами, кнопкой обзора и кнопкой отправки.

  • Пользователь нажимает кнопку обзора и выбирает файл для загрузки с локального ПК.

  • Полный путь к выбранному файлу появляется в текстовом поле, после чего пользователь нажимает кнопку отправки.

  • Выбранный файл отправляется во временный каталог на сервере.

  • Сценарий PHP, который был указан в качестве обработчика формы в атрибуте действия формы, проверяет, что файл получен, а затем копирует файл в предполагаемый каталог.

  • Сценарий PHP подтверждает успех для пользователя.

Пользователь открывает страницу, содержащую HTML-форму с текстовыми файлами, кнопкой обзора и кнопкой отправки.

Пользователь нажимает кнопку обзора и выбирает файл для загрузки с локального ПК.

Полный путь к выбранному файлу появляется в текстовом поле, после чего пользователь нажимает кнопку отправки.

Выбранный файл отправляется во временный каталог на сервере.

Сценарий PHP, который был указан в качестве обработчика формы в атрибуте действия формы, проверяет, что файл получен, а затем копирует файл в предполагаемый каталог.

Сценарий PHP подтверждает успех для пользователя.

Как обычно, при записи файлов необходимо, чтобы как временные, так и конечные местоположения имели разрешения, разрешающие запись файлов. Если какой-либо из них установлен только для чтения, процесс завершится ошибкой.

Загруженный файл может быть текстовым файлом, файлом изображения или любым документом.

Создание формы загрузки

Следующий код HTM ниже создает форму загрузчика. Эта форма имеет атрибут метода, установленный на post, и атрибут enctype, установленный на multipart / form-data

Live Demo

<?php
   if(isset($_FILES['image'])){
      $errors= array();
      $file_name = $_FILES['image']['name'];
      $file_size =$_FILES['image']['size'];
      $file_tmp =$_FILES['image']['tmp_name'];
      $file_type=$_FILES['image']['type'];
      $file_ext=strtolower(end(explode('.',$_FILES['image']['name'])));
      
      $extensions= array("jpeg","jpg","png");
      
      if(in_array($file_ext,$extensions)=== false){
         $errors[]="extension not allowed, please choose a JPEG or PNG file.";
      }
      
      if($file_size > 2097152){
         $errors[]='File size must be excately 2 MB';
      }
      
      if(empty($errors)==true){
         move_uploaded_file($file_tmp,"images/".$file_name);
         echo "Success";
      }else{
         print_r($errors);
      }
   }
?>
<html>
   <body>
      
      <form action="" method="POST" enctype="multipart/form-data">
         <input type="file" name="image" />
         <input type="submit"/>
      </form>
      
   </body>
</html>

Это даст следующий результат —

Загрузить форму

Создание сценария загрузки

Существует одна глобальная переменная PHP с именем $ _FILES . Эта переменная является ассоциированным массивом двойных измерений и содержит всю информацию, относящуюся к загруженному файлу. Таким образом, если значение, присвоенное атрибуту имени входа в форме загрузки, было file , то PHP создаст следующие пять переменных:

  • $ _FILES [‘file’] [‘tmp_name’] — загруженный файл во временный каталог на веб-сервере.

  • $ _FILES [‘file’] [‘name’] — фактическое имя загруженного файла.

  • $ _FILES [‘file’] [‘size’] — размер в байтах загружаемого файла.

  • $ _FILES [‘file’] [‘type’] — MIME-тип загружаемого файла.

  • $ _FILES [‘file’] [‘error’] — код ошибки, связанный с загрузкой этого файла.

$ _FILES [‘file’] [‘tmp_name’] — загруженный файл во временный каталог на веб-сервере.

$ _FILES [‘file’] [‘name’] — фактическое имя загруженного файла.

$ _FILES [‘file’] [‘size’] — размер в байтах загружаемого файла.

$ _FILES [‘file’] [‘type’] — MIME-тип загружаемого файла.

$ _FILES [‘file’] [‘error’] — код ошибки, связанный с загрузкой этого файла.

пример

Приведенный ниже пример должен позволять загружать изображения и давать результат в виде информации о загруженном файле.

Live Demo

<?php
   if(isset($_FILES['image'])){
      $errors= array();
      $file_name = $_FILES['image']['name'];
      $file_size = $_FILES['image']['size'];
      $file_tmp = $_FILES['image']['tmp_name'];
      $file_type = $_FILES['image']['type'];
      $file_ext=strtolower(end(explode('.',$_FILES['image']['name'])));
      
      $extensions= array("jpeg","jpg","png");
      
      if(in_array($file_ext,$extensions)=== false){
         $errors[]="extension not allowed, please choose a JPEG or PNG file.";
      }
      
      if($file_size > 2097152) {
         $errors[]='File size must be excately 2 MB';
      }
      
      if(empty($errors)==true) {
         move_uploaded_file($file_tmp,"images/".$file_name);
         echo "Success";
      }else{
         print_r($errors);
      }
   }
?>
<html>
   <body>
      
      <form action = "" method = "POST" enctype = "multipart/form-data">
         <input type = "file" name = "image" />
         <input type = "submit"/>
			
         <ul>
            <li>Sent file: <?php echo $_FILES['image']['name'];  ?>
            <li>File size: <?php echo $_FILES['image']['size'];  ?>
            <li>File type: <?php echo $_FILES['image']['type'] ?>
         </ul>
			
      </form>
      
   </body>
</html>

Это даст следующий результат —