От автора: сегодня мы поговорим о том, как происходит в PHP загрузка файла. Скрипт PHP можно использовать с формой HTML, чтобы пользователи могли загружать файлы на сервер. Первоначально файлы загружаются во временный каталог, а затем перемещаются в место назначения с помощью скрипта PHP.
Информацияна странице phpinfo.php описывает временный каталог, который используется для загрузки файлов, например upload_tmp_dir, а максимальный размер файлов, которые могут быть загружены, указывается как upload_max_filesize. Эти параметры задаются в файле конфигурации PHP php.ini. Процесс загрузки файла выполняется следующим образом:
Пользователь открывает страницу, содержащую HTML-форму с текстовыми файлами, кнопкой Обзор и кнопкой Отправить.
Пользователь нажимает кнопку Обзор и выбирает файл для загрузки с локального ПК.
Полный путь к выбранному файлу отображается в текстовом файле, затем пользователь нажимает кнопку Отправить.
Выбранный файл отправляется во временный каталог на сервере.
PHP-скрипт, который был указан в качестве обработчика формы в атрибуте формы action, проверяет, доставлен ли файл, а затем копирует этот файл в целевую директорию.
Скрипт PHP подтверждает успешное завершение действия.
Как обычно, для временного и целевого каталога должны быть указаны права доступа на запись файлов. Если установлены права «только для чтения», процесс завершится неудачно. Загруженным файлом может быть текстовый файл или файл изображения, или любой документ.
Создание формы загрузки
Приведенный ниже HTML-код создает форму для загрузки. В этой форме для атрибута method задано значение post, а для атрибута enctype — multipart / form-data.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
<?php if(isset($_FILES['image'])){ $errors= array(); $file_name = $_FILES['image']['name']; $file_size =$_FILES['image']['size']; $file_tmp =$_FILES['image']['tmp_name']; $file_type=$_FILES['image']['type']; $file_ext=strtolower(end(explode('.',$_FILES['image']['name']))); $expensions= array("jpeg","jpg","png"); if(in_array($file_ext,$expensions)=== false){ $errors[]="extension not allowed, please choose a JPEG or PNG file."; } if($file_size > 2097152){ $errors[]='File size must be excately 2 MB'; } if(empty($errors)==true){ move_uploaded_file($file_tmp,"images/".$file_name); echo "Success"; }else{ print_r($errors); } } ?> <html> <body> <form action="" method="POST" enctype="multipart/form-data"> <input type="file" name="image" /> <input type="submit"/> </form> </body> </html> |
Этот код дает следующий результат:
Создание скрипта загрузки
Существует глобальная переменная PHP с именем $_FILES. Эта переменная является ассоциативным двумерным массивом, в ней сохраняется вся информация, связанная с загруженным файлом. Таким образом, если в элементе управления формы атрибуту name было присвоено значение file, тогда PHP создаст следующие пять переменных —
$ _FILES [‘file’] [‘tmp_name’] — загруженный файл во временный каталог на веб-сервере.
$ _FILES [‘file’] [‘name’] — фактическое имя загруженного файла.
$ _FILES [‘file’] [‘size’] — размер в байтах загруженного файла.
$ _FILES [‘file’] [‘type’] — MIME-тип загруженного файла.
$ _FILES [‘file’] [‘error’] — код ошибки, связанный с этой загрузкой файла.
Ниже приведен пример загрузки изображений и возврата результатов в виде информации о загруженном файле.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
<?php if(isset($_FILES['image'])){ $errors= array(); $file_name = $_FILES['image']['name']; $file_size = $_FILES['image']['size']; $file_tmp = $_FILES['image']['tmp_name']; $file_type = $_FILES['image']['type']; $file_ext=strtolower(end(explode('.',$_FILES['image']['name']))); $expensions= array("jpeg","jpg","png"); if(in_array($file_ext,$expensions)=== false){ $errors[]="extension not allowed, please choose a JPEG or PNG file."; } if($file_size > 2097152) { $errors[]='File size must be excately 2 MB'; } if(empty($errors)==true) { move_uploaded_file($file_tmp,"images/".$file_name); echo "Success"; }else{ print_r($errors); } } ?> <html> <body> <form action = "" method = "POST" enctype = "multipart/form-data"> <input type = "file" name = "image" /> <input type = "submit"/> <ul> <li>Sent file: <?php echo $_FILES['image']['name']; ?> <li>File size: <?php echo $_FILES['image']['size']; ?> <li>File type: <?php echo $_FILES['image']['type'] ?> </ul> </form> </body> </html> |
Этот код дает следующий результат:
Источник: //www.tutorialspoint.com/
Редакция: Команда webformyself.