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 - Html Transfer Code
Oct 09 PHP
一棵php的类树(支持无限分类)
Oct 09 PHP
php cout&amp;lt;&amp;lt;的一点看法
Jan 24 PHP
rrmdir php中递归删除目录及目录下的文件
May 15 PHP
php+js实现异步图片上传实例分享
Jun 02 PHP
php curl登陆qq后获取用户信息时证书错误
Feb 03 PHP
Laravel 5框架学习之Laravel入门和新建项目
Apr 07 PHP
php中使用gd库实现下载网页中所有图片
May 12 PHP
变量在 PHP7 内部的实现(一)
Dec 21 PHP
PHP数组游标实现对数组的各种操作详解
Jan 26 PHP
深入理解PHP之OpCode原理详解
Jun 01 PHP
yii通过小物件生成view的方法
Oct 08 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 xml常用函数的集合(比较详细)
2013/06/06 PHP
Yii中表单用法实例详解
2016/01/05 PHP
Yii实现显示静态页的方法
2016/04/25 PHP
[原创]php使用strpos判断字符串中数字类型子字符串出错的解决方法
2017/04/01 PHP
innerHTML,outerHTML,innerTEXT三者之间的区别
2007/01/28 Javascript
extjs之去除s.gif的影响
2010/12/25 Javascript
使用jQuery避免鼠标双击的解决方案
2013/08/21 Javascript
cookie的复制与使用记住用户名实现代码
2013/11/04 Javascript
javascript版的in_array函数(判断数组中是否存在特定值)
2014/05/09 Javascript
JavaScript DOM节点添加示例
2014/07/16 Javascript
JavaScript通过prototype给对象定义属性用法实例
2015/03/23 Javascript
JavaScript中判断函数、变量是否存在
2015/06/10 Javascript
javascript获取当前的时间戳的方法汇总
2015/07/26 Javascript
BootStrap实现树形目录组件代码详解
2016/06/21 Javascript
浅谈JSON.stringify()和JOSN.parse()方法的不同
2016/08/29 Javascript
微信小程序 UI与容器组件总结
2017/02/21 Javascript
Angular4学习笔记之新建项目的方法
2017/07/18 Javascript
详解IOS微信上Vue单页面应用JSSDK签名失败解决方案
2018/11/14 Javascript
vue下拉菜单组件(含搜索)的实现代码
2018/11/25 Javascript
关于Vue中$refs的探索浅析
2020/11/05 Javascript
VUE-ElementUI 自定义Loading图操作
2020/11/11 Javascript
python变量不能以数字打头详解
2016/07/06 Python
Python实现选择排序
2017/06/04 Python
Python学习笔记之自定义函数用法详解
2019/06/08 Python
Html5 语法与规则简要概述
2014/07/29 HTML / CSS
HTML5实现文件断点续传的方法
2017/01/04 HTML / CSS
泰国第一在线超市:Tops
2021/02/13 全球购物
创联软件面试题笔试题
2012/10/07 面试题
工厂厂长岗位职责
2013/11/08 职场文书
生物制药自我鉴定
2014/01/25 职场文书
保护环境标语
2014/06/09 职场文书
聘用意向书
2014/07/29 职场文书
2014教师党员自我评议(5篇)
2014/09/20 职场文书
基层工作经历证明
2015/06/19 职场文书
详解MySQL中的pid与socket
2021/06/15 MySQL
在Docker容器中部署SQL Server
2022/04/11 Servers