2010-12-14 16 views
1

PHPから呼び出されたPythonでWhooshモジュールを使用して、非常に基本的な検索エンジンを設定しようとしています。私が必要としたいくつかの追加機能のためにモジュールをアップグレードするまで、私はそれを動作させました。その時点で奇妙なバグが現れたようだ。 "searcher = ixtemp.searcher()"という行の後のprint文はPHPスクリプトでは受け取られません。PHPとPythonの間でデータを送信できません

Pythonの検索スクリプトはPHPから呼び出され、最初の結果は、以下のコマンドで表示される

Pythonスクリプト
exec("python print.py",$output,$ret_code); 

echo $output[0]; 

- 今PHPを実行

from whoosh.index import open_dir 

ixtemp = open_dir("index") 

searcher = ixtemp.searcher() 

results = searcher.find("content", u""+"test") 

for k in results: 
    print k['filename'] 

は、次のエラーを与える -

Notice: の未定義オフセット:0 /opt/lampp/htdocs/new/sea​​rch.php on line 17

pythonスクリプトは、単独で実行すると機能します。ちょっと調べてみると、 "searcher = ixtemp.searcher()"という行の前のすべての印刷文はPHPで読むことができますが、後は​​すべてPHPスクリプトで受け取られません。私もpopen()関数とproc_open関数を試しましたが、同じ問題があります。

問題の内容や回避方法については、

ありがとうございました

答えて

0

私はアイデアを使い果たし、777のディレクトリをchmodすることに決めました。とにかく、searcher()関数の上にデータを常に送ることができた理由は分かりません。

おそらく、検索を開始しているうちにメソッドが保護されたインデックスファイルを変更しようとしていたのでしょうか?

しかし、それは常にインタプリタから働いたので、それ自体は問題ではありませんでした。

PHPファイルだったはずです。インデックスファイルを間接的にに変更すると、に対して保護されているようです。

0

2つのもの。スクリプトが完了していますか? searcher()呼び出しに掛かっている可能性があります。次に、searcher()がstdoutをリダイレクトできると思います。

私の推測では、あなたのスクリプトは完了していないか、タイムアウトしているかのようです。

EDITこのコードは、現在の作業ディレクトリによって異なります。あなたは、インタプリタでうまく動いていることを以下で言及します - ウェブサーバがセットアップするのと同じwdで?

+0

こんにちは、スクリプトの実行に1秒かかると、インタプリタの中で完全に動作します。また、 "searcher = ixtemp.searcher()"が動作する前のステートメントを印刷します。 – usertest

+0

stdoutがリダイレクトされているかどうか分かりますか?そして、どうやってそれを止めることができますか?ありがとう、 – usertest

+0

こんにちは、両方のスクリプトは同じ場所にあり、 "searcher = ixtemp.searcher()"の後でない限り、データはそれらの間を移動しますので、作業ディレクトリに問題はありません。 – usertest

0

スクリプトはまったく実行されますか?

$ return_codeを確認してください。

可能であれば、あなたのprint.pyスクリプト、あるいはおそらくpython.exeを見つけることはできません。

+0

こんにちは、それは実行され、私はprintステートメントがデータを送信すると述べたが、その前に "searcher = ixtemp.searcher()"の場合のみ – usertest

+0

ああ!その場合、おそらく "index"ディレクトリの検索に問題があります! –

+0

PHPファイルでは、インデックスディレクトリがどこにあるのかを知る必要がないので、Pythonスクリプトがそれを知り、処理された結果を出力する必要があるとは思いません。そして、Pythonはインタプリタをうまく動作させます。また、上記の行の後に出力が送信されない理由を説明しません。 – usertest

関連する問題