Отправка файлов на сервер

Последнее обновление: 17.03.2021

Чтобы загрузить файл на сервер, нам надо использовать форму с параметром enctype="multipart/form-data" и массив $_FILES. Итак, создадим файл upload.php со следующим содержимым:

<!DOCTYPE html>
<html>
<head>
<title>METANIT.COM</title>
<meta charset="utf-8" />
</head>
<body>
<?php
if ($_FILES && $_FILES["filename"]["error"]== UPLOAD_ERR_OK)
{
    $name = $_FILES["filename"]["name"];
    move_uploaded_file($_FILES["filename"]["tmp_name"], $name);
    echo "Файл загружен";
}
?>
<h2>Загрузка файла</h2>
<form method="post" enctype="multipart/form-data">
Выберите файл: <input type="file" name="filename" size="10" /><br /><br />
<input type="submit" value="Загрузить" />
</form>
</body>
</html>

Здесь определена форм с атрибутом enctype="multipart/form-data". Форма содержит специальное поле для выбора файла.

Все загружаемые файлы попадают в ассоциативный массив $_FILES. Чтобы определить, а есть ли вообще загруженные файлы, можно использовать конструкцию if: if ($_FILES)

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

Так как элемент для загрузки файла на форме имеет name="filename", то данный файл мы можем получить с помощью выражения $_FILES["filename"].

У каждого объекта файла есть свои параметры, которые мы можем получить:

  • $_FILES["file"]["name"]: имя файла

  • $_FILES["file"]["type"]: тип содержимого файла, например, image/jpeg

  • $_FILES["file"]["size"]: размер файла в байтах

  • $_FILES["file"]["tmp_name"]: имя временного файла, сохраненного на сервере

  • $_FILES["file"]["error"]: код ошибки при загрузке

Также мы можем проверить наличие ошибок при загрузке. Если у нас нет ошибки, то поле $_FILES["filename"]["error"] содержит значение UPLOAD_ERR_OK.

При отправке файла на сервер он сначала загружается во временное место, из которого затем с помощью функции move_uploaded_file() он перемещается в каталог сервера, где расположен скрипт "upload.php".

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

Также мы можем указать другой путь, например, допустим, на сервере есть папка "upload", тогда, чтобы загружать в нее файлы, необходимо указать соответствующий путь:

if ($_FILES && $_FILES["filename"]["error"]== UPLOAD_ERR_OK)
{
    $name = "upload/" . $_FILES["filename"]["name"];
    move_uploaded_file($_FILES["filename"]["tmp_name"], $name);
    echo "Файл загружен";
}

Функция move_uploaded_file() принимает два параметра путь к загруженному временному файлу и путь, куда надо поместить загруженный файл.

Ограничения и настройка загрузки

По умолчанию размер загружаемых файлов ограничен 2 мб. Однако можно настроить данный показатель в файле конфигурации. Изменим этот показатель, например, до 10 мб. Для этого найдем в файле php.ini следующую строку:

upload_max_filesize = 2M

Изменим ее на

upload_max_filesize = 10M

Также мы можем настроить папку для временных загружаемых файлов. Для этого в файле php.ini найдем следующую строку:

;upload_tmp_dir =

Изменим ее на

upload_tmp_dir = "C:/php/upload"

Также в каталоге php нам надо создать папку upload.

Мультизагрузка

Изменим скрипт upload.php так, чтобы он поддерживал множественную загрузку:

<!DOCTYPE html>
<html>
<head>
<title>METANIT.COM</title>
<meta charset="utf-8" />
</head>
<body>
<?php
if($_FILES)
{
    foreach ($_FILES["uploads"]["error"] as $key => $error) {
        if ($error == UPLOAD_ERR_OK) {
            $tmp_name = $_FILES["uploads"]["tmp_name"][$key];
            $name = $_FILES["uploads"]["name"][$key];
            move_uploaded_file($tmp_name, "$name");
        }
    }
	echo "Файлы загружены";
}
?>
<h2>Загрузка файла</h2>
<form method="post" enctype="multipart/form-data">
	<input type="file" name="uploads[]" /><br />
	<input type="file" name="uploads[]" /><br />
	<input type="file" name="uploads[]" /><br />
	<input type="submit" value="Загрузить" />
</form>
</body>
</html>

Каждое поле выбора файла имеет атрибут name="uploads[]", поэтому сервер будет рассматривать набор отправленных файлов как единый массив.

Затем используя цикл foreach, проходим по все файлам и сохраняем их в каталог веб-сайта.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850