PHP仅从同一目录上传图像

时间:2014-03-12 08:41:24

标签: php file-upload path directory

我有一个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;工作,好像找不到文件一样?

1 个答案:

答案 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'] . '/');

编辑1:

如果未设置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上传的文件进行操作   移动。

编辑2:

编辑 php.ini 文件后,不要忘记重新启动apache

另外仔细检查:

  • open_basedir并确保upload_tmp_dir在此路径中。尝试使用c:/作为分隔符明确地将open_basedir设置在:内(就像我上面的示例所示)

  • php.ini ini_set('upload_tmp_dir','your/path/here/');

    中的
  • upload_tmp_dir php.ini

  • 中的
  • upload_max_filesize