Topic: Как с помощью PHP загрузить файлы на сервер
Загрузка файлов в веб-приложениях является обычной практикой. В этой статье я расскажу, как загрузить файлы на сервер с помощью PHP.
Но в начале я бы хотел сказать пару слов о том, как же происходит загрузка файлов.
Для этого нам понадобится html форма с полем ввода типа <input type="file">. Кроме того, для передачи файлов на сервер необходимо форме установить тип multipart. Для этого в качестве параметра enctype указывается значение multipart/form-data.
После того, как на html страничке мы разместим форму с полем <input type="file"> в окне браузера отобразится поле с возможностью выбрать файл на локальном компьютере.
После того, как пользователь выберет нужный файл и нажмет кнопку «Загрузить» форма передаст данные php скрипту на сервер, который указан в action формы. Если action формы пустой, то данные будут переданы тому же файлу, на котором находится форма. Вся информация о загружаемом файле помещается в массив $ _FILES. Нам лишь остается извлечь эту информацию и переместить файл в необходимое нам место.
Прежде, чем приступить к написанию скрипта обработки multipart-формы, нужно отредактировать файл конфигурации php.ini, чтобы разрешить загрузку файлов на сервер.
Конфигурационный файл PHP php.ini имеет три параметра, связанные с загрузкой файлов на сервер:
file_uploads = On - разрешает загрузку файлов на сервер по протоколу HTTP;
upoad_tmp_dir = /tmp - устанавливает каталог для временного хранения загруженных файлов;
upload_max_filesize = 2M - устанавливает максимальный объем загружаемых файлов.
Итак, создайте новый файл с именем upload.php и скопируйте в него следующий код.
<html>
<head>Загрузка файлов на сервер</head>
<body>
<form enctype="multipart/form-data" action="" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="300000" />
<input type="file" name="uploadFile"/>
<input type="submit" name="upload" value="Загрузить"/>
</form>
<?php
print_r($_FILES);
if(isset($_POST['upload'])){
$folder = 'path/to/folder/';
$uploadedFile = $folder.basename($_FILES['uploadFile']['name']);
if(is_uploaded_file($_FILES['uploadFile']['tmp_name'])){
if(move_uploaded_file($_FILES['uploadFile']['tmp_name'],
$uploadedFile))
{
echo Файл загружен;
}
else
{
echo Во время загрузки файла произошла ошибка;
}
}
else
{
echo 'Файл не загружен';
}
}
?>
</body>
</html>
Если внимательно посмотреть на форму, то Вы увидите скрытое поле
<input type="hidden" name="MAX_FILE_SIZE" value="300000" />
Оно указывает на максимальный размер принимаемого файла в байтах. Но не следует доверять этому значения, так как оно является лишь уведомляющим и его легко можно обойти! Так что имейте это в виду!