php ファイルアップロードの紹介
?
PHP マニュアルの第 39 章には、これらの問題に対処するための手順が記載されています。
のようにコピーして貼り付けます。
-----------------------------------------------
第 39 章: ファイルのアップロード処理
目次
POST?メソッドアップロード
エラーメッセージの説明
よくある欠陥
複数のファイルをアップロード
?PUT? メソッドのサポート
POST?メソッドアップロード
この機能を使用すると、ユーザーはテキスト ファイルとバイナリ ファイルをアップロードできます。 PHP の認証機能とファイル操作機能を使用すると、誰にアップロードを許可するか、アップロード後のファイルの扱いを完全に制御できます。 ?
PHP は、RFC-1867 標準 (Netscape Navigator 3 以降、パッチ適用された Microsoft Internet Explorer 3 以降を含む) ドキュメントに準拠する任意のブラウザからのアップロードを受け入れることができます。 ?
関連設定: php.ini の file_uploads、upload_max_filesize、upload_tmp_dirpost_max_size、および max_input_time 設定オプションを参照してください。 ?
PHP は、Netscape Composer および W3C の Amaya クライアントで使用されるファイル アップロードの PUT メソッドもサポートしていることに注意してください。詳細については、「PUT メソッドのサポート」を参照してください。 ?
例?39.1.?ファイルアップロードフォーム
ファイルのアップロードをサポートするために、次のように特別なフォームを作成できます:?
????
????
上記の例の ?__URL__? は、実際の ?PHP? ファイルを指すように置き換える必要があります。 ?
MAX_FILE_SIZE?非表示
隠しフィールド (バイト単位) はファイル入力フィールドの前に配置する必要があり、その値は受信したファイルの最大サイズです。これはブラウザに対する提案であり、PHP もこれをチェックします。この設定はブラウザ側で簡単にバイパスできます
したがって、この機能を使用して大きなファイルをブロックすることは期待しないでください。実際には、PHP 設定の最大アップロード ファイル サイズは無効になりません。ただし、ユーザーがお金を費やす必要がないため、この項目をフォームに追加することをお勧めします。
大きなファイルをアップロードするために長時間待った後、ファイルが大きすぎることがわかり、アップロードに失敗しました。 ?
注: ファイル アップロード フォームの属性が enctype="multipart/form-data" であることを確認してください。そうしないと、ファイルをアップロードできません。 ?
グローバル変数 $_FILES は、PHP 4.1.0 以降に存在します (以前のバージョンでは $HTTP_POST_FILES に置き換えられました)。この配列には、アップロードされたすべてのファイルに関する情報が含まれています。 ?
上記の例の $_FILES 配列の内容は次のとおりです。上の例に示すように、ファイル アップロード フィールドの名前は ?userfile であると仮定します。名前は何でも構いません。 ?
$_FILES['ユーザーファイル']['名前']
クライアント マシン ファイルの元の名前。 ?
$_FILES['ユーザーファイル']['タイプ']
ファイルの MIME タイプ (ブラウザーがこの情報を提供する場合)。例は「画像/gif」です。ただし、この MIME タイプは PHP 側ではチェックされないため、この値が存在すると想定しないでください。 ?
$_FILES['ユーザーファイル']['サイズ']
アップロードされたファイルのサイズ (バイト単位)。 ?
$_FILES['userfile']['tmp_name']
ファイルのアップロード後にサーバーに保存される一時ファイル名。 ?
$_FILES['ユーザーファイル']['エラー']
ファイルのアップロードに関連するエラー コード。この項目は PHP バージョン 4.2.0 で追加されました。 ?
芸術
ファイルがアップロードされると、php.ini の Upload_tmp_dir が別のパスに設定されていない限り、ファイルはデフォルトでサーバーのデフォルトの一時ディレクトリに保存されます。サーバー側のデフォルトの一時ファイル
このディレクトリは、PHP 実行環境の環境変数 TMPDIR を変更することでリセットできますが、PHP スクリプト内で putenv() 関数を実行して設定しても機能しません。
の。この環境変数は、アップロードされたファイルに対して他の操作も実行されていることを確認するために使用することもできます。 ?
例39.2 ファイルのアップロードを検証する
詳細については、関数 ?is_uploaded_file()? および ?move_uploaded_file()? を参照してください。次の例では、フォームによって提供されるファイルのアップロードを処理します。 ?
//?4.1.0 より前の PHP バージョンでは、代わりに $HTTP_POST_FILES を使用する必要があります
//?of?$_FILES.
$uploaddir?=?'/var/www/uploads/';
$uploadfile?=?$uploaddir?.?basename($_FILES['userfile']['name']);
エコー?'';<br>
if?(move_uploaded_file($_FILES['userfile']['tmp_name'],?$uploadfile))?{<br>
????echo?"ファイルは有効であり、正常にアップロードされました。n";<br>
}?その他?{<br>
????echo?"ファイルのアップロードの可能性があります!n";<br>
}<br><br>
echo?'ここには、その他のデバッグ情報があります:';<br>
print_r($_FILES);<br><br>
print?"
";
?>?
キャッチ
アップロードされたファイルを受け取る PHP スクリプトは、ファイルに対して次に実行する操作を決定するために論理的に必要なチェックを実装する必要があります。たとえば、?$_FILES['userfile'] を使用できます。
['size']? 変数を使用して、大きすぎるファイルまたは小さすぎるファイルを除外することもできます。また、?$_FILES['userfile']['type']? 変数を使用して、特定の標準とは異なるファイル タイプを除外することもできます。
準拠ファイルですが、この値はクライアントによって完全に制御され、PHP 側ではチェックされないため、これは一連のチェックの最初のステップとしてのみ扱われます。 PHP 4.2.0 以降では、次のこともできます。
?$_FILES['userfile']['error']? 変数を使用して、さまざまなエラー コードに基づいて次のステップを計画します。いずれの場合も、一時ディレクトリからファイルを削除します。
削除するか、別の場所に移動します。 ?
フォームでアップロードされたファイルが選択されていない場合、PHP 変数 $_FILES['userfile']['size'] の値は 0 になり、$_FILES['userfile']['tmp_name'] は null になります。 ?
ファイルが移動または名前変更されていない場合、そのファイルはフォーム要求の最後に削除されます。 ?
例?39.3.?一連のファイルをアップロードする
PHP の HTML 配列機能では、ファイル タイプもサポートされています。 ?
???
foreach?($_FILES["pictures"]["error"]?as?$key?=>?$error)?{
????if?($error?==?UPLOAD_ERR_OK)?{
???????$tmp_name?=?$_FILES["pictures"]["tmp_name"][$key];
???????$name?=?$_FILES["写真"]["名前"][$key];
???????move_uploaded_file($tmp_name,?"data/$name");
????}
}
?>
?