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

php中文网
发布: 2016-06-13 12:20:50
原创
1023人浏览过

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

<?<span style="color: #000000;">php    </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> FileUpload {        </span><span style="color: #0000ff;">private</span> $filepath;     <span style="color: #008000;">//</span><span style="color: #008000;">指定上传文件保存的路径</span>        <span style="color: #0000ff;">private</span> $allowtype=array(<span style="color: #800000;">'</span><span style="color: #800000;">gif</span><span style="color: #800000;">'</span>, <span style="color: #800000;">'</span><span style="color: #800000;">jpg</span><span style="color: #800000;">'</span>, <span style="color: #800000;">'</span><span style="color: #800000;">png</span><span style="color: #800000;">'</span>, <span style="color: #800000;">'</span><span style="color: #800000;">jpeg</span><span style="color: #800000;">'</span>);  <span style="color: #008000;">//</span><span style="color: #008000;">充许上传文件的类型</span>        <span style="color: #0000ff;">private</span> $maxsize=<span style="color: #800080;">1000000</span>;  <span style="color: #008000;">//</span><span style="color: #008000;">允上传文件的最大长度 1M</span>        <span style="color: #0000ff;">private</span> $israndname=<span style="color: #0000ff;">true</span>;  <span style="color: #008000;">//</span><span style="color: #008000;">是否随机重命名, true false不随机,使用原文件名</span>        <span style="color: #0000ff;">private</span> $originName;   <span style="color: #008000;">//</span><span style="color: #008000;">源文件名称</span>        <span style="color: #0000ff;">private</span> $tmpFileName;   <span style="color: #008000;">//</span><span style="color: #008000;">临时文件名</span>        <span style="color: #0000ff;">private</span> $fileType;  <span style="color: #008000;">//</span><span style="color: #008000;">文件类型</span>        <span style="color: #0000ff;">private</span> $fileSize;  <span style="color: #008000;">//</span><span style="color: #008000;">文件大小</span>        <span style="color: #0000ff;">private</span> $newFileName; <span style="color: #008000;">//</span><span style="color: #008000;">新文件名</span>        <span style="color: #0000ff;">private</span> $errorNum=<span style="color: #800080;">0</span>;  <span style="color: #008000;">//</span><span style="color: #008000;">错误号</span>        <span style="color: #0000ff;">private</span> $errorMess=<span style="color: #800000;">""</span>; <span style="color: #008000;">//</span><span style="color: #008000;">用来提供错误报告        </span><span style="color: #008000;">//</span><span style="color: #008000;">用于对上传文件初使化        </span><span style="color: #008000;">//</span><span style="color: #008000;">1. 指定上传路径, 2,充许的类型, 3,限制大小, 4,是否使用随机文件名称        </span><span style="color: #008000;">//</span><span style="color: #008000;">让用户可以不用按位置传参数,后面参数给值不用将前几个参数也提供值</span>        function __construct($options=<span style="color: #000000;">array()){            </span><span style="color: #0000ff;">foreach</span>($options <span style="color: #0000ff;">as</span> $key=><span style="color: #000000;">$val){                $key</span>=<span style="color: #000000;">strtolower($key);                </span><span style="color: #008000;">//</span><span style="color: #008000;">查看用户参数中数组的下标是否和成员属性名相同</span>                <span style="color: #0000ff;">if</span>(!in_array($key,get_class_vars(get_class($<span style="color: #0000ff;">this</span><span style="color: #000000;">)))){                    </span><span style="color: #0000ff;">continue</span><span style="color: #000000;">;                }                $</span><span style="color: #0000ff;">this</span>-><span style="color: #000000;">setOption($key, $val);            }                         }            </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> function getError(){            $str</span>=<span style="color: #800000;">"</span><span style="color: #800000;">上传文件<font color='red'>{$this->originName}</font>时出错:</span><span style="color: #800000;">"</span><span style="color: #000000;">;            </span><span style="color: #0000ff;">switch</span>($<span style="color: #0000ff;">this</span>-><span style="color: #000000;">errorNum){                </span><span style="color: #0000ff;">case</span> <span style="color: #800080;">4</span>: $str .= <span style="color: #800000;">"</span><span style="color: #800000;">没有文件被上传</span><span style="color: #800000;">"</span>; <span style="color: #0000ff;">break</span><span style="color: #000000;">;                </span><span style="color: #0000ff;">case</span> <span style="color: #800080;">3</span>: $str .= <span style="color: #800000;">"</span><span style="color: #800000;">文件只被部分上传</span><span style="color: #800000;">"</span>; <span style="color: #0000ff;">break</span><span style="color: #000000;">;                </span><span style="color: #0000ff;">case</span> <span style="color: #800080;">2</span>: $str .= <span style="color: #800000;">"</span><span style="color: #800000;">上传文件超过了HTML表单中MAX_FILE_SIZE选项指定的值</span><span style="color: #800000;">"</span>; <span style="color: #0000ff;">break</span><span style="color: #000000;">;                </span><span style="color: #0000ff;">case</span> <span style="color: #800080;">1</span>: $str .= <span style="color: #800000;">"</span><span style="color: #800000;">上传文件超过了php.ini 中upload_max_filesize选项的值</span><span style="color: #800000;">"</span>; <span style="color: #0000ff;">break</span><span style="color: #000000;">;                </span><span style="color: #0000ff;">case</span> -<span style="color: #800080;">1</span>: $str .= <span style="color: #800000;">"</span><span style="color: #800000;">末充许的类型</span><span style="color: #800000;">"</span>; <span style="color: #0000ff;">break</span><span style="color: #000000;">;                </span><span style="color: #0000ff;">case</span> -<span style="color: #800080;">2</span>: $str .= <span style="color: #800000;">"</span><span style="color: #800000;">文件过大,上传文件不能超过{$this->maxSize}个字节</span><span style="color: #800000;">"</span>; <span style="color: #0000ff;">break</span><span style="color: #000000;">;                </span><span style="color: #0000ff;">case</span> -<span style="color: #800080;">3</span>: $str .= <span style="color: #800000;">"</span><span style="color: #800000;">上传失败</span><span style="color: #800000;">"</span>; <span style="color: #0000ff;">break</span><span style="color: #000000;">;                </span><span style="color: #0000ff;">case</span> -<span style="color: #800080;">4</span>: $str .= <span style="color: #800000;">"</span><span style="color: #800000;">建立存放上传文件目录失败,请重新指定上传目录</span><span style="color: #800000;">"</span>; <span style="color: #0000ff;">break</span><span style="color: #000000;">;                </span><span style="color: #0000ff;">case</span> -<span style="color: #800080;">5</span>: $str .= <span style="color: #800000;">"</span><span style="color: #800000;">必须指定上传文件的路径</span><span style="color: #800000;">"</span>; <span style="color: #0000ff;">break</span><span style="color: #000000;">;                </span><span style="color: #0000ff;">default</span>: $str .=  <span style="color: #800000;">"</span><span style="color: #800000;">末知错误</span><span style="color: #800000;">"</span><span style="color: #000000;">;            }            </span><span style="color: #0000ff;">return</span> $str.<span style="color: #800000;">'</span><span style="color: #800000;"><br></span><span style="color: #800000;">'</span><span style="color: #000000;">;        }            </span><span style="color: #008000;">//</span><span style="color: #008000;">用来检查文件上传路径</span>        <span style="color: #0000ff;">private</span><span style="color: #000000;"> function checkFilePath(){            </span><span style="color: #0000ff;">if</span>(empty($<span style="color: #0000ff;">this</span>-><span style="color: #000000;">filepath)) {                $</span><span style="color: #0000ff;">this</span>->setOption(<span style="color: #800000;">'</span><span style="color: #800000;">errorNum</span><span style="color: #800000;">'</span>, -<span style="color: #800080;">5</span><span style="color: #000000;">);                </span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #000000;">;            }            </span><span style="color: #0000ff;">if</span>(!file_exists($<span style="color: #0000ff;">this</span>->filepath) || !is_writable($<span style="color: #0000ff;">this</span>-><span style="color: #000000;">filepath)){                </span><span style="color: #0000ff;">if</span>([email&#160;protected]($<span style="color: #0000ff;">this</span>->filepath, <span style="color: #800080;">0755</span><span style="color: #000000;">)){                    $</span><span style="color: #0000ff;">this</span>->setOption(<span style="color: #800000;">'</span><span style="color: #800000;">errorNum</span><span style="color: #800000;">'</span>, -<span style="color: #800080;">4</span><span style="color: #000000;">);                    </span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #000000;">;                }            }            </span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #000000;">;        }        </span><span style="color: #008000;">//</span><span style="color: #008000;">用来检查文件上传的大小</span>        <span style="color: #0000ff;">private</span><span style="color: #000000;"> function checkFileSize() {            </span><span style="color: #0000ff;">if</span>($<span style="color: #0000ff;">this</span>->fileSize > $<span style="color: #0000ff;">this</span>-><span style="color: #000000;">maxsize){                $</span><span style="color: #0000ff;">this</span>->setOPtion(<span style="color: #800000;">'</span><span style="color: #800000;">errorNum</span><span style="color: #800000;">'</span>, <span style="color: #800000;">'</span><span style="color: #800000;">-2</span><span style="color: #800000;">'</span><span style="color: #000000;">);                </span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #000000;">;            }</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{                </span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #000000;">;            }        }        </span><span style="color: #008000;">//</span><span style="color: #008000;">用于检查文件上传类型</span>        <span style="color: #0000ff;">private</span><span style="color: #000000;"> function checkFileType() {            </span><span style="color: #0000ff;">if</span>(in_array(strtolower($<span style="color: #0000ff;">this</span>->fileType), $<span style="color: #0000ff;">this</span>-><span style="color: #000000;">allowtype)) {                </span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #000000;">;            }</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{                $</span><span style="color: #0000ff;">this</span>->setOption(<span style="color: #800000;">'</span><span style="color: #800000;">errorNum</span><span style="color: #800000;">'</span>, -<span style="color: #800080;">1</span><span style="color: #000000;">);                </span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #000000;">;            }        }        </span><span style="color: #008000;">//</span><span style="color: #008000;">设置上传后的文件名称</span>        <span style="color: #0000ff;">private</span><span style="color: #000000;"> function setNewFileName(){            </span><span style="color: #0000ff;">if</span>($<span style="color: #0000ff;">this</span>-><span style="color: #000000;">israndname){                $</span><span style="color: #0000ff;">this</span>->setOption(<span style="color: #800000;">'</span><span style="color: #800000;">newFileName</span><span style="color: #800000;">'</span>, $<span style="color: #0000ff;">this</span>-><span style="color: #000000;">proRandName());            } </span><span style="color: #0000ff;">else</span><span style="color: #000000;"> {                $</span><span style="color: #0000ff;">this</span>->setOption(<span style="color: #800000;">'</span><span style="color: #800000;">newFileName</span><span style="color: #800000;">'</span>, $<span style="color: #0000ff;">this</span>-><span style="color: #000000;">originName);            }        }        </span><span style="color: #008000;">//</span><span style="color: #008000;">设置随机文件名称</span>        <span style="color: #0000ff;">private</span><span style="color: #000000;"> function proRandName(){            $fileName</span>=date(<span style="color: #800000;">"</span><span style="color: #800000;">YmdHis</span><span style="color: #800000;">"</span>).rand(<span style="color: #800080;">100</span>,<span style="color: #800080;">999</span><span style="color: #000000;">);            </span><span style="color: #0000ff;">return</span> $fileName.<span style="color: #800000;">'</span><span style="color: #800000;">.</span><span style="color: #800000;">'</span>.$<span style="color: #0000ff;">this</span>-><span style="color: #000000;">fileType;        }            </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> function setOption($key, $val){            $</span><span style="color: #0000ff;">this</span>->$key=<span style="color: #000000;">$val;        }        </span><span style="color: #008000;">//</span><span style="color: #008000;">用来上传一个文件</span><span style="color: #000000;">        function uploadFile($fileField){            $</span><span style="color: #0000ff;">return</span>=<span style="color: #0000ff;">true</span><span style="color: #000000;">;            </span><span style="color: #008000;">//</span><span style="color: #008000;">检查文件上传路径</span>            <span style="color: #0000ff;">if</span>(!$<span style="color: #0000ff;">this</span>-><span style="color: #000000;">checkFilePath()){                $</span><span style="color: #0000ff;">this</span>->errorMess=$<span style="color: #0000ff;">this</span>-><span style="color: #000000;">getError();                </span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #000000;">;            }                        $name</span>=$_FILES[$fileField][<span style="color: #800000;">'</span><span style="color: #800000;">name</span><span style="color: #800000;">'</span><span style="color: #000000;">];            $tmp_name</span>=$_FILES[$fileField][<span style="color: #800000;">'</span><span style="color: #800000;">tmp_name</span><span style="color: #800000;">'</span><span style="color: #000000;">];            $size</span>=$_FILES[$fileField][<span style="color: #800000;">'</span><span style="color: #800000;">size</span><span style="color: #800000;">'</span><span style="color: #000000;">];            $error</span>=$_FILES[$fileField][<span style="color: #800000;">'</span><span style="color: #800000;">error</span><span style="color: #800000;">'</span><span style="color: #000000;">];            </span><span style="color: #0000ff;">if</span><span style="color: #000000;">(is_Array($name)){                $errors</span>=<span style="color: #000000;">array();                </span><span style="color: #0000ff;">for</span>($i=<span style="color: #800080;">0</span>; $i<count($name); $i++<span style="color: #000000;">){                    </span><span style="color: #0000ff;">if</span>($<span style="color: #0000ff;">this</span>-><span style="color: #000000;">setFiles($name[$i], $tmp_name[$i], $size[$i], $error[$i])){                        </span><span style="color: #0000ff;">if</span>(!$<span style="color: #0000ff;">this</span>->checkFileSize() || !$<span style="color: #0000ff;">this</span>-><span style="color: #000000;">checkFileType()){                            $errors[]</span>=$<span style="color: #0000ff;">this</span>-><span style="color: #000000;">getError();                            $</span><span style="color: #0000ff;">return</span>=<span style="color: #0000ff;">false</span><span style="color: #000000;">;                        }                    }</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{                        $error[]</span>=$<span style="color: #0000ff;">this</span>-><span style="color: #000000;">getError();                        $</span><span style="color: #0000ff;">return</span>=<span style="color: #0000ff;">false</span><span style="color: #000000;">;                    }                    </span><span style="color: #0000ff;">if</span>(!$<span style="color: #0000ff;">return</span><span style="color: #000000;">)                        $</span><span style="color: #0000ff;">this</span>-><span style="color: #000000;">setFiles();                }                </span><span style="color: #0000ff;">if</span>($<span style="color: #0000ff;">return</span><span style="color: #000000;">){                    $fileNames</span>=<span style="color: #000000;">array();                    </span><span style="color: #0000ff;">for</span>($i=<span style="color: #800080;">0</span>; $i<count($name); $i++<span style="color: #000000;">){                        </span><span style="color: #0000ff;">if</span>($<span style="color: #0000ff;">this</span>-><span style="color: #000000;">setFiles($name[$i], $tmp_name[$i], $size[$i], $error[$i])){                            $</span><span style="color: #0000ff;">this</span>-><span style="color: #000000;">setNewFileName();                            </span><span style="color: #0000ff;">if</span>(!$<span style="color: #0000ff;">this</span>-><span style="color: #000000;">copyFile()){                                $errors</span>=$<span style="color: #0000ff;">this</span>-><span style="color: #000000;">getError();                                $</span><span style="color: #0000ff;">return</span>=<span style="color: #0000ff;">false</span><span style="color: #000000;">;                            }</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{                                $fileNames[]</span>=$<span style="color: #0000ff;">this</span>-><span style="color: #000000;">newFileName;                            }                        }                    }                    $</span><span style="color: #0000ff;">this</span>->newFileName=<span style="color: #000000;">$fileNames;                }                $</span><span style="color: #0000ff;">this</span>->errorMess=<span style="color: #000000;">$errors;                </span><span style="color: #0000ff;">return</span> $<span style="color: #0000ff;">return</span><span style="color: #000000;">;            } </span><span style="color: #0000ff;">else</span><span style="color: #000000;"> {                                    </span><span style="color: #0000ff;">if</span>($<span style="color: #0000ff;">this</span>-><span style="color: #000000;">setFiles($name, $tmp_name, $size, $error)){                        </span><span style="color: #0000ff;">if</span>($<span style="color: #0000ff;">this</span>->checkFileSize() && $<span style="color: #0000ff;">this</span>-><span style="color: #000000;">checkFileType()){                            $</span><span style="color: #0000ff;">this</span>-><span style="color: #000000;">setNewFileName();                            </span><span style="color: #0000ff;">if</span>($<span style="color: #0000ff;">this</span>-><span style="color: #000000;">copyFile()){                                </span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #000000;">;                            }</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{                                $</span><span style="color: #0000ff;">return</span>=<span style="color: #0000ff;">false</span><span style="color: #000000;">;                            }                                                        }</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{                            $</span><span style="color: #0000ff;">return</span>=<span style="color: #0000ff;">false</span><span style="color: #000000;">;                        }                        }</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{                        $</span><span style="color: #0000ff;">return</span>=<span style="color: #0000ff;">false</span><span style="color: #000000;">;                    }                                                            </span><span style="color: #0000ff;">if</span>(!$<span style="color: #0000ff;">return</span><span style="color: #000000;">)                        $</span><span style="color: #0000ff;">this</span>->errorMess=$<span style="color: #0000ff;">this</span>-><span style="color: #000000;">getError();                    </span><span style="color: #0000ff;">return</span> $<span style="color: #0000ff;">return</span><span style="color: #000000;">;            }                    }        </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> function copyFile(){            </span><span style="color: #0000ff;">if</span>(!$<span style="color: #0000ff;">this</span>-><span style="color: #000000;">errorNum){                $filepath</span>=rtrim($<span style="color: #0000ff;">this</span>->filepath, <span style="color: #800000;">'</span><span style="color: #800000;">/</span><span style="color: #800000;">'</span>).<span style="color: #800000;">'</span><span style="color: #800000;">/</span><span style="color: #800000;">'</span><span style="color: #000000;">;                $filepath.</span>=$<span style="color: #0000ff;">this</span>-><span style="color: #000000;">newFileName;                </span><span style="color: #0000ff;">if</span>(@move_uploaded_file($<span style="color: #0000ff;">this</span>-><span style="color: #000000;">tmpFileName, $filepath))    {                    </span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #000000;">;                }</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{                    $</span><span style="color: #0000ff;">this</span>->setOption(<span style="color: #800000;">'</span><span style="color: #800000;">errorNum</span><span style="color: #800000;">'</span>, -<span style="color: #800080;">3</span><span style="color: #000000;">);                    </span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #000000;">;                }                                }</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{                </span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #000000;">;            }        }        </span><span style="color: #008000;">//</span><span style="color: #008000;">设置和$_FILES有关的内容</span>        <span style="color: #0000ff;">private</span> function setFiles($name=<span style="color: #800000;">""</span>, $tmp_name=<span style="color: #800000;">''</span>, $size=<span style="color: #800080;">0</span>, $error=<span style="color: #800080;">0</span><span style="color: #000000;">){                    $</span><span style="color: #0000ff;">this</span>->setOption(<span style="color: #800000;">'</span><span style="color: #800000;">errorNum</span><span style="color: #800000;">'</span><span style="color: #000000;">, $error);                            </span><span style="color: #0000ff;">if</span><span style="color: #000000;">($error){                </span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #000000;">;            }            $</span><span style="color: #0000ff;">this</span>->setOption(<span style="color: #800000;">'</span><span style="color: #800000;">originName</span><span style="color: #800000;">'</span><span style="color: #000000;">, $name);            $</span><span style="color: #0000ff;">this</span>->setOption(<span style="color: #800000;">'</span><span style="color: #800000;">tmpFileName</span><span style="color: #800000;">'</span><span style="color: #000000;">, $tmp_name);            $arrStr</span>=explode(<span style="color: #800000;">'</span><span style="color: #800000;">.</span><span style="color: #800000;">'</span><span style="color: #000000;">, $name);             $</span><span style="color: #0000ff;">this</span>->setOption(<span style="color: #800000;">'</span><span style="color: #800000;">fileType</span><span style="color: #800000;">'</span>, strtolower($arrStr[count($arrStr)-<span style="color: #800080;">1</span><span style="color: #000000;">]));            $</span><span style="color: #0000ff;">this</span>->setOption(<span style="color: #800000;">'</span><span style="color: #800000;">fileSize</span><span style="color: #800000;">'</span><span style="color: #000000;">, $size);                </span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #000000;">;        }            </span><span style="color: #008000;">//</span><span style="color: #008000;">用于获取上传后文件的文件名</span><span style="color: #000000;">        function getNewFileName(){            </span><span style="color: #0000ff;">return</span> $<span style="color: #0000ff;">this</span>-><span style="color: #000000;">newFileName;        }        </span><span style="color: #008000;">//</span><span style="color: #008000;">上传如果失败,则调用这个方法,就可以查看错误报告</span><span style="color: #000000;">        function getErrorMsg() {            </span><span style="color: #0000ff;">return</span> $<span style="color: #0000ff;">this</span>-><span style="color: #000000;">errorMess;        }    }</span>
登录后复制

 

I-Shop购物系统
I-Shop购物系统

部分功能简介:商品收藏夹功能热门商品最新商品分级价格功能自选风格打印结算页面内部短信箱商品评论增加上一商品,下一商品功能增强商家提示功能友情链接用户在线统计用户来访统计用户来访信息用户积分功能广告设置用户组分类邮件系统后台实现更新用户数据系统图片设置模板管理CSS风格管理申诉内容过滤功能用户注册过滤特征字符IP库管理及来访限制及管理压缩,恢复,备份数据库功能上传文件管理商品类别管理商品添加/修改/

I-Shop购物系统 0
查看详情 I-Shop购物系统
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号