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


десь будет рассмотрена загрузка файлов на сервер по протоколу HTTP.
Рассмотрим два варианта конфигурации PHP:

  • register_globals=Off - параметры
    передаваемые скрипту заносятся в массивы $_GET[], $_POST[], $_FILES[],
    $_COOKIE[], ...
  • register_globals=On - все
    параметры передаваемые скрипту,  автоматически становятся
    глобальными переменными и они также доступны через массивы $_GET[],
    $_POST[], $_FILES[].

Upload файлов при register_globals=On

В этом случае параметры передаваемые скрипту становятся глобальными
переменными и кроме этого PHP также формирует массивы $_GET[], $_POST[],
$_FILES[]. При такой конфигурации вы можете выбирать как вам получить
доступ к передаваемым параметрам. Либо вы пользуетесь глобальными
переменными, либо получаете доступ через массивы $_GET[], $_POST[],
$_FILES[].

Здесь будем использовать глобальные переменные, а в
следующем разделе будем использовать массив $_FILES[].

Напишем HTML
форму для отправки файла на сервер.


Содержание формы (файл upload.html):

color=#800000><html>
<body>
<FORM
ENCTYPE="multipart/form-data" ACTION="myup.php"
METHOD=POST>
Выберете файл: <INPUT NAME="myfile"
TYPE="file">
<INPUT TYPE="submit"
VALUE="Загрузить">
</FORM>
</body>
</html>


После
того как пользователь выбрал имя файла и нажал кнопку Загрузить,
PHP помещает загружаемый файл во временную директорию указанную в
параметре upload_tmp_dir файла php.ini. В этой директории этот файл будет
храниться только во время запроса! После запроса PHP удалит этот временный
файл. Поэтому загружаемый файл нужно куда-нибудь переместить (если он вам
понадобиться в дальнейшем). Явно удалить временный файл можно функцией
unlink(string filename).

Так как в HTML форме мы написали <INPUT
NAME="myfile" TYPE="file">
, то при запросе в скрипте у нас
будет глобальная переменная с именем $myfile.

Здесь рассмотрим загрузку текстового файла и вывод его содержимого.

Скрипт обработки:

<?php
// Загрузка файлов на сервер
//
Если register_globals=On

    print("Имя файла на
нашем сервере (во время запроса):
".$myfile."<br>");
    print("Имя файла на
компьютере пользователя:
".$myfile_name."<br>");
    print("MIME-тип файла:
".$myfile_type."<br>");
    print("Размер файла:
".$myfile_size."<br><br>");

    //
Получаем содержимое файла
    $fp =
fopen($myfile,"r");
    $content = fread($fp,
filesize($myfile));
   
fclose($fp);

    // Вывод содержимого
файла
    print($content);
?>

Пояснения:

$myfile - имя временного файла, в котором находятся загруженные
данные;

Когда пользователь отправляет форму, PHP автоматически определяет ещё
несколько переменных:

$myfile_name - имя файла на компьютере компьютере
пользователя;

$myfile_type - MIME-тип файла.

$myfile_size - размер файла в байтах.

При загрузке текстовых файлов переменная $myfile_type = "text/plain",
при загрузке изображения gif переменная $myfile_type = "image/gif".

При register_globals=On можно пользоваться массивом $_FILES[]. Как им
пользоваться мы рассмотрим ниже.

Upload файлов при register_globals=Off

При register_globals=Off параметры передаваемые скрипту заносятся в
массивы $_GET[], $_POST[], $_FILES[]. В нашем случае нас интересует массив
$_FILES[]. В этом массиве храниться вся информация о всех загружаемых
файлах. В нашем случае структура этого массива следующая:

$_FILES["myfile"]["tmp_name"] - Имя временного
файла
$_FILES["myfile"]["name"] - Имя файла на компьютере
пользователя
$_FILES["myfile"]["size"] - Размер файла в
байтах
$_FILES["myfile"]["type"] - MIME-тип
файла
$_FILES["myfile"]["error"] - код ошибки.

 
« Предыдущая статья   Следующая статья »