编辑:我需要提供更多详细信息,不确定发生了什么。
我似乎遇到了一个问题,即PHP在单独的过程中将require_once视为外部过程中require的重复。
假设我有要在CLI上运行的文件:
<?php
require_once 'includeme.php';
$command = "php runme.php";
$handle = popen($command, 'r');
$read = fread($handle, 2096);
$exit = pclose($handle);
print_r($read);
这将执行以下操作:
文件includeme.php是这样的:
<?php
print "I was included";
包含它只会使它返回该字符串。
runme.php文件是这样的:
<?php
$result = require_once 'includeme.php';
print $result;
运行主脚本会产生以下输出:
I was included
1
似乎正在发生的事情是runme.php脚本的require_once语句得到了1,这是require_once返回的结果,如果脚本已经被包含。
但是runme.php是一个单独的过程。 PHP如何才能认为它已经包含includeme.php?
答案 0 :(得分:0)
来自docs:
成功包含,除非被包含的文件覆盖,否则返回1
输出中的1
并不表示它先前已经被包含,只是表明它已被成功包含。
无论返回值如何,您都可以在任何地方使用require_once
并相信它会按预期工作。
答案 1 :(得分:0)
请注意,require_once
(例如,require,include ...)是构造,而不是PHP函数。因此,返回的1
可能意味着好,包括文件。不知道为什么没有发现回声I was included
。