one.php 多项目、函数库、类库 统一为一个版本的方法


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 多项目、函数库、类库 统一为一个版本的方法的文章就介绍到这了,更多相关多项目、函数库、类库统一为一个内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

PHP 相关文章推荐
模仿OSO的论坛(三)
Oct 09 PHP
用PHP实现小写金额转换大写金额的代码(精确到分)
Jan 10 PHP
用PHP实现 上一篇、下一篇的代码
Sep 29 PHP
PHP 二维数组根据某个字段排序的具体实现
Jun 03 PHP
php限制ip地址范围的方法
Mar 31 PHP
PHP中利用sleep函数实现定时执行功能实现代码
Aug 25 PHP
php实现数据库的增删改查
Feb 26 PHP
Yii2配置Nginx伪静态的方法
May 05 PHP
php 判断IP为有效IP地址的方法
Jan 28 PHP
CI框架实现创建自定义类库的方法
Dec 25 PHP
PHP生成zip压缩包的常用方法示例
Aug 22 PHP
thinkphp 框架数据库切换实现方法分析
May 18 PHP
PHP执行普通shell命令流程解析
Aug 24 #PHP
PHP连接SQL server数据库测试脚本运行实例
Aug 24 #PHP
解决PHP Opcache 缓存刷新、代码重载出现无法更新代码的问题
Aug 24 #PHP
WordPress免插件实现面包屑导航的示例代码
Aug 20 #PHP
VSCode+PHPstudy配置PHP开发环境的步骤详解
Aug 20 #PHP
Laravel相关的一些故障解决
Aug 19 #PHP
聊聊 PHP 8 新特性 Attributes
Aug 19 #PHP
You might like
php的mkdir()函数创建文件夹比较安全的权限设置方法
2014/07/28 PHP
ThinkPHP 3.2.2实现事务操作的方法
2017/05/05 PHP
JavaScript Date对象 日期获取函数
2010/12/19 Javascript
jquery的ajax()函数传值中文乱码解决方法介绍
2012/11/08 Javascript
js不能跳转到上一页面的问题解决方法
2013/03/01 Javascript
JavaScript中this的使用详解
2013/11/08 Javascript
javascript实现倒计时N秒后网页自动跳转代码
2014/12/11 Javascript
利用css+原生js制作简单的钟表
2020/04/07 Javascript
jQuery实现圣诞节礼物动画案例解析
2016/12/25 Javascript
angularjs指令之绑定策略(@、=、&amp;)
2017/04/13 Javascript
详解axios在vue中的简单配置与使用
2017/05/10 Javascript
node.js利用socket.io实现多人在线匹配联机五子棋
2018/05/31 Javascript
ES6使用export和import实现模块化的方法
2018/09/10 Javascript
6行代码实现微信小程序页面返回顶部效果
2018/12/28 Javascript
JS获取动态添加元素的方法详解
2019/07/31 Javascript
ElementUI之Message功能拓展详解
2019/10/18 Javascript
Vue修改项目启动端口号方法
2019/11/07 Javascript
如何在node环境实现“get数据解析”代码实例
2020/07/03 Javascript
小程序中手机号识别的示例
2020/12/14 Javascript
用Python的Django框架来制作一个RSS阅读器
2015/07/22 Python
python如何通过protobuf实现rpc
2016/03/06 Python
对pandas中to_dict的用法详解
2018/06/05 Python
Flask实现跨域请求的处理方法
2018/09/27 Python
详解Python 调用C# dll库最简方法
2019/06/20 Python
Python中判断子串存在的性能比较及分析总结
2019/06/23 Python
python实现抠图给证件照换背景源码
2019/08/20 Python
使用pygame写一个古诗词填空通关游戏
2019/12/03 Python
H5 canvas实现贪吃蛇小游戏
2017/07/28 HTML / CSS
汽车队司机先进事迹材料
2014/02/01 职场文书
教师现实表现材料
2014/02/14 职场文书
升学宴答谢词
2015/01/05 职场文书
考研复习计划
2015/01/19 职场文书
2015年人事工作总结范文
2015/04/09 职场文书
2015年教师党员个人总结
2015/11/24 职场文书
厉害!这是Redis可视化工具最全的横向评测
2021/07/15 Redis
解决redis批量删除key值的问题
2022/03/23 Redis