4

サーバーでexeファイルを実行し、出力をブラウザ画面に返したいです。exe ファイルは入力ファイルを受け取り、画面にデータを返します。

このコードが機能しないのはなぜですか?

$output = shell_exec('myprogram < INP.DAT');
echo "<pre>" . var_export($output, TRUE) ."</pre>\\n";

ブラウザ画面に「NULL」と表示されます。exec() も試しました。そこで「Array()」を返します。

4

4 に答える 4

6

shell_execマニュアルページのコメントの 1 つには、次のように書かれています。

次の矛盾に注意してください:shell_exec()コマンドの出力が空の場合、バッククォート演算子は文字列を返さず、代わりに返してしまいますNULL

これにより、厳密な比較が行われて''returnが返されfalseます。


PHP がセーフ モードの場合、無効になっている可能性があります。

shell_exec()(バッククォートと同等の機能)
この関数は、PHP がセーフ モードで実行されている場合は無効になります。

exec()
内の実行可能ファイルのみを実行できますsafe_mode_exec_dir。実際的な理由から、現在..、実行可能ファイルへのパスにコンポーネントを含めることは許可されていません。escapeshellcmd()この関数の引数で実行されます。

関数を使用して、サーバーの PHP 設定を確認できますphpinfo()

于 2009-07-10T04:02:53.837 に答える
2

これはうまくいくはずです:

$output = 配列();
exec('myprogram < INP.DAT', $output);
var_dump($出力);
于 2009-07-10T04:06:03.440 に答える
2

myprogram はデフォルトのシェルから利用できますか? 特定のディレクトリにありますか?
で置き換えmyprogram < INP.DATてみてください/full/path/to/myprogram < INP.DAT

于 2010-06-11T05:49:16.607 に答える
0

これらの機能は、php がセーフモードでないと無効になることがあります。php.ini で有効にする必要があります。

于 2013-03-27T01:05:32.833 に答える