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

Курс по основам языка программирования PHP.
W3Schools на русском языке. Уроки для начинающих



С помощью PHP легко загружать файлы на сервер.

Однако с легкостью возникает опасность, поэтому всегда будьте осторожны при загрузке файлов!


Настройка файла "php.ini"

Во-первых, убедитесь, что PHP настроен на загрузку файлов.

В вашем файле "php.ini" найдите директиву file_uploads и установите для неё значение On (т.е. включено):

file_uploads = On

Создание HTML формы

Затем создайте HTML-форму, которая позволит пользователям выбирать файл изображения, который они хотят загрузить:

<!DOCTYPE html>
<html>
<body>

<form action="upload.php" method="post" enctype="multipart/form-data">
    Выберите изображение для загрузки:
    <input type="file" name="fileToUpload" id="fileToUpload">
    <input type="submit" value="Upload Image" name="submit">
</form>

</body>
</html>

Некоторые правила для HTML-формы выше:

Без вышеуказанных требований загрузка файла не будет работать.

На что ещё стоит обратить внимание:

Приведенная выше форма отправляет данные в файл с именем upload.php, который мы создадим следующим.


PHP скрипт - создание файла загрузки

Файл "upload.php" содержит код для загрузки файла:

<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
    if($check !== false) {
        echo "File is an image - " . $check["mime"] . ".";
        $uploadOk = 1;
    } else {
        echo "File is not an image.";
        $uploadOk = 0;
    }
}
?>

Пояснение PHP скрипта:

Примечание: Вам нужно будет создать новый каталог с именем "uploads" в каталоге, где находится файл "upload.php". Загруженные файлы будут сохранены там.


Проверьте, существует ли файл уже

Теперь мы можем добавить некоторые ограничения.

Сначала мы проверим, существует ли файл в папке "uploads". Если это так, отображается сообщение об ошибке, и $uploadOk устанавливается в 0:

// Проверяем, существует ли файл
if (file_exists($target_file)) {
    echo "Извините, файл уже существует";
    $uploadOk = 0;
}

Ограничение размера файла

Поле ввода файла в HTML-форме называется "fileToUpload".

Теперь проверяем размер файла. Если размер файла превышает 500 КБ, отображается сообщение об ошибке, и uploadOk имеет значение 0:

// Проверяем размер файла
if ($_FILES["fileToUpload"]["size"] > 500000) {
    echo "Извините, ваш файл слишком большой.";
    $uploadOk = 0;
}

Ограничение типа файла

Приведенный ниже код позволяет пользователям загружать только файлы JPG, JPEG, PNG и GIF. Все другие типы файлов выдают сообщение об ошибке перед установкой $uploadOk в 0:

// Разрешить определенные форматы файлов
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
    echo "Извините, только JPG, JPEG, PNG и GIF файлы разрешены.";
    $uploadOk = 0;
}

Полный PHP скрипт загрузки файла

Весь файл upload.php теперь выглядит так:

<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Проверьте, является ли файл изображения фактическим изображением или поддельным изображением
if(isset($_POST["submit"])) {
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
    if($check !== false) {
        echo "Файл является изображением - " . $check["mime"] . ".";
        $uploadOk = 1;
    } else {
        echo "Файл не является изображением.";
        $uploadOk = 0;
    }
}
// Проверьте, существует ли файл
if (file_exists($target_file)) {
    echo "Извините, файл уже существует.";
    $uploadOk = 0;
}
// Проверьте размер файла
if ($_FILES["fileToUpload"]["size"] > 500000) {
    echo "Извините, ваш файл слишком большой.";
    $uploadOk = 0;
}
// Разрешить определенные форматы файлов
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
    echo "Извините, только JPG, JPEG, PNG & GIF файлы разрешены.";
    $uploadOk = 0;
}
// Проверьте, не установлен ли $uploadOk в 0 по ошибке
if ($uploadOk == 0) {
    echo "Извините, ваш файл не был загружен.";
// если все в порядке, попробуйте загрузить файл
} else {
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
        echo "Файл ". basename( $_FILES["fileToUpload"]["name"]). " был загружен.";
    } else {
        echo "Извините, при загрузке файла произошла ошибка.";
    }
}
?>

Полный справочник по файловой системе PHP

Для получения более полной информации о функциях файловой системы, перейдите к PHP Файловая система. Полный справочник.


W3Schools на русском уроки для начинающих для новичков основы языка курсы с нуля язык php загрузка PHP файлов файлы в PHP работа с файлами в PHP примеры PHP


warning

Не выкладывайте свой код непосредственно в комментариях, он отображается некорректно. Воспользуйтесь такими сервисами, как jsfiddle.net, codepen.io, liveweave.com, jsbin.com, сохраните код на любом из этих сервисов и в комментариях дайте на него ссылку. Так будет виден и код, и результат.