Correcting teacher:PHPz
Correction status:qualified
Teacher's comments:
<?php
function uploadFile($fileInfo,$uploadPath='./uploads',$flag=true,$allowExt=['jpg','jpeg','png','wbmp','gif'],$maxSize=(5*1024*1024)){
if($fileInfo['error'] == 0){
$arr = explode('.',$fileInfo['name']);
$ext = end($arr);
$prefix = array_shift($arr);
//检测文件类型
if(!in_array($ext,$allowExt)){
$res['error'] = '非法的文件类型';
}
//检测文件大小
if($fileInfo['size'] > $maxSize){
$res['error'] ='文件大小超过限制';
}
//检测文件名是否合法
if($flag){
if(!getimagesize($fileInfo['tmp_name'])){
$res['error'] ='文件不是真实图片';
}
}
//检测文件是否通过http post上传
if(!is_uploaded_file($fileInfo['tmp_name'])){
$res['error'] ='上传方式错误:请使用http post 方式上传';
}
if(!empty($res)) return;
if(!file_exists($uploadPath)){
mkdir($uploadPath,0770,true);
chmod($uploadPath,0770);
}
// 根据$prefix time() 生成唯一图片地址
$des = $uploadPath.'/'.md5($prefix.time()).'.'.$ext;
$result = move_uploaded_file($fileInfo['tmp_name'],$des);
if(!$result)
{
$res['error'] = '文件移动失败';
}else{
$res['info'] = $fileInfo['name'] . '上传成功';
$res['fileRealPath'] = $des;
}
return $res;
}else{
switch ($fileInfo['error']){
case 1:
$res['error'] = '文件超过php.ini中upload_max_fileize的值';
break;
case 2:
$res['error'] = '文件大小超过表单中MAX_FILE_SIZE的指定值';
break;
case 3:
$res['error'] = '文件只有部分被上传';
break;
case 4:
$res['error'] = '文件没有被上传';
break;
case 6:
$res['error'] = '找不到临时文件夹';
break;
default:
$res['error'] = '系统错误';
break;
}
}
}
function upload($fileInfo)
{
foreach($fileInfo as $k=>$v)
{
foreach($v as $kk=>$vv)
{
if($kk == $kk )
{
$files[$kk][$k] = $vv;
}
}
}
return $files;
}
<?php
require 'common.php';
$files = upload($_FILES['my_file']);
foreach ($files as $k){
$res[]['msg'] = uploadFile($k)['fileRealPath'];
}
print_r($res);
1,Linux 服务器下的设置
(1)编辑 php.ini,将 log_errors 设置为 on:
log_errors = On
(2)保存后重启 apache 即可。
2,Windows 服务器下的设置
(1)同样是编辑 php.ini。只不过除了将 log_errors 设置为 on 外,还需要定义 error_log 的路径及文件名。这样错误日志就会保存到指定的文件中。
log_errors = On
error_log = d:/php_log/errors.log
特别要注意的是,日志保存目录需要授予 php 标识用户的修改权限,否则日志文件无法生成。
经过上面的配置后,除了运行时产生的所有错误会自动记录到日志文件中外,我们也可以在代码中使用 error_log() 方法主动将一些信息写到日志文件中,方便定位问题。
<?
error_log("Mysql数据库不可用!", 0); //将错误消息写入到操作系统日志中
?>