Php 是否有方法覆盖来自不同文件的定义?

Php 是否有方法覆盖来自不同文件的定义?,php,wordpress,require,Php,Wordpress,Require,我正在尝试创建一个界面,用于更新托管20多个WordPress站点的服务器上WordPress插件的所有实例。除了我有一个循环外,我的一切都正常工作: require_once($path.'/wp-load.php'); require_once($path.'/wp-admin/includes/admin.php'); require_once($path.'/wp-admin/includes/class-wp-upgrader.php'); 其中,$path等于网站目录,$path随

我正在尝试创建一个界面,用于更新托管20多个WordPress站点的服务器上WordPress插件的所有实例。除了我有一个循环外,我的一切都正常工作:

require_once($path.'/wp-load.php');
require_once($path.'/wp-admin/includes/admin.php');
require_once($path.'/wp-admin/includes/class-wp-upgrader.php');
其中,$path等于网站目录,$path随我的循环的每次迭代而变化

我之所以需要这样的文件,是因为wp-load.php包括一个名为wp-config.php的文件,该文件定义了SQL数据库之类的内容,每个网站的SQL数据库都不同

TL&DR并说明我的实际问题:

有没有什么方法可以让我做像下面这样的代码

require_once("dir1/a.php"); // define("VAR","dir1");
echo VAR; // displays "dir1"
unrequire_once("dir1/a.php");

require_once("dir2/a.php"); // define("VAR","dir2");
echo VAR; // displays "dir2"

既然你提到这是一个内部工具,你可以考虑使用RunKIT,以便在运行时删除常数,允许它在以后重新定义:

恐怕不会——即使可以,您也不会得到您想要的行为,因为常量define只能创建一次,并且在执行的其余部分也是如此。它们不能删除,也不能在以后更改


不幸的是,您将不得不重新构建脚本,例如使用变量而不是常量。

是:完成这个过程。您可以执行以下操作:

foreach ($pathlist as $path) {
    $pid = pcntl_fork();
    if(!$pid) {
        require_once($path.'/wp-load.php');
        require_once($path.'/wp-admin/includes/admin.php');
        break;
    }
}
这将为列表中的每个$path创建脚本副本,并解决require_once问题


如果是子进程,则需要中断循环,因为您只希望子进程为其单独的$path设置运行,而不是继续循环本身

我想,问题本身并不存在,因为路径不同。你需要取消定义。@kirilloid现在我看到了,你完全正确。让我来解决我的问题。恐怕没有办法。在一个脚本中。您可以通过exec或其他方式更改脚本,使每个站点运行一个php脚本。@kirilloid的效率并不十分重要,因为这将是一个严格的内部工具,所以如果必须,我会使用这种方法。我能想到的唯一替代方法是动态名称间隔,这在PHP中似乎还不可能实现。您忘记了链接中的第二个常量t。那是一个有趣的图书馆。如果没有更好的选择,我会调查的。