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

时间:2013-07-27 21:48:02

标签: php

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

在理想的世界中,我想最好的方法是在文件的顶部放置一个include,然后将所有代码块重写为正确的PHP语法,因为它们被传递给解释器,但是我不知道可以用这种方式传递代码块。

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

有没有一种简单的方法来构建这个?

2 个答案:

答案 0 :(得分:3)

有一种方法可以使用Stream Wrappers执行此操作。

有了这个,您基本上可以阅读并重新编写PHP 之前读取的任何代码。使用fopen()fwrite()includerequirefile_get_contents()等。

因此,在您的情况下,您可以侦听require(_once)include(_once)的任何文件并使用您喜欢的代码。你将把整个代码放在一个变量中,然后你就可以用正则表达式和字符串来完成各种替换。

唯一的缺点是,index.php无法使用此方法,因为任何include都抓住 require。但是stream wrapper可以捕获其中包含的任何其他代码文件。

这是一篇关于使用该方法的插件系统的文章。也许它可以提供任何帮助。

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

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

答案 1 :(得分:0)

我不认为你的包含想法会如所描述的那样有效。由于代码将丢失大括号,它可能无法通过普通的PHP解析器而不会抛出500错误。因此,您要包含的文件永远不会完成其工作。

相反的方法可能有效。编写一个解析器脚本,让它读取并执行你的“空白”PHP文件。

网址可能如下所示: mydomain.com/my-parsing-script.php?file=script/to/parse.php

然后你编辑.htaccess来重写你的所有网址,使这些东西对用户不可见。

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