使用简单文件上传脚本时出现PHP错误:无法打开流:没有此类文件或目录

时间:2013-04-30 12:25:02

标签: php apache centos

我是一个PHP n00b但按照这个优秀的啧啧遵循说明:

PHP Tizag file upload tutorial

然而,虽然这在我运行默认内置Apache的Mac(OSX 10.8)上运行良好,但它失败并且无法在CentOS 6机箱上运行。浏览Apache日志,我得到了这个:

failed to open stream: No such file or directory

/ var / www / html 根目录下的“uploads”文件夹中的权限已设置为 777 (在Mac上它/ Library /网络服务器/文件)

[Tue Apr 30 13:05:11 2013] [error] [client (My IP Address)] PHP Warning:  move_uploaded_file(uploads/Today notes.txt): failed to open stream: No such file or directory in /var/www/html/test/uploads3.php on line 8, referer: ht*p://serverip.myserver.com/test/form4.html

[Tue Apr 30 13:05:11 2013] [error] [client (my IP address)] PHP Warning:  move_uploaded_file(): Unable to move '/tmp/phpc8AGo8' to 'uploads/Today notes.txt' in /var/www/html/test/uploads3.php on line 8, referer: ht*p://serverip.myserver.com/test/form4.html

我是否遗漏了PHP或Apache中的某些设置以使其正常工作?

非常感谢提前。

4 个答案:

答案 0 :(得分:1)

根据您的问题,uploads文件夹位于/var/www/html,但是正在尝试上传到不存在的/var/www/html/test/uploads的错误消息中

您需要修复代码以上传到正确的路径,或者您需要在测试目录中创建uploads目录

答案 1 :(得分:0)

请参阅操作系统的文档。 CentOS 6具有额外的安全配置,可能会阻止PHP访问tmp文件夹。

允许该文件夹访问Apache HTTPD(或将临时上载路径更改为允许Apache HTTPD通过SELinux配置访问的文件夹)。还要审核SELinux日志,找出确切阻止访问目录的设置。

E.g。如果您没有将PHP作为Apache模块运行,则可能需要允许其他进程(例如PHP(F)CGI二进制文件)受保护的文件系统资源。

答案 2 :(得分:0)

希望这能解决您的问题

首先检查文件夹是否存在,如果没有将其创建为下面的文件

if(!is_dir('uploads/Today')){
   mkdir("uploads/Today", 0755);
}

答案 3 :(得分:0)

我知道这是一篇过时的文章,但是像许多人一样,人们对这个问题没有任何建议。但是,我想起了几年前我遇到的一个问题,结果最终也影响了这种情况。

问题是SELinux,您必须对其进行配置以允许读/写: Centos 7 / Apache / PHP - mkdir(): Permission denied

解决方案:

chcon -R -t httpd_sys_content_t / var / www /

chcon -R -t httpd_sys_content_rw_t / var / www / html /

如果其他所有方法都无法解决,请尝试此解决方案。

祝你好运!