文件上传

前段时间网站做了一个上传视频的功能,遇到了一些问题,总结一下文件上传吧。

测试文件上传代码 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限制。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mr.杰瑞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值