【问题标题】:require_once and include_once not resolving files correctlyrequire_once 和 include_once 无法正确解析文件
【发布时间】:2011-03-11 15:36:56
【问题描述】:

我遇到了 PHP 的 require_once、require、include_once 和 include 函数无法正确解析文件的问题。我正在使用 Apache 2.2.11 在 Windows Vista 上运行 PHP 5.3.1。

这些是我遇到的问题:

file_exists('C:/wamp/www/park_factor_network/system/application/shared/config/language.php')

返回真

is_readable('system/application/shared/config/language.php')

返回真

$fp = fopen('C:/wamp/www/park_factor_network/system/application/shared/config/language.php','r');
$contents = fread($fp, filesize('C:/wamp/www/park_factor_network/system/application/shared/config/language.php'));

返回一个有效的文件资源并将其存储到 $contents 中

但是:

require_once('system/application/shared/config/database.php') or die("Cannot Include Language Config");
require_once('C:/wamp/www/park_factor_network/system/application/shared/config/language.php') or die("Cannot Include Language Config");

返回:

Fatal error: require_once() [function.require]: Failed opening required '1' (include_path='.;C:\php5\pear') in C:\wamp\www\park_factor_network\system\application\shared\hooks\select_language.php on line 25

C:\wamp\www\park_factor_network\system\application\news_site\hooks 是 C:\wamp\www\park_factor_network\system\application\shared\hooks 的目录连接

我仅在从框架中的某个位置访问此文件时遇到此问题,但是由于这是直接包含或要求,它不应该受此影响,而且只有 PHP?如果我尝试将文件包含在我的设置中的其他任何位置,它加载正常。

【问题讨论】:

    标签: php windows codeigniter symlink


    【解决方案1】:

    require_once 是一种语言结构。它不是一个函数,也没有返回值。

    文件名参数周围的括号是可选的。这似乎意味着在这一行:

    require_once('system/application/shared/config/database.php') 
                 or die("Cannot Include Language Config");
    

    整个表达式

    ('system/application/shared/config/database.php') 
     or die("Cannot Include Language Config");
    

    被评估(返回1)并用作文件名参数。 1,显然不存在。

    你所做的并没有真正的意义,因为当加载文件失败时include 不会返回falserequire_once() 无论如何都会终止脚本的执行。如果您在生产环境中处理错误报告的切换,您可以轻松地忍受 PHP 致命错误,告诉您文件不存在(而不是您的自定义 die())。

    如果您需要优雅地退出脚本,我会在语句之前调用file_exists,如果失败则调用die()

    $file = 'system/application/shared/config/database.php';
    
    if ((!is_file($file)) or(!is_readable($file)))
       die("Cannot Include Language Config");
    
    require_once('system/application/shared/config/database.php');
    

    【讨论】:

    • 非常感谢您的明确答复。现在,我们中的几个人在 php 怪胎 IRC 试图让我们的头脑围绕文件解析而变得完全有意义,这与它根本无关。
    • 最好使用is_fileis_readable 而不是file_exists,因为file_exists 对目录也返回true,并且(常规)文件也应该是可读的。
    • 对不起,我的解释应该更清楚一点,我只是使用 file_exists 和 is_readable 来证明文件在那里。
    • @Ian 但这是事先检查的正确方法,比file_exists() 更好。 (但如果你对致命错误没问题,你就不需要它了。)
    猜你喜欢
    • 2012-07-08
    • 1970-01-01
    • 2019-03-01
    • 2017-07-19
    • 2018-05-17
    • 2021-08-13
    • 2018-03-01
    • 2011-08-06
    • 2011-12-08
    相关资源
    最近更新 更多