ホームページ >バックエンド開発 >PHPチュートリアル >PHP_PHP チュートリアルの非常に便利なファイル アップロード クラス
クラス FileUpload{
private $filepath; // ファイルをアップロードするパスを設定します
private $allowtype=array('jpg','jpeg','gif','bmp'); //デフォルトのファイルタイプ
private $maxsize=2000000; //デフォルトのファイルサイズ
private $israndname=true; //ランダムなファイル名を使用するかどうか
private $originName //ソースファイル名
private $tmpFileName; //一時ファイル名
private $fileType //ファイルタイプ
private $fileSize //ファイルのサイズ
;
private $newFileName //新しいファイルの名前
private $errorNum //エラー番号
private $errorMess="" //エラー報告を促すために使用されます
;
//ファイルの初期化に使用する関数
関数 __construct($options=array()){
foreach($options as $key=>$val){
$key=strto lower($key);//属性名をすべて小文字に設定します
//get_class_vars(get_class($this))
// 現在のクラスのすべての属性を取得します
If(!in_array($key,get_class_vars(get_class($this)))){
続けてください;
}
それ以外
{
$this->setOption($key,$val);
}
}
}
//さまざまなエラーレベルを定義します
プライベート関数 getError(){
$str="ファイル {$this->originName} のアップロード中にエラーが発生しました:";
switch($this->errorNum){
ケース4:
$str.="ファイルはアップロードされていません";
休憩
ケース 3:
$str.="ファイルの一部のみがアップロードされます";
休憩
ケース 2:
$str.="アップロードされたファイルは、HTML フォームで指定された MAX_FILE_SIZE オプションの値を超えています";
休憩
ケース 1:
$str.="アップロードされたファイルがphp.iniのupload_max_filesizeオプションの値を超えています";
休憩
ケース-1:
$str.="許可されていないタイプ";
休憩
ケース-2:
$str.="アップロードされたファイルが大きすぎるため、{$this->maxSize} バイトを超えることはできません";
休憩
ケース-3:
$str.="アップロードに失敗しました";
休憩
ケース-4:
$str.="アップロード ディレクトリの作成に失敗しました。アップロード ディレクトリを再指定してください";
休憩
ケース-5:
$str.="アップロードされたファイルへのパスを指定する必要があります";
休憩
デフォルト:
$str.="不明なエラー";
}
$str."
";
を返す
}
//メンバー属性に値を代入する関数
プライベート関数 setOption($key,$val){
$this->$key=$val;
}
//アップロードされたファイルのパスを確認するために使用されます
プライベート関数 checkFilePath(){
//ファイルパスが空の場合
if(空($this->ファイルパス)){
$this->setOption('errorNum',-5);
false を返します;
}
//パスが存在し、書き込み可能かどうかを判断します
If(!file_exists($this->ファイルパス)||!is_writable($this->ファイルパス)){
//@ はエラーサプレッサーです @ はエラープロンプトを無視してエラーにします
//プログラム内でエラーメッセージは表示されません
If(!@mkdir($this->ファイルパス,0755)){
$this->setOption('errorNum',-4);
false を返します;
}
}
true を返します;
}
//ファイルサイズを確認する関数
プライベート関数 checkFileSize(){
if($this->fileSize>$this->maxsize){
$this->setOption("errorNum",-2);
false を返します;
}
それ以外
{
true を返します;
}
}
//アップロードされたファイルの種類を確認します
プライベート関数 checkFileType(){
if(in_array(strto lower($this->fileType),$this->allowtype))
{
true を返します;
}
それ以外
{
$this->setOption("errorNum",-1);
false を返します;
}
}
//ファイルをアップロードします
関数アップロードファイル($fileField){
$return=true;
$name=$_FILES[$fileField]["name"] //投稿の名前
;
$tmp_name=$_FILES[$fileField]["tmp_name"] //アップロード時の一時ファイル名
;
$size=$_FILES[$fileField]["サイズ"];
$error=$_FILES[$fileField]["エラー"];
If($this->setFiles($name,$tmp_name,$size,$error)){
If($this->checkFileSize() && $this->checkFileType()){
$this->setNewFileName();
If($this->copyFile())
{
$return=true;
}
その他
{
$return=false;
}
}
それ以外
{
$return=false;
}
}
それ以外
{
$return=false;
}
// ファイルパスにエラーがないか確認してください
if(!$this->checkFilePath()){
$this->errorMess=$this->getError();
false を返します;
}
if(!$return)
{
$this->errorMess=$this->getError();
}
$return;
を返します
}
// $_FILES に関連するコンテンツを設定します
プライベート関数 setFiles($name="",$tmp_name="",$size=0,$error=0){
$this->setOption("errorNum",$error);
if($this->errorNum){
false を返します;
}
$arrstr=explode(".",$name);
$this->setOption("fileType",strto lower($arrstr[count($arrstr)-1]));
$this->setOption("originName",$name);
$this->setOption("tmpFileName",$tmp_name);
$this->setOption("fileSize",$size);
true を返します;
}
//アップロード後にファイルの名前を取得するために使用されます
関数 getNewFileName(){
$this->newFileName.'アップロードに成功しました!を返します。 ';
}
//ファイルアップロード失敗時にエラーメッセージを表示する関数
関数 getErrorMsg(){
$this->errorMess;
を返す
}
プライベート関数 proRandName(){
$filename=date("YmdHis").rand(100,999);
$filename.".".$this->fileType;
を返します
}
//アップロードしたファイル名を設定します
プライベート関数 setNewFileName(){
If($this->israndname){
$this->setOption('newFileName',$this->proRandName());
}
それ以外
{
$this->setOption('新しいファイル名',$this->originName);
}
}
//ファイルをコピー
プライベート関数 copyFile(){
if(!$this->errorNum){
$filepath=rtrim($this->ファイルパス,'/')."/";
$filepath.=$this->新しいファイル名;
//指定されたパスにファイルをコピーします
If(@move_uploaded_file($this->tmpFileName,$filepath)){
true を返します;
}
それ以外
{
$this->setOption('errorNum',-3);
false を返します;
}
}
}
}
?>