前段时间网站做了一个上传视频的功能,遇到了一些问题,总结一下文件上传吧。
测试文件上传代码 html
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset="utf-8"/>
<title>测试上传</title>
</head>
<body>
<form enctype ="multipart/form-data" method="post" action="upload.php">
上传<input name="name" type="file"/>
<button type="submit">提交</button>
</form>
</body>
</html>
php
<?php
if($_FILES['name']['error'] == UPLOAD_ERR_OK)
{
$tmp_name = $_FILES['name']['tmp_name']; //临时文件名
$name = $_FILES['name']['name'];//上传的文件名
$size = $_FILES['name']['size'];//文件大小
$local_dir = "./upload/"; //存储目录名,自己定义. 可以先判断是否存在is_dir(),不存在则mkdir()
move_uploaded_file($tmp_name,$local_dir.$name); //第一个参数 为临时文件名, 第二个参数为存储的包含有路径的新的文件名
$local_url = $local_dir.$name;
echo "图片预览:<img src='.$local_url.' title='图片预览'>";
}
else
{
echo '失败';
}
?>
$_FILES[‘name’][‘error’]返回值比较重要
UPLOAD_ERR_OK: 0 //正常,上传成功
UPLOAD_ERR_INI_SIZE: 1 //上传文件大小超过服务器允许上传的最大值,php.ini中设置upload_max_filesize选项限制的值
UPLOAD_ERR_FORM_SIZE: 2 //上传文件大小超过HTML表单中隐藏域MAX_FILE_SIZE选项指定的值
UPLOAD_ERR_NO_TMP_DIR: 6 //没有找不到临时文件夹
UPLOAD_ERR_CANT_WRITE: 7 //文件写入失败
UPLOAD_ERR_EXTENSION: 8 //php文件上传扩展没有打开
UPLOAD_ERR_PARTIAL: 3 //文件只有部分被上传
对文件上传 封装成一个方法
public function upload($to_path, $max_size=4)
{
$result = array();
is_dir($to_path) or @mkdir($to_path);
if (is_dir($to_path) && is_writable($to_path)) {
foreach ($_FILES as $file) {
if (is_array($file['error'])) { //多文件上传
foreach ($file['error'] as $key => $error) {
if ($error == UPLOAD_ERR_OK) {
if($file['size'][$key] > $max_size * 1024 * 1024) { //上传大小看根据php.ini里面设置
$result[] = false;
} else {
$dest_name = $to_path . $file['name'][$key];
if ($result[] = @move_uploaded_file($file['tmp_name'][$key], $dest_name)) {
echo '成功';
} else {
echo '失败1';
}
}
} else {
echo '失败2';
}
}
} else {
if ($file['error'] == UPLOAD_ERR_OK)
{
if($file['size'] > $max_size * 1024 * 1024) {
$result[] = false;
} else {
$dest_name = $to_path . $file['name'];
if ($result[] = @move_uploaded_file($file['tmp_name'], $dest_name)) {
echo '成功';
} else {
echo '失败1';
}
}
} else {
echo '失败2';
}
}
}
}
else
{
$result[] = false;
echo '文件存储目录'.$to_path.'不存在或没有写入的权限';
}
return $result;
}
可以根据需要 将失败信息进行保存到日志
其实文件上传没有什么难度,主要是对自己网站存储服务器不熟悉,特别要注意的是一定要对自己的目录结构进行隐藏,用特定的方法进行加密,增加ip限制。