PHP が非常に優れた動的 Web 開発言語 (高速、短い開発サイクルなど) であることは誰もが知っています。しかし、PHP がシェル スクリプトを作成するための言語としても使用できることを認識している人はほとんどいません。PHP は、Perl や Bash ほど強力ではありませんが、特に、次のような場合に優れた利点があります。私のような人は、PHP には詳しいが、Perl にはあまり詳しくありません。
PHP をシェル スクリプト言語として使用するには、Apache モードではなくバイナリ CGI として PHP をコンパイルする必要があります。バイナリ CGI モードにコンパイルされた PHP にはセキュリティ上の問題がいくつかあります。解決策については、PHP マニュアル (http://www) を参照してください。 .php.net)。
最初はシェル スクリプトを書くことに違和感を感じるかもしれませんが、徐々に上達していきます。PHP を一般的な動的 Web ページ作成言語として使用する場合と、シェル スクリプト言語として使用する場合の唯一の違いは、最初にシェル スクリプトを作成する必要があることです。 Line life では、このスクリプトのプログラム パスを説明しています:
#!/usr/local/bin/php -q
PHP が HTTPHeader を出力しないように、PHP 実行ファイルの後にパラメータ「-1」を追加しました (それでも動的 Web ページを Web として使用する必要がある場合は、ヘッダー関数を使用して自分で HTTPHeader を出力する必要があります)。もちろん、シェル スクリプトで PHP の開始タグと終了タグを使用する必要があります:
次に、シェル スクリプト言語としての PHP の使用をよりよく理解するために例を見てみましょう:
#!/usr /local/ bin/php -q
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]; (" こんにちは、%s %s! 今日はどうですか?n", $first_name, $last_name);
?> 上記のコードは、実行時に姓と名という 2 つのパラメータを必要とします。次のように実行します:
[dbrogdon@artemis dbrogdon]$ scriptname.ph Darrell Brogdon
シェル スクリプトはモニターに出力します:
こんにちは、Darrell Brogdon! 今日はどうですか?
@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 を変更して、より「対話型」にすることができます:
#!/usr/local/bin/php -q
function read() {
$fp = fopen('/dev/stdin', 'r');
$input = fgets($fp, 255);
return $input; ;
}
print("あなたの名前は何ですか? ");
$first_name = read();
$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); // 末尾の空白を削除します
}
3. 書かれたシェルスクリプトを含めます他の言語の PHP スクリプト:
PHP で書かれたシェル スクリプトを他の言語で書かれたシェル スクリプトに含める必要がある場合があります。これは実際には非常に簡単な例です:
#!/bin/bash
echo これはコードの Bash セクションです。 EOF
print("これはコードンの PHP セクションです");
?>
EOF
は実際に PHP を呼び出して次のコードを解析し、それを出力します。 :
#!/bin/bash
echo これはコードの Bash セクションです
/usr/local/bin/php -q <
$myVar = 'PHP' ;
print("これはコードンの $myVar セクションです");
?> 2 つのコードの唯一の違いは、 2 回目は変数 "$myVar" を実行してみると、PHP は実際に次のエラー メッセージを表示します: 「解析エラー: 解析エラー - 行 2」!これは、Bash の変数も "$myVar" であり、Bash パーサーが最初に変数を置き換えるために、各 PHP 変数の前に "" を追加する必要があります。
エスケープ文字を使用すると、今のコードは次のように変更されます。
#!/bin/bash
echo これは、コードの Bash セクションです。
/usr/local/bin/php -q < < EOF
$myVar = 'PHP';
print("これはコードンの $myVar セクションです");
EOF を使用できますPHP 独自のシェル スクリプトを作成する時期が来ました。うまくできていることを願っています。
著作権声明: この記事はブロガーによるオリジナルの記事であり、ブロガーの許可なく複製することはできません。
上記では、PHP をシェル スクリプト言語として使用する方法を、関連する側面も含めて紹介しました。PHP チュートリアルに興味のある友人に役立つことを願っています。