PHP: как сделать кнопку выгрузки файла Печать
Добавил(а) microsin   

Как на PHP организовать выгрузку файлов на сервер по протоколу HTTP с помощью запроса POST, процесс по шагам:

1. Сделайте настройки в файле php.ini, которые будут разрешать выгрузку файлов и задавать для него определенные ограничения. Пример файла php.ini, где были сделаны соответствующие изменения:

sendmail_path = "/usr/sbin/sendmail -t -i -f webmaster@имядомена.ru"
session.save_path = "/var/www/имяпользователя/data/bin-tmp"
 
; Разрешается ли выгрузка.
file_uploads = On
 
; Временная папка для выгрузки. Если не установлено,
; то будет использоваться системное умолчание.
upload_tmp_dir = /tmp
 
; Максимальный разрешенный размер выгружаемых файлов.
upload_max_filesize = 16M
 
; Максимальное разрешенное количество файлов для выгрузки
; в одном запросе.
max_file_uploads = 20
 
; Максимальный размер данных POST, который примет PHP.
post_max_size = 20M
 
max_input_time = 60
memory_limit = 128M
max_execution_time = 30

Обычно файл php.ini находится на сервере в каталоге /var/www/php-bin/имя_пользователя/, для получения этой информации можно выполнить функцию php_ini_loaded_file() из любого файла с расширением *.php:

< ?php
echo php_ini_loaded_file();
?>

Для этого выполните функцию phpinfo() из любого файла с расширением *.php:

< ?php
phpinfo();
?>

2. Создайте на сервере в корневом каталоге папку, где будут находиться PHP-скрипты, запомните её название. Предположим для примера, что это будет папка FileUploadScripts_6cceb659.

Примечание: для безопасности лучше для этой папки придумать случайное название, и хранить его в секрете.

3. Создайте в этой папке 2 скрипта index.php и upload.php со следующим содержимым.

Файл index.php:

< ?php
session_start();
?>
< !DOCTYPE html>
< html>
< head>
  < title>PHP File Upload< /title>
< /head>
< body>
  < ?php
    if (isset($_SESSION['message']) && $_SESSION['message'])
    {
      printf('< b>%s< /b>', $_SESSION['message']);
      unset($_SESSION['message']);
    }
  ?>
  < form method="POST" action="upload.php" enctype="multipart/form-data">
    < div>
      < span>Upload a File:< /span>
      < input type="file" name="uploadedFile" />
    < /div>
 
    < input type="submit" name="uploadBtn" value="Upload" />
  < /form>
< /body>
< /html>

Файл upload.php:

< ?php
session_start();
 
$message = '';
if (isset($_POST['uploadBtn']) && $_POST['uploadBtn'] == 'Upload')
{
  if (isset($_FILES['uploadedFile']) && $_FILES['uploadedFile']['error'] === UPLOAD_ERR_OK)
  {
    // Получение информации по выгружаемому файлу:
    $fileTmpPath = $_FILES['uploadedFile']['tmp_name'];
    $fileName = $_FILES['uploadedFile']['name'];
    $fileSize = $_FILES['uploadedFile']['size'];
    $fileType = $_FILES['uploadedFile']['type'];
    $fileNameCmps = explode(".", $fileName);
    $fileExtension = strtolower(end($fileNameCmps));
 
    // Исправление имени файла:
    $newFileName = md5(time() . $fileName) . '.' . $fileExtension;
 
    // Проверка расширения файла, оно должно соответствовать следующим
    // разрешенным расширениям:
    $allowedfileExtensions = array('jpg', 'gif', 'png', 'zip', 'txt', 'xls', 'doc');
 
    if (in_array($fileExtension, $allowedfileExtensions))
    {
      // Директория, куда будет перемещен выгруженный файл:
      $uploadFileDir = './uploaded_files/';
      $dest_path = $uploadFileDir . $newFileName;
 
      if(move_uploaded_file($fileTmpPath, $uploadFileDir . $fileName))
      {
        $message ='File is successfully uploaded.';
      }
      else 
      {
        $message = 'There was some error moving the file to upload directory.
           Please make sure the upload directory is writable by web server.';
      }
    }
    else
    {
      $message = 'Upload failed. Allowed file types: ' . implode(',', $allowedfileExtensions);
    }
  }
  else
  {
    $message = 'There is some error in the file upload. Please check the following error.< br>';
    $message .= 'Error:' . $_FILES['uploadedFile']['error'];
  }
}$_SESSION['message'] = $message;
header("Location: index.php");

4. Создайте в папке, которую создали на шаге 2, подкаталог с именем uploaded_files. В этот подкаталог будут сохраняться выгружаемые файлы.

[Как пользоваться]

1. Откройте в браузере секретную ссылку http://имядомена.ru/FileUploadScripts_6cceb659/, отобразится форма:

PHP form FileUpload1

2. Выберите файл, кликнув на кнопку Choose File. Предположим, что был выбран файл testfile.zip.

PHP form FileUpload2

3. Кликните на кнопку Upload. Файл будет записан на веб-сервер в каталог uploaded_files.

PHP form FileUpload3

Полный путь до сохраненного файла будет следующий:

http://имядомена.ru/FileUploadScripts_6cceb659/uploaded_files/testfile.zip

[Ссылки]

1. How to Upload a File in PHP site:code.tutsplus.com.com.
2. tutsplus / how-to-upload-a-file-in-php-with-example site:github.com.
3. Простейшие примеры скриптов на PHP.
4Apache: как разрешить доступ к списку файлов каталога.