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)
filenameという名前のファイルがHTTP POSTにより
アップロードされた場合にTRUEを返します。この関数は、悪意のあるユー
ザーがスクリプトをだまして動作しなくなるようなファイル、例えば、
/etc/passwd を指定することを防止したい場合に
有用です。
この種の確認は、アップロードされたファイルに関して何でもできる場
合には、その内容をユーザ、または同じシステム上の他のユーザにさえ
暴かれる可能性があるため、特に重要です。
is_uploaded_file()は、
PHP 3.0.16 より後のバージョンの PHP 3 および 4.0.2 以
降のバージョンの PHP 4 でのみ利用可能です。
古いバージョンを使っていてつまづいている場合は、
自分自身を守るために後述の関数を使用することができます。
注意:
以下のサンプルはPHP4.0.2以降のPHP4では動きません
これはこのバージョン以降でPHPの内部処理が変更されたためです。
<?php /* Userland test for uploaded file. */ function is_uploaded_file($filename) { if (!$tmp_file = get_cfg_var('upload_tmp_dir')) { $tmp_file = dirname(tempnam('', '')); } $tmp_file .= '/' . basename($filename); /* User might have trailing slash in php.ini... */ return (ereg_replace('/+', '/', $tmp_file) == $filename); }
/* This is how to use it, since you also don't have * move_uploaded_file() in these older versions: */ if (is_uploaded_file($HTTP_POST_FILES['userfile'])) { copy($HTTP_POST_FILES['userfile'], "/place/to/put/uploaded/file"); } else { echo "Possible file upload attack: filename '$HTTP_POST_FILES[userfile]'."; } ?>
|
簡単な使用例に関しては、move_uploaded_file()お
よびファイルアップロードの処
理の節も参照下さい。