PHP(或Python)将所有包含的文件合并为一个大文件(递归?)

2 投票
2 回答
976 浏览
提问于 2025-04-17 12:02

我有一个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 个回答

3

我觉得这个可以解决你的问题,具体可以查看phpcompiler.org

phc对PHP的include功能有初步支持。开启这个功能后,包含的内容会在抽象语法树(AST)中替代原来的include语句。这样,被包含的函数、类和接口就会成为文件的顶层内容。如果phc无法处理这个include语句(比如找不到文件),它会发出一个警告,但原来的include语句会保留在那儿。

3

我之前的评论

我觉得你可能把“包含”(include)和“递归”(recursion)搞混了?你是想把所有代码放到一个文件里,还是只想包含一次?我建议你把代码分开,使用包含,这样随着代码的增加,管理起来会更简单(这样你就不会被一个巨大的单文件应用困住)。

可能的解决办法

我觉得你问的是 “我怎么才能只包含文件一次?”

我建议你更新包含的文件,使用 include_once() 这个函数。这样在你合并代码的时候,就不会重复包含那些文件了。

这会让你在整理代码时有一个可用的示例,并且能更好地清理代码。

更新的回答

好的,根据反馈,如果你想把所有文件合并,你需要经过一个过程,首先要有一个主要的 PHP 脚本(或者其他语言),这个脚本会:

  1. 递归地读取每一个 *.php 文件
  2. 当遇到 includerequire 时,它应该打开那个文件
  3. 最终将这些文件作为文本解析,然后输出成一个巨大的文本文件。

撰写回答