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批量生成随机用户名
Jul 10 PHP
在PHP中检查PHP文件是否有语法错误的方法
Dec 23 PHP
简单PHP上传图片、删除图片实现代码
May 12 PHP
PHP使用CURL实现对带有验证码的网站进行模拟登录的方法
Jul 23 PHP
php实现按指定大小等比缩放生成上传图片缩略图的方法
Dec 15 PHP
php实现字符串反转输出的方法
Mar 14 PHP
举例详解PHP脚本的测试方法
Aug 05 PHP
PHP编写的图片验证码类文件分享
Jun 06 PHP
PHP封装返回Ajax字符串和JSON数组的方法
Feb 17 PHP
PHP简单实现循环链表功能示例
Nov 10 PHP
PHP安装memcache扩展的步骤讲解
Feb 14 PHP
如何解决PHP获取不到SESSION信息之一般情况
Oct 10 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 实现缩略图
2021/03/09 PHP
?牟┛途W扣了一??效果出?? target=
2007/05/27 Javascript
javascript 表单规则集合对象
2009/07/21 Javascript
js实现瀑布流的一种简单方法实例分享
2013/11/04 Javascript
浅谈javascript事件取消和阻止冒泡
2015/05/26 Javascript
jquery性能优化高级技巧
2015/08/24 Javascript
JS实现漂亮的淡蓝色滑动门效果代码
2015/09/23 Javascript
Javascript的表单验证-提交表单
2016/03/18 Javascript
js获取iframe中的window对象的实现方法
2016/05/20 Javascript
NodeJs的优势和适合开发的程序
2016/08/14 NodeJs
IOS中safari下的select下拉菜单文字过长不换行的解决方法
2016/09/26 Javascript
JS获取IE版本号与HTML设置IE文档模式的方法
2016/10/09 Javascript
详解10分钟学会vue滚动行为
2017/09/21 Javascript
create-react-app修改为多页面支持的方法
2018/05/17 Javascript
Express的HTTP重定向到HTTPS的方法
2018/06/06 Javascript
Vue2.0生命周期的理解
2018/08/20 Javascript
详解JavaScript作用域和作用域链
2019/03/19 Javascript
微信自定义分享链接信息(标题,图片和内容)实现过程详解
2019/09/04 Javascript
JavaScript正则表达式验证登录实例
2020/03/18 Javascript
Python导入txt数据到mysql的方法
2015/04/08 Python
用ReactJS和Python的Flask框架编写留言板的代码示例
2015/12/19 Python
Python 爬虫的工具列表大全
2016/01/31 Python
python 如何快速找出两个电子表中数据的差异
2017/05/26 Python
小白如何入门Python? 制作一个网站为例
2018/03/06 Python
Python+OpenCV目标跟踪实现基本的运动检测
2018/07/10 Python
python的turtle库使用详解
2019/05/10 Python
Python3.8对可迭代解包的改进及用法详解
2019/10/15 Python
python如果快速判断数字奇数偶数
2019/11/13 Python
tensorflow之变量初始化(tf.Variable)使用详解
2020/02/06 Python
python“静态”变量、实例变量与本地变量的声明示例
2020/11/13 Python
巴西一家专门从事家居和装饰的连锁店:Camicado
2019/08/14 全球购物
药学专业个人的自我评价
2013/12/31 职场文书
公司离职证明范本(汇总)
2014/09/10 职场文书
放弃继承权公证书
2015/01/23 职场文书
私人贷款担保书该怎么写呢?
2019/07/02 职场文书
Docker 镜像介绍以及commit相关操作
2022/04/13 Servers