【问题标题】:php include_once failing despite existence of file and 777 permissions尽管存在文件和 777 权限,但 php include_once 失败
【发布时间】:2010-09-27 21:23:10
【问题描述】:

php include_once 对我来说失败了“无法打开流:没有这样的文件或目录”消息,尽管它抱怨的文件存在,并且 chmod'ing 到 777 以尝试缓解问题.

警告:include_once() [function.include]:无法打开“../i_utility/WCHelper.php”以包含(include_path='.:/usr/share/pear:/var/www/html /we_/') 在第 6 行的 /var/www/i_/php/w_corner/modules/i_ers/i_ers.module 中。

从命令行我可以 cd 到包含源代码文件的目录 (/var/www/i_/php/w_corner/modules/i_ers),我可以 ls php 抱怨“没有这样”的文件: ../i_utility/WCHelper.php

确实,我可以在向 apache 用户 su'ing 后执行上述操作,甚至可以触摸文件并查看其最后修改的时间戳发生了变化:

-bash-3.2$ whoami
apache

-bash-3.2$ cd /var/www/i_/php/w_corner/modules/i_ers
-bash-3.2$ ls -l ../i_utility/WCHelper.php
-rwxrwxrwx 1 root root 32112 Sep 14 09:49 ../i_utility/WCHelper.php

-bash-3.2$ touch ../i_utility/WCHelper.php
-bash-3.2$ ls -l ../i_utility/WCHelper.php
-rwxrwxrwx 1 root root 32112 Sep 27 17:08 ../i_utility/WCHelper.php

鉴于以上所有情况,在这些情况下,是什么导致 PHP 的 include_once 失败?

【问题讨论】:

  • 文件的模式 (777) 在这里不起作用,因为权限问题通常会导致权限错误,而不是“没有这样的文件或目录”错误。
  • php include_once not working 的可能重复项
  • @BrentWashburne 我的问题怎么可能与我的问题之后重复?
  • 公平的问题,但它们是否相互重复?如果是这样,哪一个有更好的答案?我认为另一个是这样,这就是我以这种方式投票的原因。
  • @BrentWashburne 另一个更好,因为它有 12 个赞成投票者而不是 4 个?就我而言,下面的最佳答案在解释方面做得更好。无论如何都没关系,人们需要相当长的时间来重新审视这些问题,而且我不会失去任何代表

标签: php include


【解决方案1】:

PHP 的包含路径有点违反直觉,尤其是当您为其提供相对路径时。您希望路径是相对于当前文件的(就像 CSS 一样),但 PHP 将它们解释为相对于当前工作目录,这通常是入口点 PHP 文件所在的目录(例如 @987654321 @)。

最简单的解决方法是使用dirname(__FILE__),它始终映射到当前脚本文件的绝对位置。

【讨论】:

  • 或 __DIR__ 。 This is equivalent to dirname(__FILE__)
【解决方案2】:

也许您的脚本在错误的目录中运行?
在失败的包含之前放置一个echo '<pre>'.htmlentities(getcwd()).'</pre>';,看看它是否显示正确的路径。

【讨论】:

  • 你还需要有'.'在 include_path 中才能正常工作。
  • 有,从问题中显示的错误信息中可以看出。
【解决方案3】:

为什么不使用文件的完整路径?例如。

include_once("/var/www/i_/php/w_corner/modules/i_utility/WCHelper.php");

【讨论】:

    猜你喜欢
    • 2011-07-22
    • 1970-01-01
    • 2014-01-27
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多