项目场景:
在学习PHP如何上传文件时,使用move_uploaded_file方法时:产生两个Warning:file to open stream 和Unable to move
问题描述:
Warning: move_uploaded_file(D:/www/2737/upfile/test.txt): failed to open stream: No such file or directory in D:\WAMP\www\myphp\unit6\Example6_6.php on line 22
Warning: move_uploaded_file(): Unable to move ‘D:\WAMP\tmp\php1791.tmp’ to ‘D:/www/2737/upfile/test.txt’ in D:\WAMP\www\myphp\unit6\Example6_6.php on line 22
<?php
/*判断是否上传文件*/
if(!empty($_FILES['up_file']['name'])){
//将文件信息赋值给变量$fileinfo
$fileinfo=$_FILES['up_file'];
if($fileinfo['size']<2097152&&$fileinfo['size']>0){ //判断文件大小
$path="D:/www/myphp/unit6/upfile/".$_FILES["up_file"]["name"]; //定义文件路径
move_uploaded_file($fileinfo['tmp_file']["tmp_name"],$path); //上传文件
echo "文件上传成功!";
}else{
echo "文件大小不符合!";
}
}
?>
原因分析:
一开始查询时,有讲是文件大小问题的,因为php.ini文件里有:max_file_uploads = 20
但是试着上传一个只有两个字节的文件时还是原始报错,所以排除此问题。
之后又猜想是目录权限不够,查询资料发现是其实原因是文件找不到?
解决方案:
使用绝对路径替换相对路径
原本关键代码:
$path="upfile/".$_FILES["up_file"]["name"];
move_uploaded_file($fileinfo['tmp_file']["tmp_name"],$path);
修改后关键代码:
$path="D:/www/myphp/unit6/upfile/".$_FILES["up_file"]["name"];
move_uploaded_file($fileinfo['tmp_file']["tmp_name"],$path);
还有一种修改权限的方法,把权限修改成777即可。