动态更改PHP变量(在执行时)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态更改PHP变量(在执行时)相关的知识,希望对你有一定的参考价值。

我目前在我的机器上启动了一个永远运行的php脚本。

我在该脚本的源代码中做了一些更改:我已经在全局范围内更改了一个变量的值。

现在,如果我想要应用这些更改,我可以停止并重新启动脚本,但之后我将放弃此脚本已经完成的所有计算。所以我想在不重新启动PHP解释器实例的情况下应用我所做的代码更改。

我能这样做吗?

我想到的可能是在现有的“php.exe”进程中插入XDebug,并尝试从那里改变变量,但我不知道如何。

另一个想法是使用可以改变PHP解释器内存或符号表的软件,但我不知道任何类似的工具。

我在没有debuger的情况下启动了这个脚本,但是我知道Java在使用debuger时,可以选择“在不重新启动Java实例的情况下应用代码更改”。 PHP解释器有类似的东西吗?


您可以尝试自己的样本。使用以下代码创建PHP文件'myfile.php':

<?php
if (ob_get_status()) {
    ob_end_clean();
}
$variable = 'Hello';
$i = mt_rand(0, 1000);
while (true) {
    $i++;
    echo $variable . ' ' . $i . PHP_EOL;
    sleep(1);
}

在命令行中运行它:php -f myfile.php

你现在处于我目前的状态:脚本是永远运行的,它包含一个动态变量$i(我实际上无法知道我的真实世界中的当前值,因为真实世界的情况没有输出)。

现在的挑战是将$variable的值从'Hello'更改为'World'(表示我在现实世界中更改的变量值),但不会丢失$i的当前值(表示当前完成的计算)。

请记住,在第一次运行脚本之前,您无法更改'myfile.php'代码:您必须使用与我显示的完全相同的代码运行'myfile.php',然后启动挑战。

答案

除了调用尝试检查条件的函数之外,不在当前文件中:

$variable = function() {
    return date('l') == 'Saturday' ? ':)' : ':(';
};
while (true) {
    echo $variable() . PHP_EOL;
    sleep(1);
}
另一答案

你不能,你需要从某个地方读取新的价值!您可以使用这样的数据库或临时文件:

file1.php

<?php

file_put_contents('var.tmp','hello');

while(true) {
    $var = file_get_contents('var.tmp');
    print $var . PHP_EOL;
    sleep(1);
}

file2.php

<?php

while(true){
    $var = readline('$var > ');
    file_put_content('var.tmp',$var);
}

打开2个终端,在第一个:

php -f file1.php

第二个

php -f file2.php

现在您可以将值写入第二个终端窗口,它将在第一个终端窗口中更改。

以上是关于动态更改PHP变量(在执行时)的主要内容,如果未能解决你的问题,请参考以下文章

方向更改时不可见的片段

如何在每次加载页面时更改 php 变量的值? [复制]

php 在Yoast SEO中更改或删除OpenGraph输出的代码片段。此代码中有多个代码段。

是否可以动态编译和执行 C# 代码片段?

Android片段中的动态背景

Android在片段中动态更改部分布局的最佳方法