is_uploaded_file

関数の概要

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 と組み合わせて安全にファイルを処理しましょう。