如何识别并移除核心PHP项目中的未使用文件?
检测PHP项目中未被引用文件的方案
手写定制脚本
- 先遍历项目所有PHP文件,生成完整的文件列表。
- 逐个分析文件里的
include/require/include_once/require_once语句,用正则匹配引用的路径,转成绝对路径后加入“已引用文件”列表。 - 如果是Composer自动加载的项目,解析
composer.json的autoload规则,把所有类名映射到对应文件;再扫描项目中所有use语句、类实例化等代码,找到被引用的类,对应到文件后加入“已引用文件”列表。 - 最后对比“所有文件列表”和“已引用文件”列表,差集就是疑似未被引用的文件。
使用专门的扫描工具
- php-unused-scanner:专门针对PHP项目的未用文件/类扫描工具,支持Composer自动加载,能识别大多数静态引用关系。安装后在项目根目录直接运行命令,就能输出未被引用的文件清单。
- pfff:一款多语言静态分析工具,对PHP的支持不错,用它的
unused命令可以检测未被引用的文件,能处理一些复杂的引用场景。
处理动态引用的情况
- 像
include $dynamicPath这类动态加载的代码,静态工具很难检测。可以在项目运行时记录所有被加载的文件:比如在入口文件加入register_shutdown_function(function() { file_put_contents('loaded_files.log', implode("\n", get_included_files())); });,覆盖所有业务场景运行一遍,然后对比日志里的文件和项目文件列表,找出从未被加载的文件。
- 像
注意事项
- 扫描出的文件别直接删除,先标记,然后跑一遍全量测试,确认没有功能受影响再删除。
- 提前排除入口文件、配置文件、CLI脚本、测试用例这些肯定需要保留的文件,避免误判。
- 一定要用Git等版本管理工具备份,删错了能及时回滚。
内容的提问来源于stack exchange,提问作者Jamal nabi ashrafi
相关产品推荐
相关产品推荐

