создание и продвижение сайта (вбиваю в ТОП-10, как гвозди)Настройка и сопровождение платной рекламы яндекс.директ

PHP. Руководство по PHP. 2005

is_uploaded_file

Пред.

След.

is_uploaded_file

(PHP 3>= 3.0.17, PHP 4>= 4.0.3, PHP 5)is_uploaded_file -- Определяет, был ли файл загружен при помощи HTTP POST

Описание

bool is_uploaded_file (string filename)

Возвращает TRUE, если файл filename был загружен при помощи HTTP POST. Это полезно, чтобы убедиться в том, что злонамеренный пользователь не пытается обмануть скрипт так, чтобы он работал с файлами, с которыми работать не должен -- к примеру, /etc/passwd.

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

Для правильной работы, функции is_uploaded_file() нужен аргумент вида $_FILES['userfile']['tmp_name'], - имя закачиваемого файла на клиентской машине $_FILES['userfile']['name'] не подходит.

Пример 1. Пример использования функции is_uploaded_file()

<?php

if (is_uploaded_file($_FILES['userfile']['tmp_name'])){

echo "File ". $_FILES['userfile']['name'] ." uploaded successfully.\n";

echo "Displaying contents\n";

readfile($_FILES['userfile']['tmp_name']);

} else {

echo "Possible file upload attack: ";

echo "filename '". $_FILES['userfile']['tmp_name'] . "'.";

}

?>

Функция is_uploaded_file() доступна только начиная с версии PHP 3.0.16 и PHP 4.0.2 для третьей и четвёртой линеек соответственно. Если вам необходимо использовать более ранние версии, вы можете использовать такую функцию, чтобы обезопасить себя:

Замечание: Следующий пример не работает в версиях PHP выше 4.0.2. Он полагается на внутреннюю функциональность PHP, которая изменилась после этой версии.

Пример 2. Пример использования функции is_uploaded_file()

<?php

/* Самодельная проверка на то, является ли файл загруженным. */

function is_uploaded_file($filename)

{

if (!$tmp_file = get_cfg_var('upload_tmp_dir')){

$tmp_file = dirname(tempnam('', ''));

}

$tmp_file .= '/' . basename($filename);

/* У пользователя может быть завершающий слеш в php.ini... */

return (ereg_replace('/+', '/', $tmp_file) == $filename);

}

/* Вот пример использования, так как функция move_uploaded_file()

* также отсутствует в ранних версиях: */

if (is_uploaded_file($HTTP_POST_FILES['userfile'])){

copy($HTTP_POST_FILES['userfile'], "/place/to/put/uploaded/file");

} else {

echo "Возможна атака загрузки файла: имя файла - '$HTTP_POST_FILES[userfile]'.";

}

?>

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

Пред.

Начало

След.

is_readable

Уровень выше

is_writable

Отвечу на любые вопросы. С уважением, Дмитрий Владимирович.

Ваше письмо×
Free Web Hosting