2

レッドハットにphpスクリプトがあり、telnetクライアントを介してrootとしてログインしています。
bashスクリプトを実行するための私のPHPスクリプトは(functions.inc)です:

<?php
exec('/ilantest/testscript.sh');
?>

私のBashスクリプト:

#!/bin/bash
echo "Hello world"
echo "Whats going on ?"

そして私がそうするとき:phpfunctions.inc-私は次を得る:
何が起こっているのか?[root @ X ilantest]#

なぜ最初の行が表示されないのですか?
ありがとう !

4

3 に答える 3

4

exec() http://us3.php.net/manual/en/function.exec.php#refsect1-function.exec-returnvaluesを参照

コマンドの結果の最後の行。コマンドを実行し、コマンドからのすべてのデータを干渉なしで直接返す必要がある場合は、passthru() 関数を使用します。実行されたコマンドの出力を取得するには、必ずoutput パラメータを設定して使用してください。

そう:

exec('/ilantest/testscript.sh', $output);
echo implode("\n", $output);
于 2012-12-30T16:58:31.937 に答える
1

出力を受け取る引数を指定しない場合、最後の行のみが出力されます。exec()マニュアルから:

出力引数が存在する場合、指定された配列はコマンドからの出力のすべての行で埋められます。\n などの末尾の空白は、この配列には含まれません。配列にすでにいくつかの要素が含まれている場合、exec() は配列の最後に追加されることに注意してください。関数に要素を追加させたくない場合は、配列を exec() に渡す前に unset() を呼び出します。

配列を渡してすべての行を受け取ることができます:

<?php
$lines = array();
exec('/ilantest/testscript.sh', $lines);
foreach($lines as $i) {
    echo $i;
}
?>
于 2012-12-30T17:04:32.997 に答える
1

あなたのphpスクリプトで試してください

echo system('/ilantest/testscript.sh');
于 2012-12-30T16:56:36.100 に答える