博客列表 >PHP文件上传函数封装

PHP文件上传函数封装

ッ小眼睛っ
ッ小眼睛っ原创
2021年08月24日 14:13:13599浏览

封装函数

  1. <?php
  2. function uploadFile($fileInfo,$uploadPath='./uploads',$flag=true,$allowExt=['jpg','jpeg','png','wbmp','gif'],$maxSize=(5*1024*1024)){
  3. if($fileInfo['error'] == 0){
  4. $arr = explode('.',$fileInfo['name']);
  5. $ext = end($arr);
  6. $prefix = array_shift($arr);
  7. //检测文件类型
  8. if(!in_array($ext,$allowExt)){
  9. $res['error'] = '非法的文件类型';
  10. }
  11. //检测文件大小
  12. if($fileInfo['size'] > $maxSize){
  13. $res['error'] ='文件大小超过限制';
  14. }
  15. //检测文件名是否合法
  16. if($flag){
  17. if(!getimagesize($fileInfo['tmp_name'])){
  18. $res['error'] ='文件不是真实图片';
  19. }
  20. }
  21. //检测文件是否通过http post上传
  22. if(!is_uploaded_file($fileInfo['tmp_name'])){
  23. $res['error'] ='上传方式错误:请使用http post 方式上传';
  24. }
  25. if(!empty($res)) return;
  26. if(!file_exists($uploadPath)){
  27. mkdir($uploadPath,0770,true);
  28. chmod($uploadPath,0770);
  29. }
  30. // 根据$prefix time() 生成唯一图片地址
  31. $des = $uploadPath.'/'.md5($prefix.time()).'.'.$ext;
  32. $result = move_uploaded_file($fileInfo['tmp_name'],$des);
  33. if(!$result)
  34. {
  35. $res['error'] = '文件移动失败';
  36. }else{
  37. $res['info'] = $fileInfo['name'] . '上传成功';
  38. $res['fileRealPath'] = $des;
  39. }
  40. return $res;
  41. }else{
  42. switch ($fileInfo['error']){
  43. case 1:
  44. $res['error'] = '文件超过php.ini中upload_max_fileize的值';
  45. break;
  46. case 2:
  47. $res['error'] = '文件大小超过表单中MAX_FILE_SIZE的指定值';
  48. break;
  49. case 3:
  50. $res['error'] = '文件只有部分被上传';
  51. break;
  52. case 4:
  53. $res['error'] = '文件没有被上传';
  54. break;
  55. case 6:
  56. $res['error'] = '找不到临时文件夹';
  57. break;
  58. default:
  59. $res['error'] = '系统错误';
  60. break;
  61. }
  62. }
  63. }
  64. function upload($fileInfo)
  65. {
  66. foreach($fileInfo as $k=>$v)
  67. {
  68. foreach($v as $kk=>$vv)
  69. {
  70. if($kk == $kk )
  71. {
  72. $files[$kk][$k] = $vv;
  73. }
  74. }
  75. }
  76. return $files;
  77. }

请求函数的

  1. <?php
  2. require 'common.php';
  3. $files = upload($_FILES['my_file']);
  4. foreach ($files as $k){
  5. $res[]['msg'] = uploadFile($k)['fileRealPath'];
  6. }
  7. print_r($res);

设置错误显示

1,Linux 服务器下的设置
(1)编辑 php.ini,将 log_errors 设置为 on:

  1. log_errors = On

(2)保存后重启 apache 即可。

2,Windows 服务器下的设置
(1)同样是编辑 php.ini。只不过除了将 log_errors 设置为 on 外,还需要定义 error_log 的路径及文件名。这样错误日志就会保存到指定的文件中。

  1. log_errors = On
  2. error_log = d:/php_log/errors.log

特别要注意的是,日志保存目录需要授予 php 标识用户的修改权限,否则日志文件无法生成。

手动将错误信息记录到日志文件中

经过上面的配置后,除了运行时产生的所有错误会自动记录到日志文件中外,我们也可以在代码中使用 error_log() 方法主动将一些信息写到日志文件中,方便定位问题。

  1. <?
  2. error_log("Mysql数据库不可用!", 0); //将错误消息写入到操作系统日志中
  3. ?>
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议