【问题标题】:Setting include path in PHP intermittently fails在 PHP 中设置包含路径间歇性失败
【发布时间】:2008-09-03 14:47:35
【问题描述】:

我都试过了:

ini_set('include_path', '.:/usr/share/php5:/usr/share/php5/PEAR:lib:app/classes');

还有:

php_value include_path ".:/usr/share/php5:/usr/share/php5/PEAR:lib:app/classes"

在 .htaccess 文件中。

这两种方法实际上确实有效,但只是间歇性的。也就是说,它们可以正常处理大约 37 个页面请求,然后失败大约 42 个页面请求,从而导致 require() 调用导致致命错误,从而有效地使网站崩溃。

我什至不知道从哪里开始尝试找出发生了什么!


@cnote

看起来您在包含路径中复制了当前目录。尝试从字符串中删除“.:”之一。

原来的脚本版本是

ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . 'lib' . PATH_SEPARATOR . 'app' . DIRECTORY_SEPARATOR . 'classes');

因此 .:.: 来自现有路径:

ini_get('include_path')

我还是尝试删除它,但问题仍然存在。

【问题讨论】:

  • 您能否发布您在失败的请求中遇到的确切错误?您确定脚本没有尝试包含曾经位于同一目录但移动到子目录的内容,反之亦然?

标签: php include-path


【解决方案1】:

你试过set_include_path()吗?作为一个好处,这会在失败时返回 false,让您至少能够捕捉到事件并生成一些有意义的调试数据。 此外,您应该使用常量 PATH_SEPARATOR,因为它在 windows / *nix 之间有所不同。

作为一个具体的例子:

set_include_path('.' . PATH_SEPARATOR . './app/lib' . PATH_SEPARATOR . get_include_path());

(最后的 get_include_path() 意味着无论您的 ini / htaccess 路径设置如何,都将保留)

【讨论】:

    【解决方案2】:

    原来这个问题与 5.2.5 中的一个 PHP 错误有关

    为 include_path 设置“admin_flag”会导致某些请求中的包含路径为空,并且 Plesk 在默认配置中为某些内容设置了 admin_flag。 PHP 的更新解决了这个问题。

    http://bugs.php.net/bug.php?id=43677

    【讨论】:

      【解决方案3】:

      看起来您在包含路径中复制了当前目录。尝试从字符串中删除“.:”之一。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-10-04
        • 2017-05-02
        • 2019-04-18
        • 2011-10-21
        • 1970-01-01
        • 1970-01-01
        • 2013-03-05
        相关资源
        最近更新 更多