Posted in PHP onAugust 24, 2020
现在 手里 有好几个 项目在进行,每个项目都有部分通用的代码,只想维护一个 函数库、类库,并且每个项目都不想有冗余代码,函数功能更新后,其他项目的函数也需要更新。晚上抽空写了个 简单的打包小脚本:one.php,以后 更新函数或类时,只需要在唯一的 函数库、类库 中更新,其他项目使用 打包后的 php 脚本即可(理论上也能提高PHP的运行速度,只需要加载、分析一个文件)。
因为我的 函数库、类库都在一个目录下,所以没有针对相对路径 做处理(懒),cmd 进入 core 目录,执行 php one.php 即可按规则打包成一个独立的文件,运行效果如下。
核心代码
<?php /** * 类名:One * 作者:mqycn * 博客:http://www.miaoqiyuan.cn * 源码:http://www.miaoqiyuan.cn/p/one-php * 说明:多项目 函数库、类库 统一为一个版本的方法 */ class OneFile { //已经合并的文件 public static $includes; //处理一个文件 public static function run($index_file, $output_file) { self::$includes = array(); self::log('Input', $index_file); $output = self::parse($index_file); file_put_contents($output_file, self::repair($output)); self::log('Output', $output_file); } //分析PHP文件 public static function parse($file) { if (empty(self::$includes[$file])) { self::log('Append', $file); self::$includes[$file] = true; $code = file_get_contents($file); if (preg_match_all("/(require_once|require|include_once|include)\s+'([^']*)';/", $code, $match)) { for ($i = 0; $i < count($match[0]); $i++) { $code = str_replace($match[0][$i], self::parse($match[2][$i]), $code); } } return $code; } else { self::log('Ignore', $file); return ''; } } //代码修复 public static function repair($code) { $php_prefix = "<?php\r\n"; $php_suffix = "\r\n?>"; $code = str_replace("\n", "\r\n", $code); $code = str_replace("\r\r\n", "\r\n", $code); $code = str_replace($php_prefix, '', $code); $code = str_replace($php_suffix, '', $code); for ($i = 0; $i < 5; $i++) { $code = str_replace("\r\n\r\n", "\r\n", $code); } return $php_prefix . $code . $php_suffix; } //输出日志 public static function log($type, $text, $status = '') { if (in_array($type, array('Append', 'Ignore'))) { $status = "- ${type}"; $type = " |-- "; } else { $type = "${type}:"; } echo "${type} ${text} {$status}\r\n"; } } OneFile::run('vip.php', '../vip.php'); OneFile::run('public.php', '../public.php');
到此这篇关于one.php 多项目、函数库、类库 统一为一个版本的方法的文章就介绍到这了,更多相关多项目、函数库、类库统一为一个内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!
one.php 多项目、函数库、类库 统一为一个版本的方法
- Author -
苗启源声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
Reply on: @reply_date@
@reply_contents@