В этом руководстве мы узнаем, как загружать файлы на удаленный сервер с помощью простой HTML-формы и PHP. Вы можете загружать файлы любого типа, например изображения, видео, ZIP-файлы, документы Microsoft Office, PDF-файлы, а также исполняемые файлы и множество других типов файлов.

Шаг 1. Создание HTML-формы для загрузки файла

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

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>File Upload Form</title>
</head>
<body>
    <form action="upload-manager.php" method="post" enctype="multipart/form-data">
        <h2>Загрузить файл</h2>
        <label for="fileSelect">Имя файла:</label>
        <input type="file" name="photo" id="fileSelect">
        <input type="submit" name="submit" value="Upload">
        <p><strong>Внимание:</strong> Разрешены только .jpg, .jpeg, .gif, .png форматы до 5 МБ.</p>
    </form>
</body>
</html>

В дополнение к полю выбора файла форма загрузки должна использовать метод HTTP post и должна содержать атрибут enctype="multipart/form-data". Этот атрибут гарантирует, что данные формы кодируются как многокомпонентные данные MIME, что необходимо для загрузки больших объемов двоичных данных, таких как изображения, аудио, видео и т. д.

Шаг 2. Обработка загруженного файла

Вот полный код нашего файла upload-manager.php. Он будет хранить загруженный файл в папке upload на постоянной основе, а также выполнять некоторые базовые проверки безопасности, такие как тип файла и размер файла, чтобы гарантировать, что пользователи загружают файл правильного типа и в пределах разрешенного лимита.

<?php
// Проверяем, была ли отправлена форма
if($_SERVER["REQUEST_METHOD"] == "POST"){
    // Убеждаемся, что файл загружен без ошибок
    if(isset($_FILES["photo"]) && $_FILES["photo"]["error"] == 0){
        $allowed = array("jpg" => "image/jpg", "jpeg" => "image/jpeg", "gif" => "image/gif", "png" => "image/png");
        $filename = $_FILES["photo"]["name"];
        $filetype = $_FILES["photo"]["type"];
        $filesize = $_FILES["photo"]["size"];
    
        // Проверяем расширение файла
        $ext = pathinfo($filename, PATHINFO_EXTENSION);
        if(!array_key_exists($ext, $allowed)) die("Error: Please select a valid file format.");
    
        // Проверяем размер файла - максимум 5 МБ
        $maxsize = 5 * 1024 * 1024;
        if($filesize > $maxsize) die("Error: File size is larger than the allowed limit.");
    
        // Проверяем MIME-тип файла
        if(in_array($filetype, $allowed)){
            // Перед загрузкой проверяем, существует ли файл
            if(file_exists("upload/" . $filename)){
                echo $filename . " is already exists.";
            } else{
                move_uploaded_file($_FILES["photo"]["tmp_name"], "upload/" . $filename);
                echo "Your file was uploaded successfully.";
            } 
        } else{
            echo "Error: There was a problem uploading your file. Please try again."; 
        }
    } else{
        echo "Error: " . $_FILES["photo"]["error"];
    }
}
?>

Приведенный выше скрипт предотвратит загрузку файла, если в папке уже есть файл с таким же именем. Однако, если вы хотите разрешить это, просто добавьте к имени файла случайную строку или временную метку, например $filename = time() . '_' . $_FILES["photo"]["name"];

Давайте рассмотрим каждую часть этого примера кода, чтобы лучше понять этот процесс.

Объяснение кода

После отправки формы информация о загруженном файле может быть доступна через суперглобальный массив PHP, называемый $_FILES. Например, наша форма загрузки содержит поле выбора файла с именем photo (т.е. name="photo"). Если какой-либо пользователь загрузил файл, используя это поле, мы можем получить его данные, такие как имя, тип, размер, временное имя или любую ошибку через ассоциативный массив$_FILES["photo"], например:

  • $_FILES["photo"]["name"] — значение этого массива указывает исходное имя файла, включает расширение файла, но не включает путь к файлу.
  • $_FILES["photo"]["type"] — значение этого массива указывает MIME-тип файла.
  • $_FILES["photo"]["size"] — значение этого массива определяет размер файла в байтах.
  • $_FILES["photo"]["tmp_name"] — значение этого массива указывает временное имя, включая полный путь, который назначается файлу после его загрузки на сервер.
  • $_FILES["photo"]["error"] — значение этого массива указывает код ошибки или статуса, связанный с загрузкой файла, например это будет 0, если ошибки нет.

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

<?php
if($_FILES["photo"]["error"] > 0){
    echo "Error: " . $_FILES["photo"]["error"] . "<br>";
} else{
    echo "File Name: " . $_FILES["photo"]["name"] . "<br>";
    echo "File Type: " . $_FILES["photo"]["type"] . "<br>";
    echo "File Size: " . ($_FILES["photo"]["size"] / 1024) . " KB<br>";
    echo "Stored in: " . $_FILES["photo"]["tmp_name"];
}
?>

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

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 5 / 5. Количество оценок: 1

Оценок пока нет. Поставьте оценку первым.