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