3

私はPHPを介してスフィンクスを使用しようとしてきましたが、これまでのところ、まったく運がありませんでした。

sphinx自体は期待どおりに機能しています(Linuxターミナルを介した検索コマンドは機能しています)

Engine_Api_SphinxClientは、インストールパッケージに付属するsphinxの通常のphpapiです。唯一の違いは、クラスの名前です。

    // Connect to sphinx server
    $sp = new \Engine_Api_SphinxClient();

    // Set the server
    $sp->SetServer('localhost', 9312);

    // SPH_MATCH_ALL will match all words in the search term
    $sp->SetMatchMode(SPH_MATCH_ANY);

    // We want an array with complete per match information including the document ids
    $sp->SetArrayResult(true);

    $sp->setFieldWeights(array(
        'thesis'=>2,
        'body'=>1
    ));

    /**
    * Run the search query. Here the first argument is the search term
    * and the second is the name of the index to search in.
    * Search term can come from a search form
    */
    $results = $sp->Query('gun', 'test1');
    debug($results);

そのsetServerの9312は、sphinx構成ファイルで定義されたリスニングポストです。デバッグ行に「false」が表示され、次の警告と通知が表示されます。

Errors

Warning: Invalid argument supplied for foreach() in /library/Engine/Api/SphinxClient.php on line 998
Warning: assert(): Assertion failed in /library/Engine/Api/SphinxClient.php on line 177
Warning: assert(): Assertion failed in /library/Engine/Api/SphinxClient.php on line 177
Warning: Invalid argument supplied for foreach() in /library/Engine/Api/SphinxClient.php on line 1006
Warning: Invalid argument supplied for foreach() in /library/Engine/Api/SphinxClient.php on line 1054
Warning: Invalid argument supplied for foreach() in /library/Engine/Api/SphinxClient.php on line 1070
Notice: Undefined property: Engine_Api_SphinxClient::$_socket in /library/Engine/Api/SphinxClient.php on line 564
Notice: Undefined property: Engine_Api_SphinxClient::$_socket in /library/Engine/Api/SphinxClient.php on line 569
Notice: Undefined property: Engine_Api_SphinxClient::$_socket in /library/Engine/Api/SphinxClient.php on line 477
Notice: Undefined property: Engine_Api_SphinxClient::$_socket in /library/Engine/Api/SphinxClient.php on line 478
Warning: fclose() expects parameter 1 to be resource, null given in /library/Engine/Api/SphinxClient.php on line 478

私の疑惑は、それがこれらの4つの通知と関係があるということです。誰かが問題が何であるかについてのヒントを提供することができれば、それは大いにありがたいです。

4

1 に答える 1

7

クラス自体の名前を変更した場合、コンストラクターの名前も変更しましたか(430行目あたり)?

コンストラクターが呼び出されていないのではないかと思うので、_socketは初期化されていません(コンストラクターで発生します)

(これが問題である場合は、関数の名前を__construct()に変更して、クラスの名前に依存しないようにすることができます。http: //php.net/manual/en/language.oop5.decon.php

于 2012-08-14T11:25:52.547 に答える