我有一个PHP图像上传脚本,如下所示:
if($_FILES){
if(in_array($_FILES["pic"]["type"]), ["image/png", "image/jpeg", "image/gif"]){
move_uploaded_file($_FILES["pic"]["tmp_name"], "folder/");
}
}
如果图片与该脚本位于同一目录中,则上述方法才有效,但如果我想将图片从桌面上传到folder/
所在的c:/wamp/www/folder
,那么它就赢了& #39;工作,好像找不到文件一样?
答案 0 :(得分:0)
它不起作用的原因是你很可能open_basedir
生效:
open_basedir string
将PHP可以访问的文件限制为 指定的目录树,包括文件本身。 当脚本尝试访问文件系统时,例如使用include或fopen(), 检查文件的位置。当文件在外面时 指定的目录树,PHP将拒绝访问它。
您可以直接在PHP中设置open_basedir
设置,例如:
ini_set('open_basedir', $config['base_path'] . '/:' . $config['tmp_path'] . '/:' . $config['logs_path'] . '/:' . $config['etc_path'] . '/');
如果未设置open_basedir
设置,则无法解决问题。然后,您必须查看指定路径的方式,例如,您可能在路径末尾缺少/
,例如c:/wamp/www/folder/
。
要调试问题,请尝试回显路径的块,例如:
echo $_FILES["pic"]["tmp_name"]
,看看你可能缺少什么。
详细了解move_uploaded_file()
功能,并检查safe_mode
设置:
注意:move_uploaded_file()既是安全模式,也是open_basedir。 但是,限制仅限于目标路径 允许移动文件名可能与之冲突的上传文件 这样的限制。 move_uploaded_file()确保了这一点的安全性 只允许通过PHP上传的文件进行操作 移动。
编辑 php.ini 文件后,不要忘记重新启动apache
。
另外仔细检查:
open_basedir
并确保upload_tmp_dir
在此路径中。尝试使用c:/
作为分隔符明确地将open_basedir
设置在:
内(就像我上面的示例所示)
ini_set('upload_tmp_dir','your/path/here/');
中的 upload_tmp_dir
php.ini