1

我一直在尝试使用从 PHP 调用的 Python 中的 Whoosh 模块来设置一个非常基本的搜索引擎。在我升级模块以获得我需要的一些附加功能之前,我一直在工作。这时似乎出现了一个奇怪的错误。PHP 脚本未接收到“searcher = ixtemp.searcher()”行之后的任何打印语句。

从 PHP 调用 python 搜索脚本并使用以下命令显示第一个结果

exec("python print.py",$output,$ret_code);

echo $output[0];

蟒蛇脚本 -

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']

现在运行 PHP 会出现以下错误 -

注意:未定义的偏移量:第 17 行 /opt/lampp/htdocs/new/sea​​rch.php 中的 0

当我自己运行 python 脚本时,它正在工作。经过一番调查,PHP 似乎可以读取“searcher = ixtemp.searcher()”行之前的任何打印语句,但 PHP 脚本不会接收到所有之后的语句。我也尝试过 popen() 和 proc_open 函数,但它们也有同样的问题。

关于问题是什么或如何解决它的任何想法?

谢谢

4

3 回答 3

0

两件事情。您确定脚本正在完成吗?它可能挂在 searcher() 调用上。其次,我想 searcher() 可能正在重定向标准输出。

我的猜测是你的脚本没有完成,或者它超时了。

编辑看起来这段代码取决于当前的工作目录。您在下面提到它在解释器中运行良好 - 在与网络服务器设置相同的 wd 中?

于 2010-12-14T03:38:47.773 回答
0

您确定脚本完全运行吗?

检查 $return_code。

它可能无法找到您的 print.py 脚本甚至 python.exe。

于 2010-12-14T03:49:53.450 回答
0

我用尽了想法并决定 chmod 777 目录......并且......它起作用了。我不知道为什么会这样,因为数据总是可以在 searcher() 函数上方发送。

也许在启动搜索时该方法试图修改受保护的索引文件?

但这本身并不是问题,因为它总是从口译员那里工作。

所以它一定是PHP文件。它似乎可以防止间接修改索引文件。

于 2010-12-14T06:16:44.340 回答