0

PHP の shell_exec/exec/system 関数でファイルをコンパイルできない理由はありますか?

コマンドラインと PHP の shell_exec 関数で動作するものの例:

<?php
$data = shell_exec("ls");
echo $data;
?>

PHP の shell_exec 関数では機能しないものの、コマンド ラインでは機能するものの例 (確認できます):

<?php
$data = shell_exec("./c-compiled-file argv1 argv2 argv3");
echo $data;
?>

これが機能するように、サーバーでできることはありますか? 私はいたるところを見てきましたが、問題を解決する解決策は見つかりませんでした。コンパイルされたファイルも PHP スクリプトと同じディレクトリにあり、実行されません。また、お尋ねの場合は、はい、SSH2 でこれを試しましたが、まだ実行されません。

また、PHP はセーフ モードではなく、機能は無効になっています。

4

3 に答える 3

0

systemではなく、2 番目のケースで使用しshell_execます。

システムは外部プログラムを実行し、出力を表示します。

shell_execはシェル経由でコマンドを実行し、完全な出力を文字列として返します。

そして、適切な測定のために:

execは単に外部プログラムを実行します。

さらに、外部プログラムが実行可能であること、および Web サーバーを実行しているユーザーに実行権限があることを確認する必要があります (既に述べましたが、もう一度言います)。また、外部プログラムが実行されているディレクトリに、そのディレクトリまたは /tmp または設定した出力ディレクトリに書き込む機能があることを確認する必要があります。

最後に、cron や php などでこのようなことを実行するには、常に絶対パスを使用する必要があります。そのため、絶対パスを使用せず./c-compiled-file argv1 argv2 argv3に、/home/username/c-compiled-file argv1 argv2 argv3またはを使用してください。

于 2013-09-03T11:16:20.410 に答える