首页 > 解决方案 > PHP require_once 持续存在于一个单独的进程中

问题描述

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

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

标签: php

解决方案


文档

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

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

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


推荐阅读