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

栏目: PHP · 发布时间: 7年前

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

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

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

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

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

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

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

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

测试包下载地址:

one.php 源代码: http://www.miaoqiyuan.cn/products/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');

以上所述就是小编给大家介绍的《多项目 函数库、类库 统一为一个版本的方法》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

产品心经:产品经理应该知道的60件事(第2版)

产品心经:产品经理应该知道的60件事(第2版)

闫荣 / 机械工业出版社 / 2016-4 / 69.00

本书第一版出版后广获好评,应广大读者要求,作者把自己在实践中新近总结的10个关于产品的最佳实践融入到了这本新书中。这"10件事"侧重于深挖产品需求和产品疯传背后的秘密,配合之前的"50件事",不仅能帮产品经理打造出让用户尖叫并疯传的产品,还能帮助产品经理迅速全方位提升自己的能力。 本书作者有超过10年的产品工作经验,在互联网产品领域公认的大咖,这本书从产品经理核心素养、产品认知、战略与规划、......一起来看看 《产品心经:产品经理应该知道的60件事(第2版)》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换