/ / Як можна отримати результат cmd за допомогою php - php, cmd, lucene

Як отримати cmd результат за допомогою php-php, cmd, lucene

Я використовую цей код у 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 буде містити лише вихід з останній команда запустити, але на щастя це виглядає саме так, що ви хочете зробити.