PHPのis_uploaded_file()関数とは?使い方とサンプルコードを徹底解説
is_uploaded_file()関数は、指定されたファイルがHTTP POST経由でアップロードされたものかどうかを判定するためのPHP組み込み関数です。ファイルがHTTP POSTによって正しくアップロードされていればTRUEを返し、それ以外の場合はFALSEを返します。
この関数は、悪意あるユーザーがスクリプトに不正なファイルパスを渡して機密ファイル(/etc/passwdなど)を読み取らせるような攻撃を防ぐために非常に重要です。ユーザーからアップロードされたファイルを扱う際は、必ずこの関数で検証してから処理を行うことが推奨されます。
構文
is_uploaded_file(file_path)
パラメータ
file_path − 検査対象となるファイルのパスを指定します。通常は
$_FILES['userfile']['tmp_name']のように、一時保存されたアップロードファイルのパスを渡します。
戻り値
ファイルがHTTP POST経由でアップロードされた場合:TRUE
それ以外(失敗)の場合:FALSE
ここでは、「new.txt」というファイルを次の内容でアップロードするケースを想定します。
This is demo text!
サンプルコード①:$_FILESを使ったアップロード確認
<?php
// ファイルがHTTP POST経由でアップロードされたかどうかを確認
if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
echo "File ". $_FILES['userfile']['name'] ." uploaded successfully!\n";
// アップロードされたファイルの内容を表示
echo "Reading Contents of the file:\n";
readfile($_FILES['userfile']['tmp_name']);
} else {
echo "File upload failed! File upload attack could be the reason!\n";
}
?>
出力結果
File new.txt uploaded successfully! Reading Contents of the file: This is demo text!
続いて、別の例として「details.txt」ファイルを使用したケースを見てみましょう。
サンプルコード②:通常のファイルパスを指定した場合
<?php
$file = "details.txt";
if(is_uploaded_file($file)) {
echo ("Uploaded via HTTP POST");
} else {
echo ("Not uploaded via HTTP POST");
}
?>
出力結果
Not uploaded via HTTP POST!
このように、サーバー上に元から存在する通常のファイルを指定した場合はFALSEが返されます。is_uploaded_file()は、あくまで「直近のHTTP POSTリクエストによってアップロードされたファイル」のみをTRUEと判定します。
まとめ
is_uploaded_file()関数は、ファイルアップロード機能を実装する際のセキュリティ対策として欠かせない関数です。アップロード処理を行う前に必ず呼び出し、ファイルが正当なPOSTリクエスト由来であることを確認しましょう。併せてmove_uploaded_file()関数と組み合わせて使うことで、より安全なファイルアップロード処理を実現できます。
-
PHPのfile()関数とは?使い方・パラメータ・戻り値をわかりやすく解説
PHPのfile()関数は、指定したファイル全体を読み込み、その内容を行ごとに分割した配列として返す関数です。テキストファイルを簡単に扱いたい場合に便利な基本関数の一つです。構文file(file_path, flag, context)パラメータfile_path − 読み込みたいファイルへのパスを指定します。flag − 省略可能なパラメータで、以下の定数を1つ、または複数組み合わせて指定できます。FILE_USE_INCLUDE_PATH − include_path の中からファイルを検索します。FILE_IGNORE_NEW_LINES − 配列の各要素の末尾に改行文字を追加しません
-
PHPのdelete()関数とは?使い方とサンプルコードをわかりやすく解説
PHPのdelete()関数は、指定したファイルを削除するための関数です。削除したいファイルのパスをパラメータとして渡すことで、そのファイルをシステムから削除できます。 構文(Syntax) delete(file_path) パラメータ(Parameters) file_path: 削除したいファイルのパスを指定します。相対パス・絶対パスのどちらでも指定可能です。 戻り値(Return) delete()関数は、処理結果に応じて以下のブール値を返します。 true: ファイルの削除が成功した場合 false: ファイルの削除に失敗した場合(ファイルが存在しない、権限がないなど) 使用