swoole compiler加密一些框架时产生的问题

问题:使用swoole compiler加密类似drupal这样的项目的时候在不做处理的情况下会出现项目无法运行的情况,分析了drupal的源码发现在drupal的方法中有一个方法会通过file_get_contents直接获取php文件的内容,然后将获取的内容用token_get_all函数进行代码分割,然后分析分割后的代码获取该文件的注释和use的类,因为file_get_contents所获取的代码是加密后的代码,所以也就产生了错误,当然不止这一处存在这样的问题,drupal加载了symfony,symfony中文件缓存也有类似的操作,通过读取php文件,对文件进行正则匹配然后缓存到新文件中

解决方案:对于获取类名,注释等,可以通过反射函数代替token_get_all函数,一些反射无法获取的信息比如use信息,则通过swoole_loader.so扩展进行获取

待解决:symfony的缓存文件机制和drupal的setting.php文件的处理暂时未想到合理的解决方案,因为两者都是通过分析php源码,然后在源码的基础上添加新的代码在存入文件的

StaticReflectionParser.php文件的改动主要如下,获取文件如果是加密文件则走新添加的代码,如果不是加密文件则还是走老方法

/**
 * @return void
 */
protected function parse()
{
    if ($this->parsed || !$fileName = $this->finder->findFile($this->className)) {
        return;
    }
    $this->parsed = true;
    $contents = file_get_contents($fileName);
    if (strpos($contents, 'SWOOLEC') === false) {
        if ($this->classAnnotationOptimize) {
            if (preg_match("/\A.*^\s*((abstract|final)\s+)?class\s+{$this->shortClassName}\s+/sm", $contents, $matches)) {
                $contents = $matches[0];
            }
        }
        $tokenParser = new TokenParser($contents);
        $docComment = '';
        while ($token = $tokenParser->next(false)) {
            if (is_array($to
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值