无法在PHP和Python之间发送数据

时间:2010-12-14 03:33:42

标签: php python search exec whoosh

我一直在尝试使用PHP中调用的python中的Whoosh模块来设置一个非常基本的搜索引擎。我一直在工作,直到我升级模块以获得我需要的一些额外功能。在这一点上,似乎出现了一个奇怪的错误。 PHP脚本没有收到“searcher = ixtemp.searcher()”行之后的任何print语句。

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

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

echo $output[0];

python脚本 -

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会出现以下错误 -

  

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

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

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

由于

3 个答案:

答案 0 :(得分:0)

两件事。你确定脚本正在完成吗?它可能挂在searcher()调用上。其次,我想searcher()可能会重定向stdout。

我的猜测是你的脚本没有完成,或者是超时或其他什么。

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

答案 1 :(得分:0)

您确定该脚本可以运行吗?

检查$ return_code。

它可能找不到你的print.py脚本,甚至可能找不到python.exe。

答案 2 :(得分:0)

我跑出了想法并决定chmod 777这个目录......并且......它有效。我不知道它为什么会这样做,因为无论如何数据总是可以发送到searcher()函数之上。

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

但这本身并不是问题所在,因为它总是来自翻译。

所以它一定是PHP文件。它似乎是针对间接修改索引文件的保护。