PHP が非常に優れた動的 Web 開発言語 (高速、短い開発サイクルなど) であることは誰もが知っています。しかし、PHP がシェル スクリプトを作成するための言語としても使用できることを認識している人はほとんどいません。PHP は、Perl や Bash ほど強力ではありませんが、特に、次のような場合に優れた利点があります。私のような人は、PHP には詳しいが、Perl にはあまり詳しくありません。
PHP をシェル スクリプト言語として使用するには、PHP を Apache モードではなくバイナリ CGI としてコンパイルする必要があります。バイナリ CGI モードで実行するように PHP をコンパイルする際には、セキュリティ上の問題がいくつかあります。解決策については、PHP マニュアル (http://. /www.php.net)。
最初はシェル スクリプトを書くことに不快に感じるかもしれませんが、徐々に上達します。PHP を一般的な動的 Web ページ作成言語として使用する場合と、シェル スクリプト言語として使用する場合の唯一の違いは、最初のスクリプトでシェル スクリプトを開始する必要があることです。このスクリプトのプログラム パスを説明します:
PHP が HTTPHeader を出力しないように、PHP 実行ファイルの後にパラメーター「-1」を追加しました (それでも Web 上の動的 Web ページとして使用する必要がある場合)。ヘッダー関数を使用してHTTPHeaderを出力する必要があります)。もちろん、シェル スクリプトで PHP の開始タグと終了タグを使用する必要があります:
ここで、シェル スクリプト言語としての PHP の使用をよりよく理解するために例を見てみましょう:
コードをコピーします コードは次のとおりです:
print("Hello, world!n"?>)
上記のプログラムは単に「Hello, world!」をモニターに出力します。
1. シェル スクリプトの実行パラメータを PHP に渡します。
シェル スクリプトとして、プログラムを実行するときに、埋め込み配列「$argv」を使用できます。 $argv" 配列。シェル スクリプトの実行中にパラメータを読み取るのに非常に便利です ("$argv[1]" は最初のパラメータに対応し、"$argv[2]" は 2 番目のパラメータに対応します。など) 。たとえば、次のプログラム:
コードをコピーします
コードは次のとおりです:
#!/usr/local/bin/php -q$first_name = $argv[1 ];
$last_name = $argv[2];
printf("こんにちは、%s %s! 今日はどうですか?n", $first_name, $last_name?>
上記のコードは、実行時に 2 つのパラメータ、つまり姓と名を必要とします。たとえば、次のように実行します:
[dbrogdon@artemis dbrogdon]$ scriptname.ph Darrell Brogdon
シェル スクリプトがモニターに出力します:
こんにちは。 Darrell Brogdon! 今日はどうですか?
[dbrogdon@artemis dbrogdon]$
PHP が動的 Web ページ作成言語として使用される場合、「$argv」配列も含まれますが、PHP が使用される場合とはいくつかの違いがあります。シェル スクリプト言語として使用される場合、「$argv[0]」はスクリプトのファイル名に対応し、動的 Web ページの書き込みに使用される場合、「$argv[1]」は QueryString の最初のパラメータに対応します。
2. インタラクティブなシェル スクリプトを作成します。 シェル スクリプトが単独で実行され、インタラクティブ性が失われる場合は意味がありません。 PHP を使用してシェル スクリプトを作成する場合、ユーザーが入力した情報をどのように読み取るのでしょうか?残念ながら、PHP 自体にはユーザー入力情報を読み取る関数やメソッドがありませんが、他の言語の例に従って、ユーザー入力情報を読み取る関数 "read" を書くことができます:
コードをコピーします
コードは次のとおりです:
function read() {
$fp = fopen('/dev/stdin', 'r'); $input = fgets ($fp , 255); $input を返す
;
上記の関数は Unix システムでのみ使用できることに注意してください (他のシステムでは対応する変更を行う必要があります)。上記の関数は、ファイル ポインターを開き、次に 255 バイト以下の行を読み取り (これが fgets の動作です)、その後ファイル ポインターを閉じて、読み取った情報を返します。
これで、関数「read」を使用して、以前に作成したプログラム 1 を変更して、より「インタラクティブ」にすることができます。
コードをコピーします
コードは次のとおりです:
function read() {
$fp = fopen('/dev/stdin', 'r'); $input = fgets ($fp , 255);
return $input;
print("あなたの名前は何ですか? ");名前? " );
$last_name = read(); print("nこんにちは、$first_name $last_name! よろしくお願いします!n"); ?>
上記のプログラムを保存して実行すると、予想外の結果が表示されるかもしれません。入力の最後の行が 3 行になります。これは、「read」関数によって返される情報には、ユーザーの各行の末尾の改行文字「n」も含まれており、これは姓と名に保持されるため、末尾の改行文字である「read」が削除されます。関数を変更する必要があります:
コードをコピーします コードは次のとおりです:
function read() {
$fp = fopen('/dev/stdin', 'r'); fgets($fp , 255);
$input = Chop($input); // 末尾の空白を削除します
}
;
3. PHP で書かれたシェル スクリプトを他の言語で書かれたシェル スクリプトに含める:
場合によっては、PHP で書かれたシェル スクリプトを他の言語で書かれたシェル スクリプトに含める必要があります。これは実際には非常に単純です:
echo これはコードの Bash セクションです。
コードをコピーします
コードは次のとおりです:
/usr/local/bin/php -q << EOF print("これはコードンの PHP セクションです");
?> EOF
実際には、PHP を呼び出して次のコードを解析し、出力します。その後、次のコードを再試行します。
echo これはコードの Bash セクションです。
コードをコピーします
コードは次のとおりです:
/usr/local/bin/php -q << EOF $myVar = 'PHP';これはコードンの $ myVar セクションです"); ?>
EOF
2 つのコードの唯一の違いは、変数 "$myVar" が 2 回目に使用されることです。実際に PHP がエラー メッセージを表示します。「解析エラー: 2 行目で解析エラーが発生しました。」 「!これは、Bash の変数も "$myVar" であり、Bash パーサーが最初に変数を置換するためです。この問題を解決するには、各 PHP 変数の前にエスケープ文字 "" を追加する必要があるため、コードは次のようになります。次のように変更されました:
echo これはコードの Bash セクションです。
コードをコピーします コードは次のとおりです:
/usr/local/bin/php -q << EOF
$myVar = 'PHP';これはコードンの $ myVar セクションです"); ?> EOF
さて、これで PHP で独自のシェル スクリプトを作成できるようになりました。順調に進んでいることを願っています。質問がある場合は、このサイトのフォーラムで話し合うことができます。
英語版アドレス: http://www.phpbuilder.com/columns/darrell20000319.php3
http://www.bkjia.com/PHPjc/314942.htmlwww.bkjia.com
true
http://www.bkjia.com/PHPjc/314942.html
技術記事 PHP が非常に優れた動的 Web 開発言語 (高速、短い開発サイクルなど) であることは誰もが知っています。しかし、PHP が書き込みにも非常にうまく使用できることを認識している人はほんのわずかです...