V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  heguangyu5  ›  全部回复第 1 页 / 共 6 页
回复总数  101
1  2  3  4  5  6  
91 天前
回复了 heguangyu5 创建的主题 PHP PHP 编译器 BPC 7.3 发布,成功编译 ThinkPHP8
@sunchuo 这个也不好说,3 年前还不支持 namespace,closure,generators,traits 呢,现在都支持了.需求来了的时候,就跟上了.
91 天前
回复了 heguangyu5 创建的主题 PHP PHP 编译器 BPC 7.3 发布,成功编译 ThinkPHP8
@sunchuo 目前 bpc 对 PHP 的支持足够我们自己用,所以没有跟进最新版 PHP 的计划.

另外 PHP 新版本的一些改进我并不觉得很好,所以不打算在 bpc 中支持.

ioncube 的话,从 easytoyou 上可以看到 ioncube11.x 是可以在线 decode 的,我自己并没有项目使用过,不确定其加密强度.
不需要 zendvm.

转译后的 scm 代码和 C 代码你都可以看到, [How_BPC_works]( https://github.com/bob-php-compiler/bpc-release/wiki/03_How_BPC_works).

扩展可以自己加的,简单地对 C lib 的封装是很容易的.

1. 扩展模板 [bpc-ext-skeleton]( https://github.com/heguangyu5/bpc-ext-skeleton)
2. 扩展示例 [bpc-ext-raylib]( https://github.com/heguangyu5/bpc-ext-raylib) [bpc-ext-raygui]( https://github.com/heguangyu5/bpc-ext-raygui)

但像 swow 这种要想集成进 BPC,得重写了.

还有一点就是,BPC 目标在于源码保护和软件授权,性能不是第一位的,所以一般谈高性能的东西,就和 BPC 无缘了,现阶段应该是这样.
121 天前
回复了 heguangyu5 创建的主题 PHP PHP 编译器 BPC 7.3 发布,成功编译 ThinkPHP8
@ModiKa2022 BPC 主要解决源码保护和软件授权这两个问题.

"PHP 代码加密已经比较成熟" 这个认知不清楚从哪儿来的.
我了解到的几乎所有的加密方案都有现成的或者可能的还原方法.
@hubaq 笑死,你想想 UDP 机制,封了 IP,IDC 的攻击就没了吗?
上周我们的一台放在 IDC 机房的服务器遭到了 UDP Flood 攻击,机房的处理方式一模一样,不管是不是你的问题,先把你的 IP 给封了.

感觉这些人就是自己能力不足,不能解决问题,只能解决遇到问题的机器.

遇到攻击,不是和客户一起防护,而是先杀掉客户,然后自己再承受攻击,害人不利己.
@a33291 非常感谢!
@skyworker 另外 php 和 BPC 不是二选一的问题,我们自己日常还是用 php 环境开发,只是在本地部署的项目上用 BPC 编译后发布出去.
@janus77 BPC 的测试就是随 PHP 源码发布的 phpt 测试, @see https://github.com/bob-php-compiler/bpc-release/wiki/04_phpt_tests
@skyworker

一段 php 程序,给定一个输入,得到一个或一些输出.
用 BPC 编译替换掉这段 php 程序,给定同样的输入,如果能得到同样的输出,那就够了.
此时外部已经无法分辨处理这处事情的程序是 php 还后 BPC 编译后的程序.

"底层可能有 bug"这种担心怎么说呢?我在开发 BPC 的过程中还发现了 php 的两个 bug,但是这并不影响我每天都用 php.

1. https://bugs.php.net/bug.php?id=81312
2. https://github.com/php/php-src/issues/12715

测试覆盖到你觉得你的程序没问题就够了.

比如 BPC 跑过了 php 的 phpt 测试后,我觉得 BPC 做到这里就够了.
BPC 跑通了云招 OurATS 的测试用例后,我觉得云招 OurATS 就够了.

如果你觉得无论多少测试都不能让你放心,那这就无解了,总要有个信任基础的.
@a33291 我是 java/.net 菜鸟. 经常看到 java 开发的 apk 被反编译, .net 程序去壳授权绕过.

自己写的.net 程序用 jetbrains dotPeek 一反编译, 好家伙, 一字不差.

所以能否推荐几个可靠的保护方案呢?
@skyworker 对于没有测试用例保障的项目来说,迁移到 BPC 确实是你说的"不清楚到底有多少坑要踩"

1 楼都说了, aot 反编译也 OK, 那 swoole 加密的安全性就更不让人放心了.
@NewYear 你确定?
@wxf666 这两个解决方案都是基于 hashtable 去重的,就是那个普通意义的 hashtable,没有什么花招,所以你的猜想都对.

hash 冲突了,就是要回源文件比较原始行,随机读有可能会很多.

但是如果能提前知晓数据的大致分布情况,可能会有更恰当的解决办法.

在不知道的情况下,这两个方案可以快速试错,然后找到正确的方向.
@Keuin 原 OP 也说了要尝试一下你的加行号方案,期待结果
@wxf666

2. 可以指定限制多少内存完成吗?

需要的内存是和要处理的数据量成正比的,如果内存不够,那就无法完成.

当然要在内存不够的情况下完成,那就是另一个解法了,耗时可能会很长,我一开始尝试了一个方案,因为无法较准确的预估处理完所需要的时间,所以就放弃了.

现在的这两个方案处理时间是可靠的,可等的,dedup-use-less-mem 可在约 10 小时左右的时间处理完 203 亿,一个晚上就能得出结论.
@Keuin 请仔细看下原贴,原 OP 已经说了 "尝试过的方案有 sort | uniq 会卡死不出结果"
@wxf666

1. 楼主硬盘读写速度多少?

4 块 4TB 西数机械硬盘做 RAID 0,读写速度可能在 200~400M/s?不太确定.
gen-20.3B-lines.sh 生成 6.8TB 数据用了 7 个多小时.

2. 可以指定限制多少内存完成吗?

dedup-use-more-mem 每 1 亿行数据需要 1.34GB 内存,N 亿就是 N*1.34,当然还需要留出几个 G 的内存给操作系统正常运行.
dedup-use-less-mem 每 1 亿行数据需要 0.67GB 内存.203 亿 136GB 就够了,所以完成 6.2TB-203 亿去重 150G 内存足够了.


3. 有不同的两行,恰好 hash 相同,会出问题吗?

hashtable 就是普通意义的那个,比例 php 的 array,其它语言里的 map, dict 什么的,hash 当然会冲突,这时要解决冲突,常见的解决冲突办法是单链表.所以结果是精确的,不会有误判率什么的.


4. 除顺序读一次原文件外,还需要额外读写多少文件吗?

dedup-use-more-mem 始终都在读原文件.

dedup-use-less-mem 需要额外借助其它文件的帮助.


5. 能轻而易举改造成,针对 CSV 文件(可能有字符串跨多行),且现有成绩影响不大,是吗?

可以的.现在是按\n 取一行的,可以换成其它逻辑.
@ShuWei 是的,简单的 hashtable 就能解决,前提是仔细思考问题本身和操控计算资源.
@picone

1. 思路就是基于 hash 去重的.
2/3. 可执行程序在那里,你可以自己 down 回来试一下.我给的内存用量和处理时间(20 亿以内)是实测数据,不是拍脑袋粗估的.
1  2  3  4  5  6  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2760 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 22ms · UTC 13:22 · PVG 21:22 · LAX 05:22 · JFK 08:22
Developed with CodeLauncher
♥ Do have faith in what you're doing.