lamp使用php处理上传文件,调用move_uploaded_file函数遇到目录写权限问题及解决过程

来源:互联网 发布:360浏览器mac官方下载 编辑:程序博客网 时间:2024/05/22 00:27
问题:lamp使用php处理上传文件,调用move_uploaded_file函数,遇到如下问题:[function.move-uploaded-file]: failed to open stream: Permission denied in ERROR


分析解决:

很明显是权限问题,目录没有写权限,但是在自己的开发环境上面都好好的,为什么一切换环境就出问题呢。

首先解决找出谁来写,找出apache配置httpd.conf,user和group 开发环境设置为user1和users,move_uploaded_file函数要写入的文件的目录权限是drw-r--r--,用户是user1,所属用户组是users, 因此php对其有写权限。  另外一个环境,apache配置httpd.conf中,user和group都是nobody,那么很明显对这个目录是没有写权限的,也就是为什么写文件失败。

找出谁来写以后,就知道它的权限范围了。有两个解决方案,一个是修改apache配置,把user和group修改为user1和users;一个是重新找一个有权限的目录来给他写。第一个方案比较麻烦,涉及到修改apache配置,在生产环境中还是比较麻烦的,还得考虑各种安全性问题,为了这么个问题大动干戈没必要。第二个方案相对简单,既然php上传的文件默认存放在/tmp/目录,那么除非必要,否则还是放到这个目录下面去就ok了。