require_once和include_once无法正确解析文件

时间:2010-07-04 15:30:57

标签: php windows codeigniter symlink

我遇到PHP的require_once,require,include_once以及包含无法正确解析文件的函数的问题。我在使用Apache 2.2.11的Windows Vista上运行PHP 5.3.1。

这些是我遇到的问题:

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

返回TRUE

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

返回TRUE

$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?如果我尝试将文件包含在我的设置中的任何其他位置,则可以正常加载。

1 个答案:

答案 0 :(得分:7)

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调用,并在{1}}失败时进行调用:

die()