サーバーで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 で有効にする必要があります。