is_uploaded_file
(PHP 4 >= 4.0.3, PHP 5)
is_uploaded_file — Определяет, был ли файл загружен при помощи HTTP POST
Описание
bool is_uploaded_file
( string $filename
)
Такие проверки особенно полезны, если существует вероятность того,
что операции над файлом могут показать его содержимое пользователю
или даже другим пользователям той же системы.
Для правильной работы, функции 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() и раздел
Загрузка файлов на сервер
для получения простых примеров использования.