PHPは配列と手順に従ってファイルのアップロードを完了します
フォームによって送信されたファイルの内容は file.php を指します。
アップロードされたファイルは、file.php の PHP コードを通じて処理されます。
アップロードする名前の付いた写真を選択します。画像の名前が psu.jpg であると仮定します。クリックしてアップロードします。
PHP はファイルデータ専用のシステム関数 $_FILES を用意しており、アップロードされたファイルの関連データはすべてこのシステム関数に保存されます。
PHP ファイルで、$_FILES を印刷して、この配列の構造を観察します。
印刷結果の配列構造は次のとおりです:
array (size=1) 'file' => array (size=5) //文件名 'name' => string 'psu.jpg' (length=7) //文件的mime类型 'type' => string 'image/jpeg' (length=10) //缓存文件,上传的图片即保存在这里 'tmp_name' => string 'E:\wamp\tmp\phpC32A.tmp' (length=23) //错误码,详见上面错误码介绍 'error' => int 0 //上传的文件大小 'size' => int 225824
上記の配列構造が得られます。
ファイル処理プロセスを開始できます。
最初のステップは、エラー コードを特定することです:
0){ switch ($_FILES['file']['error']) { //错误码不为0,即文件上传过程中出现了错误 case '1': echo '文件过大'; break; case '2': echo '文件超出指定大小'; break; case '3': echo '只有部分文件被上传'; break; case '4': echo '文件没有被上传'; break; case '6': echo '找不到指定文件夹'; break; case '7': echo '文件写入失败'; break; default: echo "上传出错
"; } }else{ //错误码为0,即上传成功,可以进行后续处理,处理流程见下文 } ?>
上記のコードは、エラー コードと対応するエラーの詳細を示しています。エラー コードに基づいて、正確なエラー プロンプトを生成できます。
2 番目のステップは、ファイルがサイズを超えているかどうかを判断することです。実際のプロジェクトでは、システムハードウェアの制限とストレージデバイスの制限により、ユーザーが無制限にファイルをアップロードすることは不可能であるため、ユーザーがアップロードするファイルのサイズを制限する必要があります。適切な制限サイズを定義すると、アプリケーションをより安定して実行できます。
0) { //有错误可停止执行 } else { //当前上传文件无误,运行本段代码 //判断文件是否超出了指定的大小 //单位为byte $MAX_FILE_SIZE = 100000; if ($_FILES['file']['size'] > $MAX_FILE_SIZE) { //判断,如果上传的文件,大小超出了我们给的限制范围,退上传并产生错误提示 exit("文件超出指定大小"); } } ?>
$MAX_FILE_SIZE として指定するファイル サイズを定義します。この変数のカウント単位はバイトであり、アップロードされたファイルの $_FILES['file']['size'] のサイズに対応します。
サンプルコードでは、サイズが約100K以下のファイルが制限となります。
3 番目のステップは、ファイルの MIME タイプが正しいかどうかを確認することです。
多くの場合、ファイルアップロード機能は、ユーザーがアップロードしたファイルが要件を満たしているかどうかを判断する必要があり、利用できないファイルをアップロードすると、オンラインアプリケーションの全体的な表示効果に悪影響を及ぼします。したがって、MIME タイプとサフィックス名を使用して、ユーザーがアップロードしたファイルが要件を満たしているかどうかを判断する必要があります。
以下のサンプル コードでは、現在のプロジェクト要件がアップロードされた画像を指定し、接尾辞 GIF または jpg が付いたファイルをアップロードすることを要求していると想定しています。ユーザーが要件を満たさないファイルをアップロードすると、エラー メッセージが返されます。
4 番目のステップは、指定されたパスとファイル名を生成することです。
プロジェクトのファイル配置に応じて、ファイル名の重複によるエラーを回避するために、特定の形式に従ってランダムなファイル名が生成されます。
5 番目のステップは、ファイルがアップロードされたかどうかを判断することです。
is_uploaded_file()関数は、対象のファイルがアップロードされたファイルかどうかを判定する専用関数です。
ステップ6、ファイルを指定された場所に移動します。
move_uploaded_file() 関数を使用して、ファイルを指定した場所に移動し、名前を付けます。 Linux システムにはターゲット ディレクトリに対するアクセス許可があり、ディスク容量が十分であるかどうかが考慮されることに注意してください。そうでない場合、アップロード操作は失敗します。
このファイル スニペットをファイル全体に整理しました:
0) { switch ($_FILES['file']['error']) { //错误码不为0,即文件上传过程中出现了错误 case '1': echo '文件过大'; break; case '2': echo '文件超出指定大小'; break; case '3': echo '只有部分文件被上传'; break; case '4': echo '文件没有被上传'; break; case '6': echo '找不到指定文件夹'; break; case '7': echo '文件写入失败'; break; default: echo "上传出错
"; } } else { $MAX_FILE_SIZE = 100000; if ($_FILES['file']['size'] > $MAX_FILE_SIZE) { exit("文件超出指定大小"); } $allowSuffix = array( 'jpg', 'gif', ); $myImg = explode('.', $_FILES['file']['name']); $myImgSuffix = array_pop($myImg); if (!in_array($myImgSuffix, $allowSuffix)) { exit("文件后缀名不符"); } $allowMime = array( "image/jpg", "image/jpeg", "image/pjpeg", "image/gif", ); if (!in_array($_FILES['file']['type'], $allowMime)) { exit('文件格式不正确,请检查'); } $path = "upload/images/"; $name = date('Y') . date('m') . date("d") . date('H') . date('i') . date('s') . rand(0, 9) . '.' . $myImgSuffix; if (is_uploaded_file($_FILEs['file']['tmp_name'])) { if (move_uploaded_file($_FILEs['file']['tmp_name'], $path . $name)) { echo "上传成功"; } else { echo '上传失败'; } } else { echo '不是上传文件'; } } ?>