2013-05-10 2 views
1

Я использую этот код в PHP для использования Lucene файла индексатор и искателю, но это приводит к пустой массив ...Как я могу получить CMD результат с помощью PHP

$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; 

ответ

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 будет содержать только вывод из команды запуска последнего, но, к счастью, это выглядит именно то, что вы хотите сделать.

Смежные вопросы