今天做了个php上传文件的例子,如下是成功后的代码:
<?php
header("content-type:text/html;charset=utf-8");
// error_reporting(0);
function getUploadErr($err){
switch($err){
case 1: return '上传文件超过了PHP.ini限定的大小';
case 2: return '上传文件超过了html表单所限定的大小';
case 3: return '文件只有部分被上传';
case 4: return '没有文件被上传';
default : return FALSE;
}
}
$path = 'upload/';
$num = 5;
if($_GET['action'] == 'upload'){
print_r($_FILES['userfile']);
echo '<br/>';
$files = $_FILES['userfile'];
// echo $files['name'][0];
for($i=0;$i<count($files['name']);$i++){
$name = iconv("UTF-8","gb2312",$files['name'][$i]);
if(move_uploaded_file($files['tmp_name'][$i],$path.$name)){
$name = iconv("gb2312","UTF-8",$name);
$alert .= $path.$name.'上传成功!' . '<br/>';
} else {
$name = iconv("gb2312","UTF-8",$name);
$alert .= $path.$name.'上传失败!' . getUploadErr($files['error'][$i]) . '<br/>';
}
}
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
<html lang="en">
<head>
<meta charset="UTF-8" http-equiv="content-type" content="text/html">
<title>ajax</title>
</head>
<body>
<p class="alert"><?php echo $alert; ?></p>
<h2>单文件上传</h2>
<form action="?action=upload" method="post" enctype="multipart/form-data">
<?php for($i=0;$i<$num;$i++): ?>
<p><input type="file" name="userfile[]" /></p>
<?php endfor; ?>
<p><button type="submit">上传</button></p>
</form>
</body>
</html>`
完成这个例子时,遇到了如下问题:
1.php文件中嵌入html标签时,html内的文字会出现乱码
解决方案:出现这个原因是php代码和html代码,没有统一文字编码在php头部放入
header("content-type:text/html;charset=utf-8");
然后在html中放入
<meta charset="UTF-8" http-equiv="content-type" content="text/html">
就可以解决这个问题
2.使用move_uploaded_file()函数上传到upload/目录中的文件,若文件名含有中文,则upload/下的文件名会乱码
解决方案:在move_uploaded_file()之前,先要把文件名的UTF-8编码方式转换成gb2312编码方式,我们电脑的文件使用的是gb2312格式,在move_uploaded_file()前加入这么一句:
$name = iconv("UTF-8","gb2312",$files['name'][$i]);
再使用move_uploaded_file()上传,上传到计算机目录下的文件名就能正常显示中文了,但是这里要注意一个问题,如果这时候你想在网页上显示上传成功的提示信息(包含文件名),那么就需要你把$name再重新转换回
UTF-8编码格式 $name = iconv("gb2312","UTF-8",$name);