2017-08-24 60 views
1

嗨我正在全文搜索和我的功能,我找到字符串位置(切割字符串前后字符串发生)我使用PHP函数mb_stripos()。有一段时间(代码波纹管)每次请求调用几次。字符串长度从500 - 100 000个字符。mb_stripos巨大的时差

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

  • 98%它的股票上的一个字符串呼应microtime()
  • 桌面测量长100个000字符
  • 具有PHP 7.0.9和Win7操作系统和服务器7.1.3-3 + 0〜20170325135815.21 +杰西〜1.gbpafff68与Linux操作系统
  • 两个阿帕奇直升机(台式机或服务器)的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

您的服务器版本是最新的吗?我可能弄错了,但我通常会做相反的事情:在服务器和台式机上都是稳定的版本,最终在桌面上进行更新版本的测试和实验。在你的情况下,也许你的服务器上的版本不像桌面上那样稳定。您是否在两个系统上尝试过相同的版本?我唯一看到的是系统本身,也许是你的代码或Linux上的配置螺丝。很难猜测不知道其他东西在两端通常是否都是相同的。 – ksjohn

+0

现在我试图添加到app_dev.php(symfony的'索引')循环与mb_stripos()和我有错误未捕获的错误:调用未定义的函数mb_stripos()在...我总是困惑...如果我添加代码'phpinfo()'仍然存在php版本7.1.3 ...那么如何在控制器中使用它? (但极其缓慢) –

+1

你有没有尝试重新安装你的Apache?也许在某处有一个missng lib? – ksjohn

回答

1

所以问题解决了。

服务器上缺少libraty mbstring

所以解决方案,如果您有PHP 7.1.x:

apt-get install php7.1-mbstring

在我们的情况有一些错误,所以:

apt-get updateapt-get install php7.1-mbstring和重新启动Apache后。