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 相关文章推荐
PHP网站提速三大“软”招
Oct 09 PHP
PHP新手上路(八)
Oct 09 PHP
php中time()和mktime()方法的区别
Sep 28 PHP
php查看请求头信息获取远程图片大小的方法分享
Dec 25 PHP
ThinkPHP框架任意代码执行漏洞的利用及其修复方法
Jul 04 PHP
PHP嵌套输出缓冲代码实例
May 12 PHP
php并发加锁示例
Oct 17 PHP
Thinkphp框架中D方法与M方法的区别
Dec 23 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
Jul 22 PHP
PHP获取数据库表中的数据插入新的表再原删除数据方法
Oct 12 PHP
Laravel定时任务的每秒执行代码
Oct 22 PHP
Laravel 中使用简单的方法跟踪用户是否在线(推荐)
Oct 30 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
如何设置mysql允许外网访问
2013/06/04 PHP
推荐几款用 Sublime Text 开发 Laravel 所用到的插件
2014/10/30 PHP
ThinkPHP模板之变量输出、自定义函数与判断语句用法
2014/11/01 PHP
php简单smarty入门程序实例
2015/06/11 PHP
PHP date_default_timezone_set()设置时区操作实例分析
2020/05/16 PHP
jquery插件如何使用 jQuery操作Cookie插件使用介绍
2012/12/15 Javascript
js获取当前路径的简单示例代码
2014/01/08 Javascript
仿JQuery输写高效JSLite代码的一些技巧
2015/01/13 Javascript
nodejs实现HTTPS发起POST请求
2015/04/23 NodeJs
javascript实现点击后变换按钮显示文字的方法
2015/05/13 Javascript
JavaScript与ActionScript3两者的同性与差异性
2016/09/22 Javascript
JS触摸屏网页版仿app弹窗型滚动列表选择器/日期选择器
2016/10/30 Javascript
select获取下拉框的值 下拉框默认选中方法
2018/02/28 Javascript
基于vue循环列表时点击跳转页面的方法
2018/08/31 Javascript
详解JavaScript中操作符和表达式
2018/09/12 Javascript
微信小程序实现顶部下拉菜单栏
2018/11/04 Javascript
jQuery.parseJSON()函数详解
2019/02/28 jQuery
微信小程序 wx:for 与 wx:for-items 与 wx:key的正确用法
2020/05/19 Javascript
Vue检测屏幕变化来改变不同的charts样式实例
2020/10/26 Javascript
JavaScript 如何在浏览器中使用摄像头
2020/12/02 Javascript
js实现圆形菜单选择器
2020/12/03 Javascript
python+django加载静态网页模板解析
2017/12/12 Python
python监控键盘输入实例代码
2018/02/09 Python
python判断设备是否联网的方法
2018/06/29 Python
Python异常处理知识点总结
2019/02/18 Python
Pyqt清空某一个QTreeewidgetItem下的所有分支方法
2019/06/17 Python
Python中PyQt5/PySide2的按钮控件使用实例
2019/08/17 Python
Python限制内存和CPU使用量的方法(Unix系统适用)
2020/08/04 Python
python中判断数字是否为质数的实例讲解
2020/12/06 Python
PHP高级工程师面试问题推荐
2013/01/18 面试题
C#面试题
2016/05/06 面试题
就业推荐自我鉴定
2013/10/06 职场文书
戒毒悔改检讨书
2014/09/21 职场文书
公路局群众路线教育实践活动第一阶段工作汇报
2014/10/25 职场文书
2019年最新借条范本!
2019/07/08 职场文书
Docker部署Mysql8的实现步骤
2022/07/07 Servers