功能强大的php文件上传类,非常经典的PHP文件上传类分享_PHP

本文介绍了一个用于简化PHP项目中文件上传过程的类封装方法,通过封装重复使用的代码来提高开发效率。

文件上传是项目开发中比较常见的功能,但文件上传的过程比较繁琐,只要是有文件上传的地方就需要编写这些复杂的代码。为了能在每次开发中降低功能的编写难度,也为了能节省开发时间,通常我们都会将这些反复使用的一段代码封装到一个类中。

$value){

if (!in_array($key,get_class_vars(get_class($this)))){

continue;

}

$this->setOption($key, $value);

}

}

function uploadfile($field) {

$return=true;

if (!$this->CheckPath()) {

$this->errormsg=$this->geterrorNum();

return false;

}

$name=$_FILES[$field]['name'];

$tmpname=$_FILES[$field]['tmp_name'];

$filesize=$_FILES[$field]['size'];

$error=$_FILES[$field]['error'];

if (is_array($name)) {

$errors=array();

for ($i=0;$igetFile($name[$i],$tmpname[$i],$filesize[$i],$errors[$i])) {

if (!$this->CheckSize() && !$this->CheckType()) {

$errors=$this->getErrorNum();

return false;

}

}else{

$errors=$this->getErrorNum();

return false;

}

if (!$return) {

$this->getFile();

}

}

if ($return) {

$fileNames=array();

for ($i=0;$igetFile($name[$i], $tmpname[$i], $filesize[$i], $filesize[$i])) {

$this->SetFileName();

if (!$this->MoveFile()) {

$errors[]=$this->getErrorNum();

$return=false;

}else{

$fileNames[]=$this->getNewName();

}

}

}

$this->newname=$fileNames;

}

$this->errormsg=$errors;

return $return;

}else{

if($this->getFile($name,$tmpname,filesize,$error)){

if(!$this->CheckSize()){

return false;

}

if(!$this->CheckType()){

return false;

}

$this->SetFileName();

if ($this->MoveFile()) {

return true;

}

}else{

return false;

}

if (!$return) {

$this->setOption('ErrorNum', 0);

$this->errormsg=$this->geterrorNum();

}

return $return;

}

}

/**

+------------------------------------------------------------------------

*设置类属性值函数

+------------------------------------------------------------------------

* @param mix $key

* @param mix $value

*/

private function setOption($key,$value){

$key=strtolower($key);

$this->$key=$value;

}

/**

+---------------------------------------------------------------------------

* 获取文件变量参数函数

+---------------------------------------------------------------------------

* @param string $name

* @param string $tmp_name

* @param number $size

* @param number $error

*/

private function getFile($name,$tmpname,$filetype,$filesize,$error=0){

$this->setOption('TmpName', $tmpname);

$this->setOption('OrgiName', $name);

$arrstr=explode('.', $name);

$this->setOption('FileType', $arrstr[count($arrstr)-1]);

$this->setOption('FileSize', $filesize);

return true;

}

/**

+-------------------------------------------------------------------------

* 检查上传路径函数

+-------------------------------------------------------------------------

* @return boolean

*/

private function CheckPath(){

if(empty($this->filepath)){

$this->setOption('ErrorNum', -5);

return false;

}

if (!file_exists($this->filepath)||!is_writable($this->filepath)) {

if (!@mkdir($this->filepath,0755)) {

$this->setOption('ErrorNum',-4);

return false;

}

}

return true;

}

private function Is_Http_Post(){

if (!is_uploaded_file($this->tmpname)) {

$this->setOption('ErrorNum',-6);

return false;

}else{

return true;

}

}

/**

+--------------------------------------------------------------------

*检查文件尺寸函数

+--------------------------------------------------------------------

* @return boolean

*/

private function CheckSize(){

if ($this->filesize>$this->maxsize) {

$this->setOption('ErrorNum', -2);

return false;

}else{

return true;

}

}

/**

+---------------------------------------------------------------

* 检查文件类型函数

+---------------------------------------------------------------

* @return boolean

*/

private function CheckType(){

if (in_array($this->filetype, $this->allowtype)) {

return true;

}else{

$this->setOption('ErrorNum', -1);

return false;

}

}

private function SetFileName(){

if ($this->israndname) {

$this->setOption('NewName', $this->RandName());

}else{

$this->setOption('NewName',$this->orginame);

}

}

/**

+-----------------------------------------------------------------

* 获取新文件名

+------------------------------------------------------------------

*/

public function getNewName() {

return $this->newname;

}

private function RandName(){

$rule=date("YmdHis").rand(0, 999);

return $rule.'.'.$this->filetype;

}

private function MoveFile(){

if ($this->errornum) {

$filepath=rtrim($this->filaepath,'/').'/';

$filepath.=$this->newname;

if (@move_uploaded_file($this->tmpname,$filepath)) {

return true;

}else{

$this->errormsg=$this->setOption('ErrorNum',-3 );

}

}else{

return false;

}

}

/**

+----------------------------------------------------------------

* 错误信息函数

+----------------------------------------------------------------

* @return string

*/

function getErrorNum() {

$erstr="上传文件{$this->orginame}出错";

switch ($this->errornum) {

case 4:

$erstr.="没有文件被上传";

break;

case 3:

$erstr.="文件只被部分上传";

break;

case 2:

$erstr.="上传文件超过了HTML表单MAX_FILE_SIZE指定的值";

break;

case 1:

$erstr.="上传文件超过了php.ini配置文件中upload_max_filesize的值";

break;

case 0:

$erstr="上传{$this->orginame}成功";

break;

case -1:

$erstr="未允许的类型";

break;

case -2:

$erstr.="文件过大,不能超过{$this->maxsize}个字节";

break;

case -3:

$erstr.="上传失败";

break;

case -4:

$erstr="创建上传目录失败,请重新指定上传目录";

break;

case -5:

$erstr="未指定上传路径";

break;

case -6:

$erstr="非法操作";

break;

default:

$erstr.="未知错误";

}

return $erstr;

}

}

?>

以上就是本文的全部内容,希望对大家学习php程序设计有所帮助。

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值