Форма загрузки файлов — основа любого личного кабинета, фотогалереи или CMS.
В PHP реализовать загрузку файла на сервер просто. Главное — правильно настроить HTML-форму, обработать файл и сохранить его. Разберём процесс по шагам.
Шаг 1. HTML-форма для загрузки
Для загрузки файла форма должна иметь атрибут enctype="multipart/form-data"
и использовать метод POST
.
htmlКопироватьРедактировать<form action="upload.php" method="post" enctype="multipart/form-data">
<label>Выберите файл:</label>
<input type="file" name="myfile">
<button type="submit">Загрузить</button>
</form>
Поле <input type="file">
позволяет пользователю выбрать файл на компьютере.
Шаг 2. Обработка файла на сервере (upload.php)
phpКопироватьРедактировать<?php
// Проверяем, был ли загружен файл
if (isset($_FILES['myfile']) && $_FILES['myfile']['error'] === UPLOAD_ERR_OK) {
// Получаем данные о файле
$fileTmpPath = $_FILES['myfile']['tmp_name'];
$fileName = $_FILES['myfile']['name'];
$destination = 'uploads/' . $fileName;
// Перемещаем файл из временной папки в нужную директорию
if (move_uploaded_file($fileTmpPath, $destination)) {
echo "Файл успешно загружен в: $destination";
} else {
echo "Ошибка при перемещении файла.";
}
} else {
echo "Файл не был загружен или произошла ошибка.";
}
?>
$_FILES['myfile']
— массив с информацией о загруженном файле.move_uploaded_file()
— безопасный способ сохранить файл на сервере.
Советы по безопасности
- Проверяй тип файла:
mime_content_type()
или по расширению. - Генерируй уникальные имена:
uniqid()
, чтобы избежать перезаписи. - Не разрешай загрузку
.php
,.exe
и других потенциально опасных файлов. - Ограничивай размер файла в
php.ini
:upload_max_filesize
,post_max_size
.
Пример генерации уникального имени
phpКопироватьРедактировать$ext = pathinfo($fileName, PATHINFO_EXTENSION);
$newName = uniqid('file_', true) . '.' . $ext;
$destination = 'uploads/' . $newName;
Заключение
Загрузка файлов в PHP — это всего три шага: форма, обработка и сохранение. Главное — правильно использовать $_FILES
и move_uploaded_file()
, а также не забывать про базовую защиту. Это фундамент для любой системы, где пользователи взаимодействуют с контентом.