Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информационные системы.-1.pdf
Скачиваний:
3
Добавлен:
05.02.2023
Размер:
502.34 Кб
Скачать

<INPUT TYPE="checkbox" NAME="m1">Страшная газета<br> <INPUT TYPE="checkbox" NAME="m2">6 соток<BR>

<INPUT TYPE="checkbox" NAME="m3" CHECKED>Мурзилка<BR> <INPUT type="image" src="/img/button.gif" WIDTH="60" HEIGHT="30"> </FORM>

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

PHP способен принимать файл загружаемый при помощи любого браузера, поддерживающего стандарт RFC-1867 (в том числе Netscape Navigator 3 и выше, Microsoft Internet Explorer 3 с патчем от Microsoft или более поздние версии без патча). Это дает возможность загружать как текстовые, так и бинарные файлы.

Страница для загрузки файлов может быть реализована при помощи специальной формы, которая выглядит примерно так:

Форма для загрузки файлов

<form enctype="multipart/form-data" action="_URL_" method="post">

<input type="hidden" name="MAX_FILE_SIZE" value="30000" />

Отправить этот файл: <input name="userfile" type="file" />

<input type="submit" value="Send File" />

</form>

В приведенном выше примере "_URL_" необходимо заменить ссылкой на PHP-скрипт. Скрытое поле MAX_FILE_SIZE(значение необходимо указывать в байтах) должно предшествовать полю для выбора файла, и его значение является максимально допустимым размером принимаемого файла. Также следует убедиться, что в атрибутах формы вы указали enctype="multipart/form-data", в

57

противном случае загрузка файлов на сервер выполняться не будет.

Переменные, определенные для загруженных файлов, зависят от версии PHP и текущей конфигурации. Суперглобальный массив $_FILES доступен начиная с PHP 4.1.0. Массив $HTTP_POST_FILES доступен начиная с PHP 4.0.0.

Эти массивы содержат всю информацию о загруженных файлах. Использование $_FILES является более предпочтительным. В случае, если конфигурационная директива register_globals установлена значением on, дополнительно будут объявлены переменные с соответствующими именами. Начиная с версии 4.2.0 значением по умолчанию для опции register_globals является off.

Содержимое массива $_FILES для нашего примера приведено ниже. Обратите внимание, что здесь предполагается использование имени userfile для поля выбора файла, как и в приведенном выше примере. На самом деле имя поля может быть любым.

$_FILES['userfile']['name'] - Оригинальное имя файла на компьютере клиента.

$_FILES['userfile']['type'] - Mime-тип файла, в случае, если браузер предоставил такую информацию. Пример: "image/gif".

$_FILES['userfile']['size'] - Размер в байтах принятого файла.

$_FILES['userfile']['tmp_name'] - Временное имя, с которым принятый файл был сохранен на сервере.

$_FILES['userfile']['error'] - Код ошибки, которая может возникнуть при загрузке файла. Ключ ['error'] был добавлен в PHP 4.2.0

В случае, если register_globals установлена значением on в конфигурационном файле php.ini, будут доступны дополнительные переменные. Например, $userfile_name будет эквивалентна переменной $_FILES['userfile']['name'], а $userfile_type соответствует $_FILES['userfile']['type'], и так далее. Не стоит забывать, что начиная с PHP 4.2.0 для директивы register_globals значение по

58

умолчанию off. Рекомендуется не полагаться на значение этой директивы.

По умолчанию принятые файлы сохраняются на сервере в стандартной временной папке до тех пор, пока не будет задана другая директория при помощи директивы upload_tmp_dir конфигурационного файла php.ini. Директорию сервера по умолчанию можно сменить, установив переменную TMPDIR для окружения, в котором выполняется PHP. Установка переменной TMPDIR при помощи функции putenv() внутри PHP-скрипта работать не будет. Эта переменная окружения также может использоваться для того, чтобы удостовериться, что другие операции также работают с принятыми файлами.

Проверка загружаемых на сервер файлов

Для получения более детальной информации вы можете ознакомится с описанием функций is_uploaded_file() и move_uploaded_file(). Следующий пример принимает и обрабатывает загруженный при помощи формы файл.

<?php

$uploaddir = '/var/www/uploads/';

$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

print "<pre>";

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {

print "File is valid, and was successfully uploaded. ";

print "Here's some more debugging info:\n";

print_r($_FILES);

} else {

print "Possible file upload attack! Here's some debugging info:\n";

print "Possible file upload attack! Дополнительная отладочная

59

информация:\n";

print_r($_FILES);

}

print "</pre>";

?>

В случае, если при отправке формы файл выбран не был, PHP установит переменную $_FILES['userfile']['size'] значением 0, а переменную $_FILES['userfile']['tmp_name'] - пустой строкой. none.

По окончанию работы скрипта, в случае, если принятый файл не был переименован, или перемещен он будет автоматически удален из временной папки.

Замена символов в строке с помощью регулярных выражений

Для замены символов в строке на другие (например в случае присутствия «нежелательных» символов) можно использовать следующие конструкции на языке PHP:

$str = ereg_replace(«\n», «<br>», $str); $str = ereg_replace(«\n\n», «<p>», $str);

$str = ereg_replace(«<br>», «\n», $str); $str = ereg_replace(«<p>», «\n\n», $str);

60