English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
このチュートリアルでは、PHPを使ってリモートWebサーバーにファイルをアップロードする方法を学びます。
このチュートリアルでは、簡単な HTML フォームと PHP を使用して、リモートサーバーにファイルをアップロードする方法を学びます。画像、ビデオ、ZIP ファイル、Microsoft Office ドキュメント、PDF、実行ファイル、その他のさまざまなファイル形式のファイルをアップロードできます。
以下の例では、ファイルをアップロードするための簡単な HTML フォームを作成します。
!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>File Upload Form</title> </head> <form action="upload-manager.html" method="post" enctype="multipart/form-data"> <h2>Upload File</h2> <label for="fileSelect">Filename:</label> <input type="file" name="photo" id="fileSelect"> <input type="submit" name="submit" value="Upload"> <p><strong>Note:</strong>許可されている形式は.jpg、.jpeg、.gif、.pngで、最大サイズは5 MB.</p> </form> </html>
注意:以下の他にファイル選択フィールドの他に、アップロードフォームはHTTP POSTメソッドを使用し、enctype="multipart"/form-data" 属性。この属性は、フォームデータを複数の MIME データとしてエンコードすることを確保し、画像、音声、ビデオなどの大量のバイナリデータをアップロードするために必要です。
以下は「Upload」-manager.php ファイルの完全なコード。アップロードされたファイルを「upload」フォルダーに永続的に保存し、ファイルタイプやファイルサイズなどの基本的なセキュリティチェックを実行し、ユーザーが正しいファイルタイプをアップロードし、許可された制限内で行うことを確保します。
<?php //フォームが送信されたか確認 $_SERVER["REQUEST_METHOD"] が "POST" である場合 { // ファイルが正常にアップロードされたか確認 isset($_FILES["photo"]) かつ $_FILES["photo"]["error"] が 0 である場合 { $allowed = array("jpg" => "image/$allowed = array("jpg" => "image"/jpg", "jpeg" => "image/jpeg", "gif" => "image/gif", "png" => "image png"); $filename = $_FILES["photo"]["name"]; $filetype = $_FILES["photo"]["type"]; // $filesize = $_FILES["photo"]["size"]; 验证文件扩展名 $ext = pathinfo($filename, PATHINFO_EXTENSION); // if(!array_key_exists($ext, $allowed)) die("错误:请选择有效的文件格式。");-验证文件大小5最大 MB 5 * 1024 * 1024$maxsize = ; // if($filesize > $maxsize) die("错误:文件大小大于允许的限制。"); 验证文件的MIME类型 // if(in_array($filetype, $allowed)){ Check whether file exists before uploading it/if(file_exists("upload echo $filename . " is already exists."; move_uploaded_file($_FILES["photo"]["tmp_name"], "upload/echo $filename; echo "您的文件已成功上传。"; } echo "错误:上载您的文件时出现问题。请再试一次。"; } echo "Error: " . $_FILES["photo"]["error"]; } } ?>
注意:上記のスクリプトは、同一フォルダ内に既存のファイルと同名のファイルのアップロードを防ぎます。しかし、それを許可したい場合は、ファイル名の前にランダムな文字列やタイムスタンプを追加してください。例えば、$filename = time() . '_' . $_FILES["photo"]["name"];
このコードが何についてのものかご存知になりたいかもしれません。いいですね、このサンプルコードの各部分を一つずつ順番に説明して、このプロセスをよりよく理解しましょう。
フォームが提出された後、アップロードされたファイルに関する情報はPHPの超全体的な配列 $_FILESを通じてアクセスできます。例えば、私たちのアップロードフォームには名前が「photo」のファイル選択フィールド(つまりname = "photo")が含まれており、ユーザーがこのフィールドを使用してファイルをアップロードした場合、その詳細情報(例えば、名前、形式、サイズ、一時的な名前、またはアップロードしようとする際に $_FILES[\"photo\"]関連配列で発生したエラーなど)を取得できます。以下のようになります:
$_FILES[\"photo\"][\"name\"] - この配列値はファイルの元の名前を指定します。ファイル拡張子を含みます。ファイルパスは含まれません。
$_FILES[\"photo\"][\"type\"] - この配列値はファイルのMIME形式を指定します。
$_FILES[\"photo\"][\"size\"] - この配列値はファイルのサイズをバイト単位で指定します。
$_FILES[\"photo\"][\"tmp_name\"] - この配列値は一時的な名前を指定します。ファイルがサーバーにアップロードされた後に割り当てられるフルパスを含みます。
$_FILES[\"photo\"][\"error\"] - この配列値はファイルアップロードに関連するエラーまたはステータスコードを指定します。例えば、エラーがない場合0です。
以下の例では、PHPコードはアップロードされたファイルの詳細情報のみを表示し、それをWebサーバー上一時的なディレクトリに保存します。
<?php if($_FILES[\"photo\"][\"error\"] > 0) { echo \ echo \ / 1024 echo \ } ?>
ヒント:ファイルを成功してアップロードすると、そのファイルはサーバー上の一時的なディレクトリに自動的に保存されます。このファイルを永続的に保存するには、PHPのmove_uploaded_file()関数を使用して一時的なディレクトリから永続的な場所に移動する必要があります。