|
Последние активные темы форума |
|
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() и раздел
Загрузка файлов на сервер
для получения простых примеров использования.
|