목차
PHP设计超级好用的文件上传处理类一 (37),
백엔드 개발 PHP 튜토리얼 PHP设计超级好用的文件上传处理类一 (37),_PHP教程

PHP设计超级好用的文件上传处理类一 (37),_PHP教程

Jul 13, 2016 am 09:52 AM
php 하나 업로드 다루다 좋은 문서 용적 친절한 설계

PHP设计超级好用的文件上传处理类一 (37),

<?<span>php
    </span><span>class</span><span> FileUpload {
        </span><span>private</span> $filepath;     <span>//</span><span>指定上传文件保存的路径</span>
        <span>private</span> $allowtype=array(<span>'</span><span>gif</span><span>'</span>, <span>'</span><span>jpg</span><span>'</span>, <span>'</span><span>png</span><span>'</span>, <span>'</span><span>jpeg</span><span>'</span>);  <span>//</span><span>充许上传文件的类型</span>
        <span>private</span> $maxsize=<span>1000000</span>;  <span>//</span><span>允上传文件的最大长度 1M</span>
        <span>private</span> $israndname=<span>true</span>;  <span>//</span><span>是否随机重命名, true false不随机,使用原文件名</span>
        <span>private</span> $originName;   <span>//</span><span>源文件名称</span>
        <span>private</span> $tmpFileName;   <span>//</span><span>临时文件名</span>
        <span>private</span> $fileType;  <span>//</span><span>文件类型</span>
        <span>private</span> $fileSize;  <span>//</span><span>文件大小</span>
        <span>private</span> $newFileName; <span>//</span><span>新文件名</span>
        <span>private</span> $errorNum=<span>0</span>;  <span>//</span><span>错误号</span>
        <span>private</span> $errorMess=<span>""</span>; <span>//</span><span>用来提供错误报告



        </span><span>//</span><span>用于对上传文件初使化
        </span><span>//</span><span>1. 指定上传路径, 2,充许的类型, 3,限制大小, 4,是否使用随机文件名称
        </span><span>//</span><span>让用户可以不用按位置传参数,后面参数给值不用将前几个参数也提供值</span>
        function __construct($options=<span>array()){
            </span><span>foreach</span>($options <span>as</span> $key=><span>$val){
                $key</span>=<span>strtolower($key);
                </span><span>//</span><span>查看用户参数中数组的下标是否和成员属性名相同</span>
                <span>if</span>(!in_array($key,get_class_vars(get_class($<span>this</span><span>)))){
                    </span><span>continue</span><span>;
                }

                $</span><span>this</span>-><span>setOption($key, $val);
            }
         
        
        }
    


        </span><span>private</span><span> function getError(){
            $str</span>=<span>"</span><span>上传文件<font color='red'>{$this->originName}</font>时出错:</span><span>"</span><span>;

            </span><span>switch</span>($<span>this</span>-><span>errorNum){
                </span><span>case</span> <span>4</span>: $str .= <span>"</span><span>没有文件被上传</span><span>"</span>; <span>break</span><span>;
                </span><span>case</span> <span>3</span>: $str .= <span>"</span><span>文件只被部分上传</span><span>"</span>; <span>break</span><span>;
                </span><span>case</span> <span>2</span>: $str .= <span>"</span><span>上传文件超过了HTML表单中MAX_FILE_SIZE选项指定的值</span><span>"</span>; <span>break</span><span>;
                </span><span>case</span> <span>1</span>: $str .= <span>"</span><span>上传文件超过了php.ini 中upload_max_filesize选项的值</span><span>"</span>; <span>break</span><span>;
                </span><span>case</span> -<span>1</span>: $str .= <span>"</span><span>末充许的类型</span><span>"</span>; <span>break</span><span>;
                </span><span>case</span> -<span>2</span>: $str .= <span>"</span><span>文件过大,上传文件不能超过{$this->maxSize}个字节</span><span>"</span>; <span>break</span><span>;
                </span><span>case</span> -<span>3</span>: $str .= <span>"</span><span>上传失败</span><span>"</span>; <span>break</span><span>;
                </span><span>case</span> -<span>4</span>: $str .= <span>"</span><span>建立存放上传文件目录失败,请重新指定上传目录</span><span>"</span>; <span>break</span><span>;
                </span><span>case</span> -<span>5</span>: $str .= <span>"</span><span>必须指定上传文件的路径</span><span>"</span>; <span>break</span><span>;

                </span><span>default</span>: $str .=  <span>"</span><span>末知错误</span><span>"</span><span>;
            }

            </span><span>return</span> $str.<span>'</span><span><br></span><span>'</span><span>;
        }
    
        </span><span>//</span><span>用来检查文件上传路径</span>
        <span>private</span><span> function checkFilePath(){
            </span><span>if</span>(empty($<span>this</span>-><span>filepath)) {
                $</span><span>this</span>->setOption(<span>'</span><span>errorNum</span><span>'</span>, -<span>5</span><span>);
                </span><span>return</span> <span>false</span><span>;
            }

            </span><span>if</span>(!file_exists($<span>this</span>->filepath) || !is_writable($<span>this</span>-><span>filepath)){
                </span><span>if</span>(!@mkdir($<span>this</span>->filepath, <span>0755</span><span>)){
                    $</span><span>this</span>->setOption(<span>'</span><span>errorNum</span><span>'</span>, -<span>4</span><span>);
                    </span><span>return</span> <span>false</span><span>;
                }
            }
            </span><span>return</span> <span>true</span><span>;
        }
        </span><span>//</span><span>用来检查文件上传的大小</span>
        <span>private</span><span> function checkFileSize() {
            </span><span>if</span>($<span>this</span>->fileSize > $<span>this</span>-><span>maxsize){
                $</span><span>this</span>->setOPtion(<span>'</span><span>errorNum</span><span>'</span>, <span>'</span><span>-2</span><span>'</span><span>);
                </span><span>return</span> <span>false</span><span>;
            }</span><span>else</span><span>{
                </span><span>return</span> <span>true</span><span>;
            }
        }

        </span><span>//</span><span>用于检查文件上传类型</span>
        <span>private</span><span> function checkFileType() {
            </span><span>if</span>(in_array(strtolower($<span>this</span>->fileType), $<span>this</span>-><span>allowtype)) {
                </span><span>return</span> <span>true</span><span>;
            }</span><span>else</span><span>{
                $</span><span>this</span>->setOption(<span>'</span><span>errorNum</span><span>'</span>, -<span>1</span><span>);
                </span><span>return</span> <span>false</span><span>;
            }
        }
        </span><span>//</span><span>设置上传后的文件名称</span>
        <span>private</span><span> function setNewFileName(){
            </span><span>if</span>($<span>this</span>-><span>israndname){
                $</span><span>this</span>->setOption(<span>'</span><span>newFileName</span><span>'</span>, $<span>this</span>-><span>proRandName());
            } </span><span>else</span><span> {
                $</span><span>this</span>->setOption(<span>'</span><span>newFileName</span><span>'</span>, $<span>this</span>-><span>originName);
            }
        }



        </span><span>//</span><span>设置随机文件名称</span>
        <span>private</span><span> function proRandName(){
            $fileName</span>=date(<span>"</span><span>YmdHis</span><span>"</span>).rand(<span>100</span>,<span>999</span><span>);
            </span><span>return</span> $fileName.<span>'</span><span>.</span><span>'</span>.$<span>this</span>-><span>fileType;
        }
    
        </span><span>private</span><span> function setOption($key, $val){
            $</span><span>this</span>->$key=<span>$val;
        }
        </span><span>//</span><span>用来上传一个文件</span>
<span>        function uploadFile($fileField){
            $</span><span>return</span>=<span>true</span><span>;
            </span><span>//</span><span>检查文件上传路径</span>
            <span>if</span>(!$<span>this</span>-><span>checkFilePath()){
                $</span><span>this</span>->errorMess=$<span>this</span>-><span>getError();
                </span><span>return</span> <span>false</span><span>;
            }

            
            $name</span>=$_FILES[$fileField][<span>'</span><span>name</span><span>'</span><span>];
            $tmp_name</span>=$_FILES[$fileField][<span>'</span><span>tmp_name</span><span>'</span><span>];
            $size</span>=$_FILES[$fileField][<span>'</span><span>size</span><span>'</span><span>];
            $error</span>=$_FILES[$fileField][<span>'</span><span>error</span><span>'</span><span>];

            </span><span>if</span><span>(is_Array($name)){
                $errors</span>=<span>array();

                </span><span>for</span>($i=<span>0</span>; $i<count($name); $i++<span>){
                    </span><span>if</span>($<span>this</span>-><span>setFiles($name[$i], $tmp_name[$i], $size[$i], $error[$i])){
                        </span><span>if</span>(!$<span>this</span>->checkFileSize() || !$<span>this</span>-><span>checkFileType()){
                            $errors[]</span>=$<span>this</span>-><span>getError();
                            $</span><span>return</span>=<span>false</span><span>;
                        }
                    }</span><span>else</span><span>{
                        $error[]</span>=$<span>this</span>-><span>getError();
                        $</span><span>return</span>=<span>false</span><span>;
                    }

                    </span><span>if</span>(!$<span>return</span><span>)
                        $</span><span>this</span>-><span>setFiles();
                }

                </span><span>if</span>($<span>return</span><span>){
                    $fileNames</span>=<span>array();

                    </span><span>for</span>($i=<span>0</span>; $i<count($name); $i++<span>){
                        </span><span>if</span>($<span>this</span>-><span>setFiles($name[$i], $tmp_name[$i], $size[$i], $error[$i])){
                            $</span><span>this</span>-><span>setNewFileName();
                            </span><span>if</span>(!$<span>this</span>-><span>copyFile()){
                                $errors</span>=$<span>this</span>-><span>getError();
                                $</span><span>return</span>=<span>false</span><span>;
                            }</span><span>else</span><span>{
                                $fileNames[]</span>=$<span>this</span>-><span>newFileName;
                            }
                        }
                    }

                    $</span><span>this</span>->newFileName=<span>$fileNames;
                }

                $</span><span>this</span>->errorMess=<span>$errors;
                </span><span>return</span> $<span>return</span><span>;
            } </span><span>else</span><span> {
                
                    </span><span>if</span>($<span>this</span>-><span>setFiles($name, $tmp_name, $size, $error)){
                        </span><span>if</span>($<span>this</span>->checkFileSize() && $<span>this</span>-><span>checkFileType()){
                            $</span><span>this</span>-><span>setNewFileName();

                            </span><span>if</span>($<span>this</span>-><span>copyFile()){
                                </span><span>return</span> <span>true</span><span>;
                            }</span><span>else</span><span>{
                                $</span><span>return</span>=<span>false</span><span>;
                            }
                                
                        }</span><span>else</span><span>{
                            $</span><span>return</span>=<span>false</span><span>;
                        }    
                    }</span><span>else</span><span>{
                        $</span><span>return</span>=<span>false</span><span>;
                    }
                    
                    

                    </span><span>if</span>(!$<span>return</span><span>)
                        $</span><span>this</span>->errorMess=$<span>this</span>-><span>getError();


                    </span><span>return</span> $<span>return</span><span>;
            }            
        }

        </span><span>private</span><span> function copyFile(){
            </span><span>if</span>(!$<span>this</span>-><span>errorNum){
                $filepath</span>=rtrim($<span>this</span>->filepath, <span>'</span><span>/</span><span>'</span>).<span>'</span><span>/</span><span>'</span><span>;
                $filepath.</span>=$<span>this</span>-><span>newFileName;

                </span><span>if</span>(@move_uploaded_file($<span>this</span>-><span>tmpFileName, $filepath))    {
                    </span><span>return</span> <span>true</span><span>;
                }</span><span>else</span><span>{
                    $</span><span>this</span>->setOption(<span>'</span><span>errorNum</span><span>'</span>, -<span>3</span><span>);
                    </span><span>return</span> <span>false</span><span>;
                }
                    
            }</span><span>else</span><span>{
                </span><span>return</span> <span>false</span><span>;
            }
        }

        </span><span>//</span><span>设置和$_FILES有关的内容</span>
        <span>private</span> function setFiles($name=<span>""</span>, $tmp_name=<span>''</span>, $size=<span>0</span>, $error=<span>0</span><span>){
        
            $</span><span>this</span>->setOption(<span>'</span><span>errorNum</span><span>'</span><span>, $error);
                
            </span><span>if</span><span>($error){
                </span><span>return</span> <span>false</span><span>;
            }

            $</span><span>this</span>->setOption(<span>'</span><span>originName</span><span>'</span><span>, $name);
            $</span><span>this</span>->setOption(<span>'</span><span>tmpFileName</span><span>'</span><span>, $tmp_name);
            $arrStr</span>=explode(<span>'</span><span>.</span><span>'</span><span>, $name); 
            $</span><span>this</span>->setOption(<span>'</span><span>fileType</span><span>'</span>, strtolower($arrStr[count($arrStr)-<span>1</span><span>]));
            $</span><span>this</span>->setOption(<span>'</span><span>fileSize</span><span>'</span><span>, $size);    

            </span><span>return</span> <span>true</span><span>;
        }    

        </span><span>//</span><span>用于获取上传后文件的文件名</span>
<span>        function getNewFileName(){
            </span><span>return</span> $<span>this</span>-><span>newFileName;
        }
        </span><span>//</span><span>上传如果失败,则调用这个方法,就可以查看错误报告</span>
<span>        function getErrorMsg() {
            </span><span>return</span> $<span>this</span>-><span>errorMess;
        }
    }</span>
로그인 후 복사

 

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1008857.htmlTechArticlePHP设计超级好用的文件上传处理类一 (37), ? php class FileUpload { private $filepath; // 指定上传文件保存的路径 private $allowtype=array( ' gif ' , '...
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Dec 24, 2024 pm 04:42 PM

Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드

CakePHP 날짜 및 시간 CakePHP 날짜 및 시간 Sep 10, 2024 pm 05:27 PM

CakePHP 날짜 및 시간

CakePHP 프로젝트 구성 CakePHP 프로젝트 구성 Sep 10, 2024 pm 05:25 PM

CakePHP 프로젝트 구성

CakePHP 파일 업로드 CakePHP 파일 업로드 Sep 10, 2024 pm 05:27 PM

CakePHP 파일 업로드

CakePHP 라우팅 CakePHP 라우팅 Sep 10, 2024 pm 05:25 PM

CakePHP 라우팅

CakePHP 토론 CakePHP 토론 Sep 10, 2024 pm 05:28 PM

CakePHP 토론

CakePHP 빠른 가이드 CakePHP 빠른 가이드 Sep 10, 2024 pm 05:27 PM

CakePHP 빠른 가이드

PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 Dec 20, 2024 am 11:31 AM

PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법

See all articles