1

我在 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;
4

1 回答 1

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将只包含上次命令运行的输出,但幸运的是,这看起来正是您想要做的。

于 2013-05-11T00:01:06.647 回答