繁体   English   中英

如何在将PHP代码块传递给解释器之前重写它们?

[英]How do I rewrite PHP code blocks before they are passed to the interpreter?

我想要做的是为PHP编写一个解析器,该解析器解释空格而不是括号。 我可以重写位并输出PHP,但是我不确定如何最好地将其集成到应用程序中。

在理想的世界中,我想最好的办法是在文件的顶部放置一个include,这会在将其后面的所有代码块传递给解释器时,将它们后面的所有代码块重新编写为适当的PHP语法,但是我不是请注意,可以以这种方式传递代码块。

另一种选择是将其编写为服务器扩展,但是我不希望这样做,因为它使它难以访问。

有没有一种简单的方法可以构造这个?

使用Stream Wrappers可以做到这一点。

这样,您基本上可以实际解释之前读取和重新编写PHP读取的任何代码。 使用fopen()fwrite()includerequirefile_get_contents()等。

因此,在您的情况下,您可以侦听require(_once)include(_once)任何文件并使用所需的代码。 您将获得完整的代码在一个变量中,并可以使用regex简单地对字符串进行各种替换,而不能进行其他替换。

唯一的缺点是,由于没有includerequire捕获,因此index.php无法使用此方法。 但是stream wrapper可以捕获其中包含的任何其他代码文件。

这是有关使用该方法的插件系统的文章。 也许有什么帮助。

http://phpmyweb.net/2012/04/26/write-an-awesome-plugin-system-in-php/

在此您还将找到带有插件代码源的guthub页面的链接。 在这里,您基本上可以看到如何设置Stream Wrapper类。 从那里开始,您可以编写自己的代码,因为您不必像插件那样拦截任何方法调用等。

我认为您的包含想法不会像上述那样起作用。 由于代码将缺少花括号,因此它可能不会通过普通的PHP解析器而不会抛出500错误。 因此,您要包含的文件将永远无法工作。

相反的方法可能会起作用。 编写一个解析器脚本,并使其读取并执行您的“空白” PHP文件。

URL可能看起来像这样: mydomain.com/my-parsing-script.php?file=script/to/parse.php

然后,您将编辑.htaccess以重写所有URL,以使该内容对用户不可见。

解析脚本只需要打开“空白”文件,并在将脚本传递给eval()之前做一些正则表达式魔术即可;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM