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?如果我尝试将该文件包含在我的设置中的其他任何位置,它会正常加载。
最佳答案
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 fatal error 告诉您文件不存在(而不是您的自定义 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 - require_once 和 include_once 不能正确解析文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3175178/