PHP をシェルスクリプト言語として使用する方法

WBOY
リリース: 2016-06-13 13:17:42
オリジナル
846 人が閲覧しました

PHP をシェルスクリプト言語として使用する方法

多くの人は、スケジュールされたメール送信などのプログラムを作成するために PHP を使用することを考えたことがあるかもしれませんが、PHP を定期的に実行する方法はありません。

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 ページを Web として使用する必要がある場合は、ヘッダー関数を使用して自分で HTTPHeader を出力する必要があります)。もちろん、シェル スクリプトで PHP の開始タグと終了タグを使用する必要があります:

次に、シェル スクリプトとしての PHP の使用をよりよく理解するための例を見てみましょう。
#!/usr/local/bin/php -q
print("Hello, world!n");
?> このプログラムは単にディスプレイに「Hello, world!」と出力します。

1. シェル スクリプトの実行パラメータを PHP に渡します。
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
シェル スクリプトがディスプレイに出力します:
Hello, Darrellブログドン! 今日はどうですか?
[dbrogdon@artemis dbrogdon]$
PHP が動的 Web ページ作成言語として使用される場合、「$argv」配列も含まれますが、ここではいくつかの違いがあります。 PHP がシェル スクリプト言語として使用される場合、「$argv[0]」はスクリプトのファイル名に対応し、動的 ​​Web ページの書き込みに使用される場合、「$argv[1]」は QueryString の最初のパラメータに対応します。

2. インタラクティブなシェル スクリプトを作成します。
シェル スクリプトが単独で実行され、インタラクティブ性が失われる場合は、意味がありません。 PHP を使用してシェル スクリプトを作成する場合、ユーザーが入力した情報をどのように読み取るのでしょうか?残念ながら、PHP 自体にはユーザー入力情報を読み取る関数やメソッドがありませんが、他の言語の例に従って、ユーザー入力情報を読み取るための関数 "read" を記述することができます:
関数 read() {
$fp = fopen('/dev/stdin', 'r');
$input = fgets($fp, 255); 🎜>return $input ;
}
?>
上記の関数は Unix システムでのみ使用できることに注意してください (他のシステムでは対応する変更を行う必要があります)。上記の関数は、ファイル ポインターを開き、次に 255 バイト以下の行を読み取り (これが fgets の動作です)、その後ファイル ポインターを閉じて、読み取った情報を返します。
ここで、関数「read」を使用して、以前に作成したプログラム 1 を変更して、より「対話型」にすることができます:
#!/usr/local/bin/php -q
< ;?php
関数 read() {
$fp = fopen('/dev/stdin', 'r');
$input = fgets($fp, 255); ;
return $input;
}
print("あなたの名前は何ですか? ");
$first_name = read(); );
$last_name = read();
print("nHello, $first_name $last_name! よろしくお願いします!n");
?>実行すると、予期しないことがわかるかもしれません。入力の最後の行が 3 行になります。これは、「read」関数によって返される情報には、ユーザーの各行の末尾の改行文字「n」も含まれており、これは姓と名に保持されるため、末尾の改行文字である「read」が削除されます。関数を変更する必要があります:
function read() {
$fp = fopen('/dev/stdin', 'r');
$input = fgets($) fp, 255);
fclose ($fp); // 末尾の空白を削除します
}
? >
3. 他の言語の場合 記述されたシェル スクリプトには PHP で記述されたシェル スクリプトが含まれています:
場合によっては、他の言語で記述されたシェル スクリプトに PHP で記述されたシェル スクリプトを含める必要がある場合があります。これは実際には非常に単純です:
#!/bin/bash
echo これはコードの Bash セクションです。 ;< EOF
print("これはコードンの PHP セクションです");
EOF
は実際に次のコードを解析します。
#!/bin/bash
echo これは、コードの Bash セクションです。

/usr/local/bin/php - q << EOF
$myVar = 'PHP';
print("これはコードンの $myVar セクションです");
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 で独自のシェル スクリプトを作成できるようになりました。順調に進んでいることを願っています。


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート