- Подробности
-
Категория: PHP. Файлы
Функция загрузки файлов на сервер.
Задача:
Требуется разработать скрипт для загрузки файлов на сервер.
Возможность изменять директорию от скрипта к скрипту.
Решать самостоятельно, перезаписывать загружаемый файл в случаи совпадения имени с уже загруженным, или нет.
Определять размер допустимый для загрузки файла.
Самостоятельной функции по загрузки файлов на сервер, в PHP не существует. Значит создадим свою, пользовательскую функцию, которую будем подключать к любому скрипту, который нуждается в использовании формы загрузки файлов на сайте. Назовём функцию upload.
Листинг № 1 — Загрузка файлов. Пользовательская функция PHP upload(), файл funcs.php
<?php
// Загрузка файлов
function upload($filename, $pach, $flag = false)
{
// $filename — это свойство name в input
// $pach — директория куда будет сохранён загруженный файл
// директория загрузки должна иметь доступ 777
// $flag — по умолчанию false (0),
// определяет перезапись существующего файла в директории, если выставлен TRUE (1)
// Проверяет существует ли директория и возможно ли её открыть из этого скрипта
if(!opendir($pach)){return 'Директория сохранения файлов, указана неверно!';}
// устанавливаем директорию загрузки файла
$uploadfile = $pach.basename($_FILES[$filename]['name']);
// Устанавливаем вариант перезаписи файла
// если false, файл не перезаписывается, а выдаётся предупреждение.
if(!$flag){
// Проверяем существует ли такой файл в директории
if(is_file($uploadfile)) return('ВНИМАНИЕ! Такой файл уже существует.');
}
if(!empty($filename))
{
// Ограничения размера загружаемого файла
if($_FILES[$filename]['size'] > 1024*2*1024)
{
return("Размер файла превышает 2 мегабайта");
}
// Проверяем загружен ли файл
if(is_uploaded_file($_FILES[$filename]['tmp_name']))
{
// Если файл загружен успешно, перемещаем его
// из временной директории в конечную
if(copy($_FILES[$filename]['tmp_name'],$uploadfile))
{
return('OK! Файл успешно загружен.');
}
else
{
return('<strong>'/*. $_FILES[$filename]['tmp_name'].$pach */.$_FILES[$filename]['name'].' </strong> — не является правильно загруженным файлом или
не может быть перемещён из временной директории.');
}
}
else
{
switch($_FILES[$filename]['error'])
{
case 1: echo 'Размер файла превышает допустимый.';
break;
case 2: echo 'Размер файла превышает допустимый.';
break;
case 3: echo 'Загружаемый файл был получен только частично.';
break;
case 4: echo 'Файл не был загружен!';
break;
}
}
}
else
{
return('Не указан файл для загрузки!');
}
}
?>
Следующим шагом будет создать форму для пользователя. Скрипт ниже.
Листинг № 2 — Форма загрузки файлов на сервер form_upld.php
<?php
// Подключаем файл функций
include 'fnc/funcs.php';
// Проверяем правильность отправки данных именно с той формы
// в которой значение кнопки, т.е. надпись равна — 'Загрузить'
// Только если это значение совпадает будет активирована
// наша функция загрузки файлов.
if($_POST['go'] == 'Загрузить')
{
echo upload('filename', './upload2/', $_POST['f']);
}
?>
<!-- Форма загрузки файлов -->
<form action="" method="post" enctype="multipart/form-data">
<input name="filename" type="file">
<br>
<input name="f" type="checkbox" value="1">
<sup> — перезаписать</sup>
<br>
<input name="go" type="submit" value="Загрузить"></form>
Задача решена. Внимательно читайте комментарии к коду. Пишите если что-то не понятно или нашли ошибку.