我想做的是为 PHP 编写一个解析器,它解释空格而不是括号。我可以重写位并输出 PHP,但我不确定如何最好地将它集成到应用程序中。
在一个理想的世界中,我想最好的办法是在文件顶部放置一个包含,这反过来又将所有跟随它的代码块重写为正确的 PHP 语法,因为它们被传递给解释器,但我不是知道代码块可以通过这种方式传递。
另一种选择是将其编写为服务器扩展,但我不希望这样做,因为它使其难以访问。
有没有一种简单的方法来构建这个?
我想做的是为 PHP 编写一个解析器,它解释空格而不是括号。我可以重写位并输出 PHP,但我不确定如何最好地将它集成到应用程序中。
在一个理想的世界中,我想最好的办法是在文件顶部放置一个包含,这反过来又将所有跟随它的代码块重写为正确的 PHP 语法,因为它们被传递给解释器,但我不是知道代码块可以通过这种方式传递。
另一种选择是将其编写为服务器扩展,但我不希望这样做,因为它使其难以访问。
有没有一种简单的方法来构建这个?
有一种方法可以使用Stream Wrappers来做到这一点。
有了它,您基本上可以在实际解释之前读取和重写 PHP 读取的任何代码。与fopen()
, fwrite()
, include
,等require
_file_get_contents()
因此,在您的情况下,您可以侦听任何文件,require(_once)
或者include(_once)
使用您喜欢的代码。您将在一个变量中获得整个代码,并且您可以使用正则表达式简单地在字符串中进行各种替换,而不是什么。
唯一的缺点是,你index.php
不能使用这个方法,因为它没有被任何include
or捕获require
。但是从那里包含的任何其他代码文件都可以被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() 之前执行一些正则表达式魔术;