我在php中使用此代码使用lucene文件索引器和搜索器,但它导致空数组......
$resul = exec('set classpath=C:\lucene\lucene\core\lucene-core-4.3.0.jar;C:\lucene\lucene\queryparser\lucene-queryparser-4.3.0.jar;C:\lucene\lucene\analysis\common\lucene-analyzers-common-4.3.0.jar;C:\lucene\lucene\demo\lucene-demo-4.3.0.jar2>&1',$result);
echo $result;
$resul = exec('java org.apache.lucene.demo.IndexFiles -doc C:\lucene\src',$result);
echo $result;
$resul = exec('java org.apache.lucene.demo.SearchFiles');
echo $result;
答案 0 :(得分:1)
exec
的每个实例都使用与其他所有实例不同的环境。这意味着在进行以下调用时,第一个exec
设置的环境变量不会“粘住”,因此类路径很可能为空,并且您的Java程序无法运行。
解决方案是将所有内容组合成一个大命令行。在Windows上,您可以通过将命令与&
:
// Sorry for the unreadable line, but it has to be without linebreaks
$commands = "set classpath=C:\lucene\lucene\core\lucene-core-4.3.0.jar;C:\lucene\lucene\queryparser\lucene-queryparser-4.3.0.jar;C:\lucene\lucene\analysis\common\lucene-analyzers-common-4.3.0.jar;C:\lucene\lucene\demo\lucene-demo-4.3.0.jar2 & java org.apache.lucene.demo.IndexFiles -doc C:\lucene\src & java org.apache.lucene.demo.SearchFiles";
exec($commands, $result);
通过这种安排,$result
将只包含 last 命令运行的输出,但幸运的是,这看起来就像你想要做的那样。