PHP文件不存在错误:move_uploaded_file执行失败求助
先看看你遇到的报错信息:
Warning: move_uploaded_file(C:\mpp\htdocs\ch09\data2018_03_22_11_38_23_0.gif): failed to open stream: No such file or directory in C:\xampp\htdocs\ch09\concert\insert.php on line 101
Warning: move_uploaded_file(): Unable to move 'C:\xampp\tmp\phpE1D0.tmp' to 'C:\mpp\htdocs\ch09\data2018_03_22_11_38_23_0.gif' in C:\xampp\htdocs\ch09\concert\insert.php on line 101
你提到配置的上传目录是$upload_dir = "C:\xampp\htdocs\ch09\data";,但报错里的目标路径却变成了C:\mpp\htdocs\...——核心问题出在PHP对双引号字符串的转义解析上:
在双引号包裹的字符串中,\x会被PHP当作十六进制转义序列处理,\xa对应的是ASCII换行符(字符码10),所以C:\xampp会被错误解析成C:\mpp(\xa被解析成换行符后消失,剩下的mpp直接拼接在C:\后面),这就导致程序找不到正确的上传目录。
给你三个简单有效的解决方法:
用单引号包裹路径
单引号字符串在PHP中不会解析任何转义字符,直接原样输出内容,修改后代码如下:$upload_dir = 'C:\xampp\htdocs\ch09\data';双引号下使用双反斜杠转义
如果一定要用双引号,把路径里的每个反斜杠都改成两个反斜杠,让PHP识别为普通的路径分隔符:$upload_dir = "C:\\xampp\\htdocs\\ch09\\data";改用正斜杠作为路径分隔符
PHP在Windows系统下完全支持正斜杠作为路径分隔符,这样就彻底避免了转义问题,写法更简洁:$upload_dir = "C:/xampp/htdocs/ch09/data";
修改完成后,可以先通过echo $upload_dir;输出路径,确认显示的是正确的C:\xampp\htdocs\ch09\data(或对应的正斜杠版本),再测试上传功能,应该就能解决这个报错了。
内容的提问来源于stack exchange,提问作者Seo woo

