Перейти к содержимому

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

В современном цифровом мире загрузка файлов является распространенным требованием в веб-разработке. Будь то фото профиля, документ или любой другой тип файла, возможность загрузки файлов необходима для обеспечения удобного пользовательского опыта. В PHP загрузка файлов на сервер выполняется легко с помощью функции move_uploaded_file(). В этой статье мы обсудим основы загрузки файлов в PHP и покажем, как использовать функцию move_uploaded_file() для обработки загрузки файлов в ваших PHP-проектах.

Когда файл загружается на сервер, он сохраняется во временном расположении на сервере до тех пор, пока не будет обработан. Информация о загруженном файле хранится в суперглобальном массиве $_FILES. Массив $_FILES содержит несколько пар ключ-значение, включая:

  • $_FILES['userfile']['name'] - Оригинальное имя загруженного файла.
  • $_FILES['userfile']['type'] - MIME-тип загруженного файла.
  • $_FILES['userfile']['size'] - Размер загруженного файла в байтах.
  • $_FILES['userfile']['tmp_name'] - Временное расположение загруженного файла на сервере.
  • $_FILES['userfile']['error'] - Код ошибки, указывающий на наличие проблем во время загрузки файла.

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

  • Проверка размера файла: вы можете проверить размер загруженного файла, используя значение $_FILES['userfile']['size']. Если размер файла слишком велик, вы можете отклонить его.
  • Проверка типа файла: Не полагайтесь на $_FILES['userfile']['type'] для проверки, так как он предоставляется клиентом и его легко подделать. Вместо этого используйте функцию PHP finfo_file() для определения фактического MIME-типа или проверяйте расширение файла по белому списку.
  • Проверка ошибок: вы можете проверить значение $_FILES['userfile']['error'], чтобы узнать, возникла ли проблема во время загрузки файла. Если проблема была, вы можете отклонить файл.

После проверки загруженного файла вы можете переместить его в конечное место назначения на сервере с помощью функции move_uploaded_file(). Функция move_uploaded_file() принимает два аргумента: первый — это временное расположение загруженного файла ($_FILES['userfile']['tmp_name']), а второй — конечное место назначения файла.

Сначала убедитесь, что ваша HTML-форма содержит атрибут enctype="multipart/form-data":

html
<form action="upload.php" method="POST" enctype="multipart/form-data">
  <input type="file" name="userfile">
  <input type="submit" value="Upload">
</form>

Пример использования функции move_uploaded_file в PHP

php
// Prevent directory traversal by using basename()
$targetDir = "uploads/";
$targetFile = $targetDir . basename($_FILES['userfile']['name']);

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $targetFile)) {
  echo "The file has been uploaded.";
} else {
  echo "There was an error uploading the file.";
}

Заключение

Загрузка файлов в PHP является фундаментальной частью веб-разработки. Используя суперглобальный массив $_FILES и функцию move_uploaded_file(), вы можете легко обрабатывать загрузку файлов в своих PHP-проектах. Просто не забывайте безопасно проверять типы файлов, очищать имена файлов для предотвращения обхода директорий и всегда проверяйте коды ошибок загрузки.

Практика

Какие из следующих утверждений о загрузке файлов в PHP являются верными?

Считаете ли это полезным?

Предпросмотр dual-run — сравните с маршрутами Symfony на продакшене.