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 函数中使用static的说明
Jun 01 PHP
php calender(日历)二个版本代码示例(解决2038问题)
Dec 24 PHP
destoon安全设置中需要设置可写权限的目录及文件
Jun 21 PHP
php最简单的删除目录与文件实现方法
Nov 28 PHP
php实现无限级分类
Dec 24 PHP
Yii2超好用的日期和时间组件(值得收藏)
May 05 PHP
微信支付的开发流程详解
Sep 13 PHP
php使用file函数、fseek函数读取大文件效率对比分析
Nov 04 PHP
php基于ob_start(ob_gzhandler)实现网页压缩功能的方法
Feb 18 PHP
PHP批量修改文件名称的方法分析
Feb 27 PHP
php实现的错误处理封装类实例
Jun 20 PHP
Yii2框架中一些折磨人的坑
Dec 15 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对象Object的概念 介绍
2012/06/14 PHP
深入解析PHP的Yii框架中的缓存功能
2016/03/29 PHP
PHP依赖注入(DI)和控制反转(IoC)详解
2017/06/12 PHP
thinkphp5使html5实现动态跳转的例子
2019/10/16 PHP
TP5框架请求响应参数实例分析
2019/10/17 PHP
VBScript版代码高亮
2006/06/26 Javascript
javascript的键盘控制事件说明
2008/04/15 Javascript
点图片上一页下一页翻页效果
2008/07/09 Javascript
js树形控件脚本代码
2008/07/24 Javascript
JQueryEasyUI datagrid框架的进阶使用
2013/04/08 Javascript
基于JavaScript实现继承机制之调用call()与apply()的方法详解
2013/05/07 Javascript
JavaScript作用域与作用域链深入解析
2013/12/06 Javascript
jQuery中andSelf()方法用法实例
2015/01/08 Javascript
require简单实现单页应用程序(SPA)
2016/07/12 Javascript
微信小程序-图片、录音、音频播放、音乐播放、视频、文件代码实例
2016/11/22 Javascript
利用javascript实现的三种图片放大镜效果实例(附源码)
2017/01/23 Javascript
Vue-cli proxyTable 解决开发环境的跨域问题详解
2017/05/18 Javascript
vue-video-player 通过自定义按钮组件实现全屏切换效果【推荐】
2018/08/29 Javascript
详解vue-cli下ESlint 配置说明
2018/09/03 Javascript
微信小程序云开发实现云数据库读写权限
2019/05/17 Javascript
Vue页面切换和a链接的本质区别详解
2019/11/12 Javascript
vue 动态表单开发方法案例详解
2019/12/02 Javascript
JavaScript实现复选框全选和取消全选
2020/11/20 Javascript
Python  __getattr__与__setattr__使用方法
2008/09/06 Python
python实现猜数字游戏(无重复数字)示例分享
2014/03/29 Python
泰国综合购物网站:Lazada泰国
2018/04/09 全球购物
马来西亚网上花店:FlowerAdvisor马来西亚
2020/01/03 全球购物
2019年c语言经典面试题目
2016/08/17 面试题
Java面试题汇总
2015/12/06 面试题
暑假家长评语大全
2014/04/17 职场文书
骨干教师考核评语
2014/12/31 职场文书
初中英语教师个人工作总结
2015/02/09 职场文书
2015-2016年小学教导工作总结
2015/07/21 职场文书
Python基础详解之邮件处理
2021/04/28 Python
实例讲解Python中sys.argv[]的用法
2021/06/03 Python
python编程实现清理微信重复缓存文件
2021/11/01 Python