この記事では、例として PHP ファイルのアップロード操作を分析します。参考までに皆さんと共有します。詳細は次のとおりです:
ファイルのアップロード
は、ブラウザからサーバーに送信されるリクエストで発生します。
ブラウザにとってファイルは、フォーム内の特殊なタイプのデータにすぎません。
ブラウザフォームのデータ、2つのタイプ:
文字列タイプ(バイトストリームエンコーディング)
ファイルタイプ(バイナリエンコーディング)、ファイルはフォームデータの一部
サーバーの視点:
受け入れ側のブラウザでリクエストするとき、フォーム内のデータを処理します。データ型に応じて異なる処理方法が使用されます。
文字列型、$_POST 変数 (メモリ) に保存されます。
ファイル型のデータ、アップロード一時ディレクトリに保存されます。
フォームが送信されると、ブラウザは次のように動作します。デフォルト:
フォーム内のコンテンツは文字列型です。ファイル フィールドが追加された場合でも、単なる文字列型データ以外のデータがアップロードされることをブラウザーに通知するために、フォームに属性を追加する必要があります。 enctype="multipart/form-data"
<body> <form action="upload.php" method="post" enctype="multipart/form-data"> <input type="file" name="file"> </br> <input type="submit" value="submit"> </form> </body>
ファイルタイプのフォームデータを受信した後、PHPサーバーはファイルを一時ディレクトリに保存します(一時ファイルであり、スクリプトサイクル内で有効です)
; Temporary directory for HTTP uploaded files (will use system default if not ; specified). ; http://php.net/upload-tmp-dir ;upload_tmp_dir =
永続的に一時ファイルを保存します
move_uploaded_file(src_url,goa_url)
$_FILES、一時アドレスを含むアップロードされたファイルの情報を保存します
エラーの種類:
0-1-2-3-4-6-7
0はエラーがないことを意味します
1 はファイルが php より大きいことを意味します 設定
; Maximum allowed size for uploaded files. ; http://php.net/upload-max-filesize upload_max_filesize = 2M
2 はファイルがフォーム設定 max_file_size より大きいことを意味します
<input type='hidden' name='MAX_FILE_SIZE' value='1024'>
3 はファイルのアップロードが不完全であることを意味します
4 はファイルがアップロードされていないことを意味します
5 は 0 バイトのファイルを意味します(空のファイル) は論理的にアップロードされています
6 はいいえを意味します 一時アップロードディレクトリを見つけます (権限が不十分です)
7 はファイルの書き込みに失敗したことを意味します (ディスク容量、権限)
php で許可されるアップロードファイルの最大数
; Maximum number of files that can be uploaded via a single request max_file_uploads = 20
投稿の上限です
これを超えると、php は投稿を正常に処理できなくなりますファイルの値が空になる可能性があります
; Maximum size of POST data that PHP will accept. ; http://php.net/post-max-size post_max_size = 8M
型検出では
サフィックス名と MIME は両方ともブラウザによって提供され、完了するには PHP の拡張子 fileinfo が必要ですファイル情報のチェック(関数プロセスとオブジェクト指向)
;extension=php_fileinfo .dll
$finfo = new Finfo(FILEINFO_MIME_TYPE); $mine_type = $finfo->file($file['tmp_name']);
アップロードされたファイルを格納する分子ディレクトリ
原則: ビジネスロジック、ファイル数、時間
ディレクトリを作成する mkdir()
ディレクトリ is_dir() を確認してください
<?php upload($_FILES['file']); function upload($file){ if($file['error']!=0){ return false; } //3M $max_size = 3145728; if($max_size<$file['size']){ return false; } //设置一个后缀名与mime的映射关系 $type_map = array( '.jpeg'=>array('image/jpeg','image/pjpeg'), '.jpg'=>array('image/jpeg','image/pjpeg'), '.png'=>array('image/png','image/x-png'), '.gif'=>array('image/gif') ); //后缀 $allow_ext_list = array('.jpeg','.png','.jpg'); $ext = strtolower(strrchr($file['name'],'.')); if(!in_array($ext,$allow_ext_list)){ echo '不支持该图片格式'; return false; } //MIME $allow_mime_list = array(); foreach($allow_ext_list as $val){ $allow_mime_list = array_merge($allow_mime_list,$type_map[$val]); } //浏览器提供信息坚持 $allow_mime_list = array_unique($allow_mime_list); if(!in_array($file['type'],$allow_mime_list)){ echo '不支持该图片格式'; return false; } //php自身检查 $file_mime = new Finfo(FILEINFO_MIME_TYPE); $mime = $file_mime->file($file['tmp_name']); if(!in_array($mime,$allow_mime_list)){ echo '不支持该图片格式'; return false; } //目录存储 $up_loadpath = './'; $sub_dir = date('Ymdh'); if(!is_dir($up_loadpath.$sub_dir)){ mkdir($up_loadpath.$sub_dir); } $prefix = 'bee_'; $name = uniqid($prefix,true).$ext; if(move_uploaded_file($file['tmp_name'],$up_loadpath.$sub_dir.$name)){ echo '上传成功'; return $name; }else{ echo '上传失败'; return false; } }
この記事が PHP プログラム設計に携わる皆様のお役に立てれば幸いです。
PHP ファイルのアップロード操作例と関連記事の詳細については、PHP 中国語 Web サイトに注目してください。