Я використовую цей код у php для використання люценового файлового індексатора та пошуку, але це призводить до порожнього масиву ...
$resul = exec("set classpath=C:lucenelucenecorelucene-core-4.3.0.jar;C:lucenelucenequeryparserlucene-queryparser-4.3.0.jar;C:luceneluceneanalysiscommonlucene-analyzers-common-4.3.0.jar;C:lucenelucenedemolucene-demo-4.3.0.jar2>&1",$result);
echo $result;
$resul = exec("java org.apache.lucene.demo.IndexFiles -doc C:lucenesrc",$result);
echo $result;
$resul = exec("java org.apache.lucene.demo.SearchFiles");
echo $result;
Відповіді:
1 для відповіді № 1Кожен екземпляр exec
використовує окреме середовище від усіх інших. Це означає, що змінні середовища, встановлені вашим першим exec
не "тримайтеся", коли проводяться наступні дзвінки, тому, швидше за все, класовий шлях порожній, а ваші Java програми не запускаються.
Рішення полягає в тому, щоб зробити все в один великий командний рядок. У Windows це можна зробити, об'єднавши команди з &
:
// Sorry for the unreadable line, but it has to be without linebreaks
$commands = "set classpath=C:lucenelucenecorelucene-core-4.3.0.jar;C:lucenelucenequeryparserlucene-queryparser-4.3.0.jar;C:luceneluceneanalysiscommonlucene-analyzers-common-4.3.0.jar;C:lucenelucenedemolucene-demo-4.3.0.jar2 & java org.apache.lucene.demo.IndexFiles -doc C:lucenesrc & java org.apache.lucene.demo.SearchFiles";
exec($commands, $result);
При такій домовленості $result
буде містити лише вихід з останній команда запустити, але на щастя це виглядає саме так, що ви хочете зробити.