ファイルアップロードクラス
1. ファイル アップロード クラスのメンバー屬性を決定します。
まず、ファイルをアップロードするためにどのような屬性が必要かを検討する必要があります。ファイル file の post メソッドを自由に記述できます。フォームを送信してから、$_FILES にどのようなパラメーターがあるかを印刷して確認してください。
新しい file_upload_html.html ファイルを作成します。
コードは次のとおりです。以下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h2>用戶頭像上傳</h2> <p>用戶姓名:張三</p> 現(xiàn)有頭像:<img src="" onerror="this.src='./default.jpg'"> <form method="post" enctype="multipart/form-data"> <input type="file" name="photo"><br> <input type="submit" value="上傳"> </form> </body> </html>
フォームによって送信されたパラメータを取得し、新しい file_upload_object.php を作成します。コードは次のとおりです。
<?php /** * Created by PhpStorm. * User: Administrator * Date: 2018/3/3 0003 * Time: 上午 11:33 */ require './file_upload_html.html'; //獲取表單提交的參數(shù) $file=isset($_FILES['photo'])?$_FILES['photo']:""; echo "<pre>"; print_r($file); echo "</pre>";
フォームを送信した後、印刷結(jié)果は次のとおりです。
したがって、アップロード ファイル クラスは、アップロードされたファイル名、ファイルを知る必要があることがわかります。タイプ、エラー フラグ、およびアップロードされたサイズ
したがって、アップロード ファイル クラスを作成するときは、これらの屬性を理解し、新しいアップロード ファイル クラス FileUpload.C??lass.php# を作成する必要があります。
## コードは次のとおりです:<?php /** * Created by PhpStorm. * User: Administrator * Date: 2018/3/3 0003 * Time: 上午 10:52 */ class FileUpload{ public $type=array( 'image/jpeg','image/pjpeg','image/png','image/x-png','image/gif' ); public $maxSize=1048576;//1M=1024*1024 public $uploadSavePath="./uploads"; public $errorMessage=""; }
#2, ファイル アップロード クラスのメソッド
管理するメソッドを記述します獨自のビジネス ニーズに応じて、ファイル アップロード クラスの屬性を変更します。たとえば、アップロード サイズの設(shè)定とアップロードの保存パスの設(shè)定の場合、メソッド名は、upload( )
具體的なコードは次のとおりです:
<?php /** * Created by PhpStorm. * User: Administrator * Date: 2018/3/3 0003 * Time: 上午 10:52 */ class FileUpload{ private $type=array( 'image/jpeg','image/pjpeg','image/png','image/x-png','image/gif' );//文件類型 public $maxSize=1048576;//1M=1024*1024,上傳的容量 public $uploadSavePath="./uploads"; //上傳保存的路徑 public $errorMessage=""; //錯誤信息 public function upload($file){ //上傳類首先得判斷上傳存不存在錯誤,錯誤信息有123467六種情況,0為正常上傳 if($file['error']>0){ $errorMsg="錯誤信息為:"; switch ($file['error']){ case 1:$errorMsg.="文件大小超過了php.ini中upload_max_filesize選項限制的值"; break; case 2:$errorMsg.="文件大小超過了表單中max_file_size選項指定的值!"; break; case 3:$errorMsg.="文件只有部分被上傳!"; break; case 4:$errorMsg.="沒有文件被上傳!"; break; case 6:$errorMsg.="找不到臨時文件夾!"; break; case 7:$errorMsg.="臨時文件寫入失敗"; break; default:$errorMsg.='未知錯誤!'; break; } return false; } //判斷上傳的文件是否屬于$type內(nèi) if(!in_array($file['type'],$this->type)){ //不在所屬類型內(nèi)時 $this->errorMessage="未定義的文件上傳類型"; return false; } //判斷文件上傳的大小不能超過所定義的大小 if($file['size']>$this->maxSize){ $this->errorMessage="超出上傳所限制的最大上傳容量"; return false; } //給上傳的圖片重命名 $newFileName=uniqid("php_").strrchr($file['name'],"."); //設(shè)置上傳文件的全目錄 ./uploads/2018-03-03 $allPath1=$this->uploadSavePath."/".date("Y-m-d"); $allPath=$this->uploadSavePath."/".date("Y-m-d")."/".$newFileName; //判斷這個目錄是否存在 if(!file_exists($allPath1)){ mkdir($allPath1,'0777',true); } //移動 if(!move_uploaded_file($file['tmp_name'],$allPath)){ $this->errorMessage="文件上傳失敗"; }else{ return $allPath; }; } }
3、ファイルアップロード処理
クラスを?qū)g行します。生成されたファイル アップロード クラスのオブジェクトを呼び出し、エラー メッセージを出力します。file_upload_object.php のコードを次のように変更します。
<?php /** * Created by PhpStorm. * User: Administrator * Date: 2018/3/3 0003 * Time: 上午 11:33 */ require './FileUpload.class.php'; $file=isset($_FILES['photo'])?$_FILES['photo']:""; $fileUpload=new FileUpload(); $allPath=$fileUpload->upload($file); if(!$allPath){ //上傳失敗,打印錯誤信息 echo $fileUpload->errorMessage; //結(jié)束運行 die(); } require './file_upload_html.html';src 屬性を変更します。 HTML ページ:
<?php
現(xiàn)有頭像:<img src="<?php echo $allFilePath; ?>" onerror="this.src='./default.jpg'">
思考: 明らかに、アップロードされたアバターが大きすぎます。アップロードされたアバターを少し減らすにはどうすればよいですか?
#(詳細な手順については、「[PHP] ファイルと畫像のチュートリアル」を參照してください)