mb_stripos巨大的时差

时间:2017-08-24 12:07:41

标签: php string symfony stripos

您好我正在进行全文搜索,在我的函数中我找到字符串位置(对于字符串出现之前和之后的剪切x字符)我正在使用php函数mb_stripos()。每次请求都会有几次(代码轰鸣声)。字符串长度为500-10万字符。

但问题是,在桌面上需要这个时间(每个请求调用几次)cca 500ms,但在服务器上需要20 000ms。

  • 98%的请求时间存储在一个字符串长100 000个字符
  • 通过回显microtime()
  • 来衡量
  • 桌面有php 7.0.9和win7 os和服务器7.1.3-3 + 0~20170325135815.21 + jessie~1.gbpafff68 with linux os
  • apach(桌面或服务器)都有PHP加速和OPcache
  • 它是关于symfony fw(可能无关紧要)
  • 大多数php操作都在服务器上更快

    while (($lastPos = mb_stripos($content, $searchString, $lastPos)) !== false) {
    
        if($lastPos <= $offset)
            $startStr = 0;
        else
            $startStr = $lastPos - $offset;
    
        $subs[] = mb_substr($content, $startStr, 100);
        $lastPos = $lastPos + strlen($searchString);
    }
    

为何如此可怕的差异?

1 个答案:

答案 0 :(得分:1)

问题解决了:缺少库mbstring

使用php 7.1.x时的解决方案:apt-get install php7.1-mbstring

在我们的情况下,出现了一些错误:

apt-get update之后apt-get install php7.1-mbstring并重新启动apache。