English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В этом руководстве вы узнаете, как использовать PHP для загрузки файлов на удаленный веб-сервер.
В данном руководстве мы изучим, как использовать простую HTML-форму и PHP для загрузки файлов на удаленный сервер. Вы можете загрузить любые типы файлов, такие как изображения, видео, ZIP-архивы, документы Microsoft Office, PDF, исполняемые файлы и другие различные типы файлов.
Данный пример создает простую HTML-форму для загрузки файлов.
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Форма загрузки файлов</title> </head> <form action="upload-manager.html" 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="Загрузить"> <p><strong>Примечание:</strong> Разрешены только форматы .jpg, .jpeg, .gif, .png, максимальный размер 5 MB.</p> </form> </html>
Внимание:Кромевыбор файлаКроме поля, загрузочная форма также должна использоватьHTTP POSTМетод, и он должен содержать атрибут enctype="multipart/form-data". Этот атрибут гарантирует, что данные формы кодируются в несколько段 MIME-данных, что необходимо для загрузки большого объема двоичных данных (например, изображений, аудио, видео и т.д.).
Ниже приведен полный код файла "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("Ошибка: Пожалуйста, выберите правильный формат файла."); // Проверьте размер файла - максимальный размер 5MB $maxsize = 5 * 1024 * 1024; if($filesize > $maxsize) die("Ошибка: Размер файла превышает разрешенный предел."); // Проверьте MIME-тип файла if(in_array($filetype, $allowed)){ // Проверьте, существует ли файл, перед тем как загружать его if(file_exists("upload/" . $filename)){ echo $filename . " уже существует."; } else { move_uploaded_file($_FILES["photo"]["tmp_name"], "upload/" . $filename); echo "Ваш файл успешно загружен."; } } else { echo "Ошибка: Возникла проблема при загрузке вашего файла. Пожалуйста, попробуйте еще раз."; } } else { echo "Ошибка: " . $_FILES["photo"]["error"]; } } ?>
Внимание:Этот скрипт предотвращает загрузку файла с именем, уже существующим в той же папке. Но если вы хотите разрешить это, просто добавьте случайную строку или метку времени перед именем файла, например $filename = time() . '_' . $_FILES["photo"]["name"];
Вы, возможно,想知道, о чем идет речь в этом коде. Хорошо, давайте шаг за шагом рассмотрим каждую часть этого примерного кода, чтобы лучше понять этот процесс.
Как только форма будет отправлена, информация о загружаемом файле может быть получена через PHP-суперглобальный массив $_FILES. Например, наша форма загрузки содержит поле выбора файла с именем photo (т.е. name = "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 "Ошибка: " . $_FILES["photo"]["error"] . "<br>;" } else { echo "Имя файла: " . $_FILES["photo"]["name"] . "<br>;" echo "Тип файла: " . $_FILES["photo"]["type"] . "<br>;" echo "Размер файла: " . ($_FILES["photo"]["size"] / 1024) . " KB<br>;" echo "Сохранено в: " . $_FILES["photo"]["tmp_name"]; } ?>
Совет:После успешной загрузки файла, он автоматически хранится в временной директории сервера. Для постоянного хранения файла, вам нужно использовать функцию move_uploaded_file() PHP, чтобы переместить его из временной директории в постоянное местоположение.