PHP の長い開発期間を経て、多くのユーザーが PHP についてよく知っています。ここで私の個人的な理解を表明し、PHP コマンドラインについて説明します。 PHP コマンド ライン インターフェイス (CLI) サーバー アプリケーション プログラミング インターフェイス (SAPI) は、PHP V4.2.0 以降、実験目的でリリースされました。 V4.3.0 では完全にサポートされており、デフォルトで有効になっています。
<ol class="dp-xml"><li class="alt"><span><span>shell_exec() </span></span></li></ol>
shell_exec() コマンドラインは実際にはバッククォート (`) 演算子のバリエーションにすぎません。シェルまたは Perl スクリプトを作成したことがある場合は、バックティック演算子内で他のコマンドの出力をキャプチャできることをご存知でしょう。たとえば、リスト 1 は、バッククォートを使用して、現在のディレクトリ内の各テキスト (.txt) の単語数を取得する方法を示しています。
PHP コマンドラインの概要
リスト 1. バッククォートを使用した単語数のカウント
<ol class="dp-xml"> <li class="alt"><span><span>#! /bin/sh </span></span></li> <li class=""> <span></span><span class="attribute"><font color="#ff0000">number_of_words</font></span><span>=`wc -w *.txt` </span> </li> <li class="alt"><span>echo $number_of_words </span></li> <li class=""><span> </span></li> <li class="alt"><span>#result would be something like: </span></li> <li class=""><span>#165 readme.txt 388 results.txt 588 summary.txt </span></li> <li class="alt"><span>#and so on.... </span></li> </ol>
PHP スクリプトでは、リスト 2 に示すように、shell_exec() でこの単純なコマンドを実行し、目的の結果を得ることができます。ここでは、同じディレクトリにいくつかのテキストファイルが存在すると仮定します。
リスト 2.shell_exec() で同じコマンドを実行します
<ol class="dp-xml"><li class="alt"> <span><strong><font color="#006699"><span class="tag"><?</SPAN><SPAN class=tag-name>php</SPAN></FONT></STRONG><SPAN> </SPAN></SPAN><LI class=""><SPAN>$</SPAN><SPAN class=attribute><FONT color=#ff0000>results</FONT></SPAN><SPAN> = </SPAN><SPAN class=attribute-value><FONT color=#0000ff>shell_exec</FONT></SPAN><SPAN>('wc -w *.txt'); </SPAN></SPAN><LI class=alt><SPAN>echo $results; </SPAN><LI class=""><SPAN></SPAN><SPAN class=tag><STRONG><FONT color=#006699>?></span></font></strong></span><span> </span> </li></ol>
以下に示すように、末尾のアポストロフィ演算子を使用するだけでも同じ結果が得られることに注意してください。
リスト 3. 末尾のアポストロフィ演算子のみを使用する
<ol class="dp-xml"><li class="alt"> <span><strong><font color="#006699"><span class="tag"><?</SPAN><SPAN class=tag-name>php</SPAN></FONT></STRONG><SPAN> </SPAN></SPAN><LI class=""><SPAN>$</SPAN><SPAN class=attribute><FONT color=#ff0000>results</FONT></SPAN><SPAN> = `wc -w *.txt`; </SPAN></SPAN><LI class=alt><SPAN>echo $results; </SPAN><LI class=""><SPAN></SPAN><SPAN class=tag><STRONG><FONT color=#006699>?></span></font></strong></span><span> </span> </li></ol>
リスト 4. より簡単な方法
<ol class="dp-xml"><li class="alt"> <span><strong><font color="#006699"><span class="tag"><?</SPAN><SPAN class=tag-name>php</SPAN></FONT></STRONG><SPAN> </SPAN></SPAN><LI class=""><SPAN>echo `wc -w *.txt`; </SPAN><LI class=alt><SPAN></SPAN><SPAN class=tag><STRONG><FONT color=#006699>?></span></font></strong></span><span> </span> </li></ol>
UNIX コマンド ラインとシェル スクリプトを使用して多くのことが実行できることを知っておくことが重要です。たとえば、パイプを使用してコマンドを接続できます。演算子を使用してシェル スクリプトを作成し、そのシェル スクリプトを呼び出すこともできます (必要に応じて引数の有無にかかわらず)。たとえば、そのディレクトリ内の最初の 5 つのテキスト ファイル内の単語のみをカウントしたい場合は、パイプ (|) を使用して wc コマンドと head コマンドを接続できます。あるいは、以下に示すように、出力を pre タグ内に配置して、Web ブラウザーでより美しくレンダリングすることもできます。
リスト 5. より複雑なシェル コマンド
<ol class="dp-xml"> <li class="alt"><span><strong><font color="#006699"><span class="tag"><?</SPAN><SPAN class=tag-name>php</SPAN></FONT></STRONG><SPAN> </SPAN></SPAN><LI class=""><SPAN>$</SPAN><SPAN class=attribute><FONT color=#ff0000>results</FONT></SPAN><SPAN> = </SPAN><SPAN class=attribute-value><FONT color=#0000ff>shell_exec</FONT></SPAN><SPAN>('wc -w *.txt | head -5'); </SPAN></SPAN><LI class=alt><SPAN>echo "</SPAN><STRONG><FONT color=#006699><SPAN class=tag><</SPAN><SPAN class=tag-name>pre</SPAN><SPAN class=tag>></span></font></strong><span>".$results . "</span><strong><font color="#006699"><span class="tag"></</SPAN><SPAN class=tag-name>pre</SPAN><SPAN class=tag>></span></font></strong><span>"; </span></span></li> <li class=""> <span></span><span class="tag"><strong><font color="#006699">?></font></strong></span><span> </span> </li> </ol>
この記事の後半では、PHP を使用してこれらのスクリプトに引数を渡す方法を学びます。これをシェル コマンドを実行する方法と考えることができますが、表示できるのは標準出力のみであることに注意してください。コマンドまたはスクリプトでエラーが発生した場合、パイプ経由で標準エラー (stderr) を stdout に追加しない限り、標準エラー (stderr) は表示されません。