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

现在 手里 有好几个 项目在进行,每个项目都有部分通用的代码,只想维护一个 函数库、类库,并且每个项目都不想有冗余代码,函数功能更新后,其他项目的函数也需要更新。晚上抽空写了个 简单的打包小脚本:one.php,以后 更新函数或类时,只需要在唯一的 函数库、类库 中更新,其他项目使用 打包后的 php 脚本即可(理论上也能提高PHP的运行速度,只需要加载、分析一个文件)。

因为我的 函数库、类库都在一个目录下,所以没有针对相对路径 做处理(懒),cmd 进入 core 目录,执行 php one.php 即可按规则打包成一个独立的文件,运行效果如下。

打包流程,以 public.php 为例。

现在功能有限,仅支持 同一个目录(因为我只用到了单目录),如果有哪位大神 在此基础上修改了多目录版本,请一定要分享一分给我。

至于用处,除了 方便维护多个项目(A项目、B项目)或同一个项目的多个版本(比如:VIP版、普通版),最大的用处,可以用于商业版程序混淆加密。比如商业软件:index.php,product.php 每个文件都打包混淆加密,每个文件都包含了所有的代码(几万行)。破解者解密后,看到几万行代码,上百个函数(可能都还有用),同一个功能,各个文件内的函数名都不一致,会哭死的。。。。

测试包下载地址:

one.php 源代码:onephp.rar

核心代码

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

(0)

相关推荐

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

    现在 手里 有好几个 项目在进行,每个项目都有部分通用的代码,只想维护一个 函数库.类库,并且每个项目都不想有冗余代码,函数功能更新后,其他项目的函数也需要更新.晚上抽空写了个 简单的打包小脚本:one.php,以后 更新函数或类时,只需要在唯一的 函数库.类库 中更新,其他项目使用 打包后的 php 脚本即可(理论上也能提高PHP的运行速度,只需要加载.分析一个文件). 因为我的 函数库.类库都在一个目录下,所以没有针对相对路径 做处理(懒),cmd 进入 core 目录,执行 php one

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

    前几天 写的博客 多项目 函数库.类库 统一为一个版本的方法中提到 使用 one.php 将整个项目打包成 一个 php 文件,有网友 让我 整个asp版本的,今天下午抽空写了个 one.asp,使用方式基本一致,这次 增加了路径计算的功能,可以引用不同路径. 举个简单的应用场景,开发一个小的API系统,支持 XML.JSON输出.区别是 基础版(dev/dev.asp)只支持 Access,VIP版本(dev/vip.asp)支持 Access + SQL Server.这样VIP版本就需要在

  • PHP PDO函数库详解

    目前而言,实现"数据库抽象层"任重而道远,使用PDO这样的"数据库访问抽象层"是一个不错的选择. PDO中包含三个预定义的类 PDO中包含三个预定义的类,它们分别是 PDO.PDOStatement 和 PDOException. 一.PDO PDO->beginTransaction() - 标明回滚起始点PDO->commit() - 标明回滚结束点,并执行SQLPDO->__construct() - 建立一个PDO链接数据库的实例PDO-&

  • thinkPHP简单调用函数与类库的方法

    本文实例讲述了thinkPHP调用函数与类库的方法.分享给大家供大家参考,具体如下: 手册上说的很冗余,没看懂,下面简单的讲一下具体用法. 函数调用: lib公共函数库叫 common.php App/common/common.php 分组模块下的公共函数库叫 function.php App/Modules/Admin/common/function.php 类库调用: class IndexAction extends Action{ public function index(){ //

  • 通用javascript脚本函数库 方便开发

    将下面代码保存为Common.js 类库功能: 1.Trim(str)--去除字符串两边的空格 2.XMLEncode(str)--对字符串进行XML编码 3.ShowLabel(str,str)--鼠标提示功能(显示字符,提示字符) 可以设置显示的提示的文字的字体.颜色.大小以及提示的背景颜色.边框等 4.IsEmpty(obj)--验证输入框是否为空 5.IsInt(objStr,sign,zero)--验证是否为整数,正整数,负整数,以及是否包括零 6.IsFloat(objStr,sig

  • 在easyUI开发中,出现jquery.easyui.min.js函数库问题的解决办法

    easyUI是jquery的一个插件,是民间的插件.easyUI使用起来很方便,里面有网页制作的最重要的三大方块:javascript代码.html代码和Css样式.我们在导入easyUI库后,可以直接复制粘贴里面的代码,从而简单轻便地初步设置网页. 首先导入easyUI函数库: <link rel="stylesheet" type="text/css" href="easyui/themes/default/easyui.css">

  • laravel 如何实现引入自己的函数或类库

    例如在app下建一个Common文件夹 在Common下建一个function.php 放入公共函数 例如: function test(){ echo 'this is a test'; } 在项目目录下composer.json中加入 "autoload": { "files":[ "app/Common/function.php" ] } 在项目目录下执行 composer dump-autoload 在控制器的某个方法中调用 public

  • 5个可以加速开发的VueUse函数库(小结)

    目录 VueUse 有哪些实用程序? 将 VueUse 安装到你的 Vue 项目中 1.useRefHistory 跟踪响应式数据的更改 2.onClickOutside 关闭模态 3.useVModel 简化了 v-model 绑定 4.使用InterpObserver 跟踪元素可见性 5.useTransition 在值之间缓和 最后的想法 VueUse 是 Anthony Fu 的一个开源项目,它为 Vue 开发人员提供了大量适用于 Vue 2 和 Vue 3 的基本 Compositio

  • PHP 正则表达式函数库(两套)

    在PHP中有两套正则表达式函数库,两者功能相似,只是执行效率略有差异: 一套是由PCRE(Perl Compatible Regular Expression)库提供的.使用"preg_"为前缀命名的函数: 一套由POSIX(Portable Operating System Interface of Unix )扩展提供的(PHP默认).使用以"ereg_"为前缀命名的函数: PHP中,正则表达式有三个作用: 匹配,也常常用于从字符串中析取信息. 用新文本代替匹配

  • PHP用mb_string函数库处理与windows相关中文字符及Win环境下开启PHP Mb_String方法

    PHP用mb_string函数库处理与windows相关中文字符 昨天想批处理以前下载的一堆文件,把文件里的关键内容用正则匹配出来,集中处理.在操作文件时遇到一个问题,就是windows操作系统中的编码问题. 我们都知道windows中(当然是中文版),文件名和文件内容等编码都是gbk,而我们在开发过程中,IDE里的编码则是UTF-8,(这里不讨论为什么等等问题, 只考虑怎么把编码转变成一样的)所以导致我写的UTF-8编码的正则模式字符串中的中文在gbk编码的文件中并不能正确匹配. 一开始,我并

随机推荐