関数の概要
PHPの is_uploaded_file 関数は、指定したファイルがHTTP POSTによってアップロードされたファイルかどうかを確認するために使用されます。これにより、外部からの不正なファイル操作を防ぐことができ、安全にアップロードファイルを処理する際に役立ちます。
パラメータの説明
filename(文字列): 確認したいファイルのパスを指定します。このパスは通常、スーパーグローバル変数$_FILESの中のテンポラリファイルのパスになります。
戻り値
指定したファイルがアップロードされたファイルであれば true、そうでなければ false を返します。これを使って安全なファイル処理の前にチェックを行います。
使用例
基本的な使い方
<?php
if (isset($_FILES['userfile'])) {
$tmp_name = $_FILES['userfile']['tmp_name'];
if (is_uploaded_file($tmp_name)) {
echo "ファイルは正しくアップロードされました。";
} else {
echo "ファイルはアップロードされていません。";
}
}
?>
アップロードされたファイルの一時ファイル名を is_uploaded_file に渡して、実際にアップロードされたものかを判定しています。
ファイルの移動前にチェックする例
<?php
if (isset($_FILES['userfile'])) {
$tmp_name = $_FILES['userfile']['tmp_name'];
$upload_dir = 'uploads/';
$upload_file = $upload_dir . basename($_FILES['userfile']['name']);
if (is_uploaded_file($tmp_name)) {
if (move_uploaded_file($tmp_name, $upload_file)) {
echo "ファイルが正常に移動されました。";
} else {
echo "ファイルの移動に失敗しました。";
}
} else {
echo "アップロードファイルではありません。";
}
}
?>
ファイルを保存する前に is_uploaded_file で安全性を確認し、その後 move_uploaded_file で実際の保存処理を行っています。
複数ファイルアップロード時のチェック
<?php
foreach ($_FILES['userfiles']['tmp_name'] as $key => $tmp_name) {
if (is_uploaded_file($tmp_name)) {
echo $_FILES['userfiles']['name'][$key] . " は正しくアップロードされました。<br>";
} else {
echo $_FILES['userfiles']['name'][$key] . " はアップロードされていません。<br>";
}
}
?>
複数ファイルのアップロード時にも、各ファイルに対して is_uploaded_file で判定を行うことで安全に取り扱えます。
関連する関数
move_uploaded_file– アップロードされたファイルを安全に移動させるための関数$_FILES– アップロードされたファイルの情報が格納されるスーパーグローバル配列file_exists– ファイルが存在するかを確認する関数(アップロード確認には不十分)
まとめ
is_uploaded_file は、HTTP POSTによるファイルアップロードかどうかを判別する重要な関数です。これを使うことでサーバー上のファイルの安全性が高まり、不正アクセスやファイルの改ざんを防ぐことができます。実務でファイルアップロードを扱う際は必ずこの関数でチェックし、move_uploaded_file と組み合わせて安全にファイルを処理しましょう。
