PHP(或Python)将所有包含的文件合并为一个大文件(递归?)
我有一个PHP脚本,它使用了包含(includes)。这些被包含的文件里也有自己的包含。所有文件都在同一个文件夹里,放在一个网络服务器上。我想要一个单独的PHP脚本,把这些文件合并成一个大的PHP文件。我会给这个新脚本提供一个起始文件,比如上面的index.php。
---------------------
index.php
<?php
*other code1*
include 'header.php';
*other code2*
?>
----------------------
header.php
<?php
*other code3*
include 'subheader.php';
*other code4*
?>
----------------------
subheader.php
<?php
*other code5*
?>
The result of the script begining from the index.php would be:
merged_file.php
<?php
*other code1*
*other code3*
*other code5*
*other code4*
*other code2*
?>
也就是说,所有的代码都会放在一个大的文件里,并且执行顺序和之前完全一样。
基本上,它会遍历这个脚本,每当找到一个包含时,就会把这个包含替换成相关的PHP代码,来自那个被包含的文件。然后,它还会继续替换那个文件里的任何包含,直到所有的代码都合并成一个文件(可能需要用到递归函数?)。
注意:我希望文件中返回的是未经解析的PHP代码。
提前谢谢你。
编辑:我知道通常把代码模块化是更好的做法,但这不是我想问的。我想问的是,我该如何实现这个?而不是模块化和非模块化代码的优缺点。
2 个回答
我觉得这个可以解决你的问题,具体可以查看phpcompiler.org
phc对PHP的include功能有初步支持。开启这个功能后,包含的内容会在抽象语法树(AST)中替代原来的include语句。这样,被包含的函数、类和接口就会成为文件的顶层内容。如果phc无法处理这个include语句(比如找不到文件),它会发出一个警告,但原来的include语句会保留在那儿。
我之前的评论
我觉得你可能把“包含”(include)和“递归”(recursion)搞混了?你是想把所有代码放到一个文件里,还是只想包含一次?我建议你把代码分开,使用包含,这样随着代码的增加,管理起来会更简单(这样你就不会被一个巨大的单文件应用困住)。
可能的解决办法
我觉得你问的是 “我怎么才能只包含文件一次?”
我建议你更新包含的文件,使用 include_once() 这个函数。这样在你合并代码的时候,就不会重复包含那些文件了。
这会让你在整理代码时有一个可用的示例,并且能更好地清理代码。
更新的回答
好的,根据反馈,如果你想把所有文件合并,你需要经过一个过程,首先要有一个主要的 PHP 脚本(或者其他语言),这个脚本会:
- 递归地读取每一个 *.php 文件
- 当遇到
include
或require
时,它应该打开那个文件 - 最终将这些文件作为文本解析,然后输出成一个巨大的文本文件。