2017-08-24 20 views
1

こんにちは私はフルテキスト検索に取り組んでいます。私は文字列の位置を探しています(文字列の前後の文字を切り捨てるために)私はPHP関数mb_stripos()を使用しています。 1回のリクエストで何回か呼び出されている間に(コードが荒い)表示されます。文字列の長さは500〜100,000文字です。mb_stripos巨大な時間差

しかし、問題はデスクトップ上でこれが(1回のリクエストにつき数回と呼ばれますが)cca 500msですが、サーバでは20,000msかかるということです。 microtime()

  • デスクトップをエコーで測定し、それは1つの文字列の長100 000文字
  • に在庫要求時間の

    • 98%は、PHP 7.0.9とwin7のOSとサーバー7.1.3-3 + 0〜20170325135815.21を持っていますそれはsymfonyのFW上でLinuxのOSと+ジェシー〜1.gbpafff68
    • 両方アパッチ(デスクトップまたはサーバ)はPHPの高速化とOPcache
    • を持っている(それは問題とはならないでしょう)
    • ほとんどのPHPの動作がOでn個のサーバーに迅速

      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

    mb_stripos()でapp_dev.php(symfonyの 'index')ループに追加しようとしましたが、エラー 'Uncaught Error:未定義関数mb_stripos()を呼び出しています...' 'phpinfo()'をコードするにはまだphp ver 7.1.3があります...それはどのようにコントローラで動作するのですか? (しかし極端に遅い) –

    +1

    あなたはあなたのApacheを再インストールしましたか?おそらく、どこかにミス・リビングがありますか? – ksjohn

    答えて

    1

    問題は解決しました。

    サーバ上に図書館がありませんmbstring

    apt-get updateとそのapt-get install php7.1-mbstringとApacheを再起動した後:

    apt-get install php7.1-mbstring

    は、私たちのような状況ではそう多少の誤差があった:

    だからソリューションあなたは、PHP 7.1を持っている場合。