我遇到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?如果我尝试将文件包含在我的设置中的任何其他位置,则可以正常加载。
答案 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
在加载文件失败时不会返回false
。 require_once()
无论如何都会终止脚本的执行。如果您负责在生产环境中切换错误报告,则可能很容易发现PHP致命错误,告诉您该文件不存在(而不是您的自定义die()
)。
如果您需要优雅地退出脚本,我会在语句之前进行file_exists
调用,并在{1}}失败时进行调用:
die()