PHP でシステム コマンドを実行する方法は次のとおりであることは誰もが知っています:
system() は、シェル結果の最後の行を出力して返します。
exec() は結果を出力せず、シェル結果の最後の行を返します。すべての結果は返された配列に保存できます。
passthru() はコマンドを呼び出すだけで、コマンドの実行結果はそのまま標準出力装置に直接出力されます。
これらのメソッドは、コマンドが実行されるのを待ってから、後続のプログラムの実行を続行します
ブロックせずに、コマンド出力をシステム内のごみ箱ファイルに書き込むことで、プログラムがブロックされなくなります
例:
<code>shell_<span>exec</span>(<span>"/use/local/php/bin/php /www/t.php > /dev/null 2>&1 &"</span>);</code>
shell:>/dev/null 2>&1
コマンドの結果は %>Output の形式で定義できます
/dev/null は空のデバイスを表しますfile
リダイレクト先を表します。例: echo “123” > /home/123.txt
1 は stdout 標準出力を表し、システムのデフォルト値は 1 であるため、「>/dev/null」は「1>/dev/null」と同等です
2 は stderr 標準誤差を表します
& は、2>&1 と等しいことを意味し、2 の出力リダイレクトが 1 と同等であることを示します
そして、この記事のタイトルの文:
1>/dev/null は、まず標準出力が空のデバイス ファイルにリダイレクトされることを意味します。つまり、端的に言えば、情報は何も表示されません。
2>&1 次に、標準エラー出力のリダイレクトは標準出力と同等です。標準出力は以前に空のデバイス ファイルにリダイレクトされているため、標準エラー出力も空のデバイス ファイルにリダイレクトされます。
以上、ブロックせずに PHP シェルを実行する方法を、シェルの内容も含めて紹介しました。PHP チュートリアルに興味のある友人の参考になれば幸いです。