PHP require_once坚持在一个单独的过程中

时间:2018-10-13 13:14:10

标签: php

编辑:我需要提供更多详细信息,不确定发生了什么。

我似乎遇到了一个问题,即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);

这将执行以下操作:

  1. 包括文件
  2. 运行一个子进程,该进程还将尝试包含该文件。

文件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?

2 个答案:

答案 0 :(得分:0)

来自docs

  

成功包含,除非被包含的文件覆盖,否则返回1

输出中的1并不表示它先前已经被包含,只是表明它已被成功包含。

无论返回值如何,您都可以在任何地方使用require_once并相信它会按预期工作。

答案 1 :(得分:0)

请注意,require_once(例如,require,include ...)是构造,而不是PHP函数。因此,返回的1可能意味着好,包括文件。不知道为什么没有发现回声I was included