加上对传入参数的判断,看其是否为数组,不为数组则报错
调用自定义函数,上传文件自定义函数
函数建立,加相应的参数,许多参数有默认值
返回关于文件信息的数组
简单的格式化代码
11 11111111
取得文件扩展名
直接输出错误信息,用exit
把echo改为$mes
错误号>0时,代表有错误
利用@来抑制错误(warning和notice都可以抑制)
在PHP中,可以使用@运算符来抑制单个错误。例如,如果不希望PHP报告它不包括某个文件,则可以编写如下代码:
@include ('config.inc.php');
或者如果不希望看到“除以0”错误:
$x = 8;
$y = 0;
$num = @($x/$y);
像函数调用或数学运算一样,@符号只能处理表达式。不能在条件语句、循环语句、函数定义等之前使用@符号。
一条经验法则是,我建议将@符号用于那些执行失败时不会影响脚本整体功能的函数。或者,在你自己可以更优雅地处理PHP的错误时可以抑制错误(本章后面将讨论这个主题)。
<?php //$fileInfo=$_FILES['myFile']; //函数封装 function uploadFile($fileInfo,$uploadPath = 'uploads',$flag=true,$allowExt=array('jpeg','jpg','gif','png'),$maxSize = 2097152){ // 判断错误号 if ($fileInfo ['error'] > 0) { switch ($fileInfo ['error']) { case 1 : $mes = '上传文件超过了PHP配置文件中upload_max_filesize选项的值'; break; case 2 : $mes = '超过了表单MAX_FILE_SIZE限制的大小'; break; case 3 : $mes = '文件部分被上传'; break; case 4 : $mes = '没有选择上传文件'; break; case 6 : $mes = '没有找到临时目录'; break; case 7 : case 8 : $mes = '系统错误'; break; } echo ( $mes ); return false; } $ext = pathinfo ( $fileInfo ['name'], PATHINFO_EXTENSION ); // $allowExt = array ( // 'jpeg', // 'jpg', // 'png', // 'gif' // ); if(!is_array($allowExt)){ exit('系统错误'); } // 检测上传文件的类型 if (! in_array ( $ext, $allowExt )) { exit ( '非法文件类型' ); } //$maxSize = 2097152; // 2M // 检测上传文件大小是否符合规范 if ($fileInfo ['size'] > $maxSize) { exit ( '上传文件过大' ); } //检测图片是否为真实的图片类型 //$flag=true; if($flag){ if(!getimagesize($fileInfo['tmp_name'])){ exit('不是真实图片类型'); } } // 检测文件是否是通过HTTP POST方式上传上来 if (! is_uploaded_file ( $fileInfo ['tmp_name'] )) { exit ( '文件不是通过HTTP POST方式上传上来的' ); } //$uploadPath = 'uploads'; if (! file_exists ( $uploadPath )) { mkdir ( $uploadPath, 0777, true ); //创建一个upload文件夹,0777表示可读可写可执行 chmod ( $uploadPath, 0777 ); } $uniName = md5 ( uniqid ( microtime ( true ), true ) ) . '.' . $ext; $destination = $uploadPath . '/' . $uniName; if (! @move_uploaded_file ( $fileInfo ['tmp_name'], $destination )) { exit ( '文件移动失败' ); } //echo '文件上传成功'; // return array( // 'newName'=>$destination, // 'size'=>$fileInfo['size'], // 'type'=>$fileInfo['type'] // ); return $destination; }