【问题标题】:PHP error when using simple file upload script: failed to open stream: No such file or directory使用简单文件上传脚本时出现 PHP 错误:无法打开流:没有这样的文件或目录
【发布时间】:2013-04-24 08:54:59
【问题描述】:

我是 PHP n00b,但按照这个优秀的 tut 遵循了说明:

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 中的某些设置以使其正常工作?

非常感谢。

【问题讨论】:

  • 你能显示使用的PHP代码吗
  • 如果您对 Tizag 教程有疑问,请联系 Tizag 寻求支持。是的,只要你得到错误,你就会错过一些东西。要找出原因,请阅读错误消息并尝试理解它们。
  • 在传递文件路径时记住区分大小写,容易忘记mac不区分大小写,而cent os会区分大小写。
  • 经常会遇到这个错误,要快速解决问题,请按照以下步骤操作:stackoverflow.com/a/36577021/2873507

标签: php apache centos


【解决方案1】:

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

要么你需要修复代码上传到正确的路径,要么你需要在test目录下创建一个uploads目录

【讨论】:

  • 谢谢,你就在这里,尽管问题比这更深,因为它仍然无法通过 curl 工作,而这正是我实际尝试的。在故障排除期间,我将东西移到了临时目录中。我可能需要发布一个新问题以避免混淆。
  • 现在有一个针对此常见错误的故障排除清单:stackoverflow.com/a/36577021/2873507
【解决方案2】:

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

允许 Apache HTTPD 访问该文件夹(或将临时上传路径更改为 SELinux 配置允许 Apache HTTPD 访问的文件夹)。还要审核 SELinux 日志以找出究竟是什么设置阻止了对目录的访问。

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

【讨论】:

    【解决方案3】:

    希望这能解决您的问题

    首先检查文件夹是否存在,如果不存在,则如下创建它

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

    【讨论】:

      【解决方案4】:

      我知道这是一篇旧帖子,但与许多人一样,人们对这个问题提出的建议毫无用处。但是,我记得几年前我遇到过其他问题,结果发现它也影响了这种情况。

      问题出在 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/

      如果所有其他方法都对您不利,请尝试此解决方案。

      祝你好运!

      【讨论】:

        猜你喜欢
        • 2018-08-10
        • 1970-01-01
        • 2017-09-18
        • 2015-11-13
        • 2016-08-03
        相关资源
        最近更新 更多