サーバーでexeファイルを実行し、出力をブラウザ画面に返したいです。exe ファイルは入力ファイルを受け取り、画面にデータを返します。
このコードが機能しないのはなぜですか?
$output = shell_exec('myprogram < INP.DAT');
echo "<pre>" . var_export($output, TRUE) ."</pre>\\n";
ブラウザ画面に「NULL」と表示されます。exec() も試しました。そこで「Array()」を返します。
shell_exec
マニュアルページのコメントの 1 つには、次のように書かれています。
次の矛盾に注意してください:
shell_exec()
コマンドの出力が空の場合、バッククォート演算子は文字列を返さず、代わりに返してしまいますNULL
。これにより、厳密な比較が行われて
''
returnが返されfalse
ます。
PHP がセーフ モードの場合、無効になっている可能性があります。
shell_exec()
(バッククォートと同等の機能)
この関数は、PHP がセーフ モードで実行されている場合は無効になります。
exec()
内の実行可能ファイルのみを実行できますsafe_mode_exec_dir
。実際的な理由から、現在..
、実行可能ファイルへのパスにコンポーネントを含めることは許可されていません。escapeshellcmd()
この関数の引数で実行されます。
関数を使用して、サーバーの PHP 設定を確認できますphpinfo()
。
これはうまくいくはずです:
$output = 配列(); exec('myprogram < INP.DAT', $output); var_dump($出力);
myprogram はデフォルトのシェルから利用できますか? 特定のディレクトリにありますか?
で置き換えmyprogram < INP.DAT
てみてください/full/path/to/myprogram < INP.DAT
これらの機能は、php がセーフモードでないと無効になることがあります。php.ini で有効にする必要があります。