如何替换php中的函数?

如何替换php中的函数?,php,function,replace,Php,Function,Replace,我有一个包含以下内容的PHP文件: abc.php 我想将abc.php中的“echo”函数替换为“$b.=”,替换后的结果是: $b .= 'echo echo echo'; $b .= $x.'echo echo echo'.str_replace($x, 'abc', $y); $b .= number_format(1234567); echo "echo echo echo"; 我该怎么做?请帮帮我,非常感谢 注意:我通过文件内容(结果是一个字符串)读取abc.php。之后,我将“e

我有一个包含以下内容的PHP文件: abc.php

我想将abc.php中的“echo”函数替换为“$b.=”,替换后的结果是:

$b .= 'echo echo echo';
$b .= $x.'echo echo echo'.str_replace($x, 'abc', $y);
$b .= number_format(1234567); echo "echo echo echo";
我该怎么做?请帮帮我,非常感谢


注意:我通过文件内容(结果是一个字符串)读取abc.php。之后,我将“echo”替换为“b.=”,然后使用“eval”执行。

如果无法修改代码,可以开始输出缓冲并将输出保存在变量中:

ob_start();
include('abc.php');
$b = ob_get_clean();

为什么这种情况不断发生?人们有一个问题a,然后提出了一个解决方案B,这个解决方案非常困难或奇怪,或者没有遵循任何标准实践,这就产生了问题C。然后他们只要求解决问题C

如果abc.php作为php执行,则使用。

解决问题 如果通过
include
require
访问此文件(
abc.php
),则可以使用输出缓冲。看

有关
ob\u get\u clean()
的更多信息,请参阅

如果将abc.php作为纯文本拉入进行预处理 或者,如果您使用的是
file\u get\u contents()
而不是
require
include
来访问
abc.php
,则可以使用简单的字符串替换:

$file_path = '/my/file/path/abc.php';
$file_contents_string = file_get_contents($file_path);
$replaced_string = str_replace('echo ', '$b .= ', $file_contents_string);
file_put_contents($file_path);
此替换将替换
echo
的所有实例,因此它非常贪婪,最终可能会替换比您最初期望的更多的实例。这可以通过使用
preg_replace()
substr()
strpos()
的组合来缓解。请注意
echo()实际上不是一个函数;至于用另一个函数动态替换一个函数,这在PHP中通常是不可能的(您会得到一个
无法重新声明函数的错误)

至于你可能没有问的问题——“我怎样才能把它变成一个变量,这样它就不会被直接反映出来”(不,思考不算数):


请参阅输出缓冲函数-例如,
ob\u get\u clean()
-

您是否有意排除最后一个
echo
,第二个语句,最后一行?如果您这样做了(我强烈建议您不要这样做),您可以在源代码上使用
#^(echo)#
$b.=
-基于您想要输出缓冲的可能性,我倾向于这里的任何答案。我会手动执行,以确保不会出错。但是,根据你正在做的事情,你可以考虑输出缓冲。为什么不编辑PHP文件?你想<代码>回音< /代码>,还是想在文件中找到和替换<代码>回声< <代码>文件中的$b=?/COD>?这实际上是你想要做的,还是这个?这个替换是危险的,好像文本包含“回音”一样。(如示例中所示,它也将被替换);echo还支持许多操作数:echo'a'、'b'、'c';如果用赋值替换它,这将是无效的语法。是的,echo可以处理多个参数,但这很少做,在问题示例代码中根本没有提到。事实上,我为我的团队编写的编码风格指南禁止使用
echo
和使用string串联,以避免在重构过程中
echo
很容易成为分配给变量的字符串的问题。当然,你不应该,但是-无论如何都不会使用
echo
。@Bracketworks:PECL包
runkit
:版本0.9,状态测试版,最新版本2006-06-06?我……犹豫……是否使用它这一点。哦,我同意,不管它是怎么存在的。在这一点上它已经成功了,不是吗?@Bracketworks:它应该被下一个版本的classkit所取代(就像PHP6被认为的那样……没关系,我们不要去那里),但那是更早就被放弃了。看,我还以为它是
classkit
。还有——PHP6会很棒的!你认为它什么时候会出来?下个月?它是阿尔法版本吗?有二进制文件吗?我买了所有的书!Herp!Derp!Thbbb!-哦,5.4现在就可以了。
$file_path = '/my/file/path/abc.php';
ob_start();
require $file_path;
$b .= ob_get_clean();
$file_path = '/my/file/path/abc.php';
$file_contents_string = file_get_contents($file_path);
$replaced_string = str_replace('echo ', '$b .= ', $file_contents_string);
file_put_contents($file_path);