通过 PHP,可以把文件上传到服务器。通过$_FILES
可以获取文件上传的相关信息;从而对文件进行操作。经过我的科学研究,发明了许多奇奇怪怪的问题;经过我的认真思考,终于;还是没能解决。最后一边百度一边思考。
enctype="multipart/form-data"
进行编码accept
设置文件上传的类型,然并卵,设置了用户还是能更改,所以需要php验证(接收两种值MINE TYPE和文件扩展名)isset
吞掉Undefined index
的警告$_SERVER['PHP_SELF']
提高代码的鲁棒性<?php if($_SERVER['REQUEST_METHOD']==='POST'){ echo '1111'; var_dump($_FILES['file']); } ?> ... <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data"> <div class="form-group"> <label for="source">文件</label> <input type="file" name="file" accept="image/*"> </div> <button>保存</button> </form>
$_FILES["file"]["name"] - 上传文件的名称 $_FILES["file"]["type"] - 上传文件的类型 $_FILES["file"]["size"] - 上传文件的大小,以字节计 $_FILES["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称(这里使用的是wampserver服务器,所以是wamp临时文件夹,打开该文件夹,可以看到会有一个文件生成然后就清除了) $_FILES["file"]["error"] - 由文件上传导致的错误代码
$file = $_FILES['file']; if(strpos($file['type'],'image/')!==0){ echo '文件不为图片类型'; }
if ($file['size'] > 1 * 1024 * 1024) { echo '上传文件过大'; return; }
move_uploaded_file
移动文件// 1. 移动到我们网站根目录下uploads文件夹下,为了防止重名,使用产生uniqid随机数 $tmp = $file['tmp_name']; $target = './uploads/'.uniqid().$file['name']; $moved = move_uploaded_file($tmp,$target);
iconv('UTF-8', 'GBK', $file['name']
很多时候我们都会报错1,或则有时候发现文件移动不了,除了中文问题,基本是后台进行了设置。
我移动图片基本没问题,但移动音乐文件时就报了1这个错误;后来我做了多次临床试验…
发现是文件太大导致移动不成功;我查看了文档修改了php限制问题
我这里使用的是wampserver服务器,所以我找到wamp\bin\php\php5.4.12
下的php.ini
file_uploads = on ;是否允许通过HTTP上传文件的开关。默认为ON即是开 upload_tmp_dir ;文件上传至服务器上存储临时文件的地方,如果没指定就会用系统默认的临时文件夹 file_uploads = on ;是否允许通过HTTP上传文件的开关。默认为ON即是开 upload_tmp_dir ;文件上传至服务器上存储临时文件的地方,如果没指定就会用系统默认的临时文件夹
然而还是没有成功,我转头一想,这是服务器的问题,应该是该Apache下的php.ini,所以我找到了wamp\bin\apache\Apache2.4.4\bin
下的php.ini;最好试验成功了
如果在不行,可以在进一步配置
max_execution_time = 600 ;每个PHP页面运行的最大时间值(秒),默认30秒 max_input_time = 600 ;每个PHP页面接收数据所需的最大时间,默认60秒 memory_limit = 8m ;每个PHP页面所吃掉的最大内存,默认8M
当然文件上传失败我们也需要做处理
if ($file['error'] !== UPLOAD_ERR_OK) { echo '文件上传失败'; return; }
上传成功在移动文件
使用multiple上传多个文件;在name值里面加上[]
来接收多个文件
<input type="file" name="image[]" accept="image/*" multiple>
结果打印var_dump($_FILES['image']);
的结果是不一样
我们获取关联数组,右边的值是一个数组,所以我们需要在进行遍历,跟单个文件获取是不一样结果