ホームページ  >  記事  >  php教程  >  PHP技術開発スキルの共有

PHP技術開発スキルの共有

WBOY
WBOYオリジナル
2016-06-13 12:18:071069ブラウズ

1. PHP の動作効率の向上
PHP の利点の 1 つは速度が速いことであり、一般的な Web アプリケーションには十分であると言えます。ただし、サイトのトラフィックが多い、帯域幅が狭い、またはその他の要因によりサーバーのパフォーマンスのボトルネックが発生する場合は、PHP の速度をさらに向上させる他の方法を考える必要がある場合があります。
1.1. コードの最適化
1. i=i 1 の代わりに i =1 を使用します。 C/C習慣に適合し、非常に効率的です。
2. 可能な限りPHPの内部関数を使用する。自分で関数を書く前に、関連する関数がないかマニュアルを詳しく調べてください。そうでないと、無駄な作業になります。
3. 一重引用符で囲まれた文字列を使用できる場合は、一重引用符で囲まれた文字列を使用するようにしてください。一重引用符で囲まれた文字列は、二重引用符で囲まれた文字列よりも効率的です。
4. 配列を走査するには、while の代わりに foreach を使用します。配列を走査するとき、foreach の効率は while ループの効率よりも大幅に高く、reset 関数を呼び出す必要はありません。 2 つのトラバーサル メソッドは次のとおりです。
プログラム 1:

コードをコピー コードは次のとおりです:


リセット($arr);
while (list($key, $value) = each ($arr)) {
echo "キー: $key; 値: $valuen";

プログラム 2:

コードをコピー コードは次のとおりです:

foreach ($arr as $key => $value) {
echo "Key: $key; Value: $valuen";


1.2. HTTP1.1 プロトコルをサポートするページ圧縮と送信。これは、サーバーがページを圧縮してクライアントに送信し、そこで解凍されてクライアントに表示されることを意味します。サーバー側で送信する方法は 2 つあります。1 つは、送信するときに、圧縮されたページをクライアントに送信するだけです。これは、静的な Web ページが多い場合に適しています。ほとんどのサイトでは、動的ページの数が多くなりますが、クライアントに送信されるページの多くは実際には存在しないため、クライアントからのユーザー要求を受信したときにサーバーによって動的に生成されるため、この方法は適していません。生成された動的ページは、圧縮してクライアントに送信する前に、まず生成する必要があります。 PHP バージョン 4.0.4 以降では、php.ini ファイルに設定行「output_handler = ob_gzhandler」を追加できるため、動的に生成された各ページはクライアントに送信される前に圧縮されますが、 PHP公式サイト, このパラメータは、PHPの動作異常を引き起こしやすいため、「zlib.output_compression = on」パラメータと同時に使用することはできません。また、PHPプログラムの動的に生成されたページのみを圧縮できます。多数の静的ページ、特に画像ファイルでは機能しません。ただし、mod_gzip モジュールは、静的ページをクライアントに送信する前に圧縮する機能を Apahe に提供します。その圧縮率は最大 10 に達し、通常は 3 に達します。これは、Web サイトの送信速度が向上したことを意味します。 3回以上。 mod_gzip を使用するには、それに応じて Apache を設定する必要があります。 httpd.conf ファイルにいくつかのパラメータを追加する必要があります。




コードをコピーします

コードは次のとおりです。 : mod_gzip_on はい (モジュールが有効かどうか)

mod_gzip_minimum_file_size 1002 (最小圧縮ファイル サイズ)

mod_gzip_maximum_file_size 0 (最大圧縮ファイル サイズ、0 は制限なしを意味します)
mod_gzip_maximum_inmem_size 60000 (圧縮ファイルの最大サイズ) がメモリを占有します)
mod_gzip_item_include ファイル "..gif102SINA>DOUBLE_QUOTATION (gif で終わるファイルは圧縮して送信する必要があります)
mod_gzip_item_include ファイル ".txt102SINA>DOUBLE_QUOTATION
mod_gzip_item_include ファイル」。 html102S INA>DOUBLE_QUOTATION
mod_gzip_item_exclude ファイル ".css102SINA> DOUBLE_QUOTATION


1.3. ファイルのキャッシュ
この方法は、ユーザーのリクエストを受け取ってもすぐに結果をユーザーに返さないという共通の特徴があるため、PHP や PERL などの CGI プログラムでよく使用されます。実行結果は、インタープリタによる解釈と実行の後にクライアントに返されます。これには通常、データベースへのアクセスが伴います。これにより問題が発生します。2 人のユーザーが同じページにアクセスすると、システムは 2 つのリクエストを別々に処理しますが、実際には 2 つの操作がまったく同じである可能性があり、目に見えないほどシステムの負荷が増加します。したがって、通常の解決策は、ユーザーが初めてページにアクセスしたときにシステム メモリにスペースを空け、ユーザーが再度そのページにアクセスしたときに、システムがそのページを直接削除することです。再解釈や実行を行わずにメモリから呼び出されるこのメモリ空間はキャッシュと呼ばれます。現在人気のあるキャッシュ管理プログラムは、Zend Technologies の Zend Cache です。
2. 外部システム コマンドを実行します
サーバー側スクリプト言語として、PHP は、単純または複雑な動的 Web ページの作成などのタスクを完全に実行できます。ただし、常にそうとは限りません。場合によっては、特定の機能を実装するために、半分の労力で 2 倍の結果を得ることができるように、オペレーティング システムの外部プログラム (またはコマンド) に頼らなければなりません。
PHP で外部コマンドを呼び出すには、次の 3 つの方法を使用できます:
2.1. PHP が提供する特別な関数を使用する
PHP は、外部コマンドを実行するために合計 3 つの特別な関数を提供します: system() 、 exec()、パススルー()。
System()
プロトタイプ: string system (string command [, int return_var])
system() 関数は、他の言語の関数と似ており、指定されたコマンドを実行し、結果を出力します。 2 番目のパラメーターはオプションであり、コマンドの実行後にステータス コードを取得するために使用されます。
例:
system("/usr/local/bin/webalizer/webalizer");
exec()
プロトタイプ: string exec (string command [, string array [, int return_var]] )
exec() 関数は system() と似ていますが、指定されたコマンドを実行しますが、結果は出力せず、結果の最後の行を返します。コマンド結果の最後の行のみを返しますが、2 番目のパラメーター配列を使用すると、配列の末尾に結果を 1 行ずつ追加することで完全な結果を取得できます。したがって、配列が空でない場合は、呼び出す前に unset() を使用して配列をクリアするのが最善です。第3パラメータは第2パラメータを指定した場合のみ、コマンド実行時のステータスコードを取得できます。
例:

コードをコピー コードは次のとおりです:


exec("/bin/ls -l" );
exec("/bin/ls -l", $res);

passthru()
プロトタイプ: void passthru (string command [, int return_var])
passthru() はコマンドを呼び出すだけで結果は返さず、コマンドの実行結果をそのまま標準出力装置に直接出力します。 。したがって、 passthru() 関数は、pbmplus (元の画像のバイナリ ストリームを出力する、Unix で画像を処理するツール) のようなプログラムを呼び出すためによく使用されます。コマンド実行時のステータスコードも取得できます。
例:

コードをコピー コードは次のとおりです:

header("Content-type: image/gif ");
passthru("./ppmtogif Hunte.ppm");

2.2. Popen() 関数を使用してプロセスを開きます
上記のメソッドは、単純にコマンドを使用できますが、コマンド Interaction と一緒に使用することはできません。ただし、コマンドに何かを入力する必要がある場合があります。たとえば、Linux システム ユーザーを追加する場合、su を呼び出して現在のユーザーを root に変更する必要があり、su コマンドはコマンド ラインに root パスワードを入力する必要があります。この場合、明らかに上記の方法を使用することはできません。
Popen() 関数は、指定されたコマンドを実行するためにプロセス パイプを開き、ファイル ハンドルを返します。ファイルハンドルが返されるので、読み書きが可能です。 PHP3 では、この種のハンドルは書き込みまたは読み取りの 1 つの操作モードでのみ使用できますが、PHP4 以降は読み取りと書き込みを同時に行うことができます。ハンドルが 1 つのモード (読み取りまたは書き込み) で開かれていない限り、ハンドルを閉じるには pclose() 関数を呼び出す必要があります。
例 1
$fp=popen("/bin/ls -l", "r");
例 2

コードをコピー コードは次のとおりです:

/* PHP でシステム ユーザーを追加する方法
以下は、james という名前のユーザーを追加するルーチンです。
root パスワードは非常に重要です。良い。参考のみ
*/
$sucommand = "su --login root --command";
$useradd = "useradd ";
$rootpasswd = "verygood"; = "ジェームズ";
$user_add = sprintf("%s "%s %s"",$sucommand,$useradd,$user)
$fp = @popen($user_add,"w"); ;
@fputs($fp,$rootpasswd)
@pclose($fp);
3. 適切なプログラミング スタイルを開発する
多くの場合、PHP の最も価値のある機能は、その緩い構文である可能性があります。 PHP が広く使用されているのは、経験の浅い Web 開発者の多くが計画、一貫性、ドキュメント化についてあまり心配することなく強力なアプリケーションを作成できるためです。残念ながら、上記の特性により、多くの PHP ソース コードは肥大化して読みにくく、さらには保守が不可能になってしまいます。コードの保守性を決定する重要な要素は、コードの形式とコメントです。プロジェクトのすべてのコードは、一貫した方法で編成する必要があります。以下では、PHP プログラムで適切なコーディング スタイルを開発する方法について説明します。
3.1. インデント
開発者が作成するすべてのコードは、正確にインデントして記述する必要があります。これは、コードの可読性を向上させるための最も基本的な対策です。コードにコメントを付けない場合でも、コードを他の人が理解しやすくするためにインデントは非常に役立ちます。
3.2. コメントを追加する
プログラミング時にコメントを追加することは良い習慣です。PHP では、コメントを追加する方法は C 言語のコメント構文と同じです。スクリプト。 「/*」と「*/」を使用して段落をコメントアウトできます。ダブルスラッシュ「//」はコメント文字として使用できます。
3.3. 制御構造
これは個人の好みに大きく依存します。分岐ステートメントのない制御構造コードが依然として多く見られるため、可読性が非常に低くなります。たとえば、分岐のない IF ステートメントを使用すると、可読性が悪化するだけでなく、他の人がプログラムを変更したときに可読性が低下します。多くのバグを引き起こします。次の例を見てください:
悪い例:
if ($a == 1) echo 'A は 1 に等しかった';
これは非常に読みにくいです。それはうまくいきますが、あなた以外には誰もそれを評価しません。 改善された例:
if ($a == 1)
echo 'A was等しい';
これで、少なくともこのコードは読み取れるようになりましたが、まだ保守性は高くありません。 $a==1 のときに追加のイベントを発生させたい場合、または分岐を追加する必要がある場合はどうすればよいでしょうか? 後のプログラマーが中括弧や else キーワードを追加するのを忘れた場合、プログラムにバグが発生します。
完璧な例

コードをコピー コードは次のとおりです:


if (($a == 1) && ($ b==2)) {
echo 'A は 1 に等しかった' //他のコードを追加するのは簡単です
} elseif (($a == 1) && ($b==3); )) { //その他の操作
}


また、elseif の実行セクションには、このステートメントと関数呼び出しを区別するためのスペースがあることに注意してください。はステートメントではなくコメントのみです。一見冗長に見えますが、将来プログラムを保守するプログラマーにとって非常に便利なヒントを提供し、機能を追加するのに非常に役立ちます。
3.4. Includeを使って関数のモジュール化を実現
よく使う関数をPHPファイルに格納しておきたい場合は、その関数を含むPHPファイルを呼び出し元の関数に含めます。このとき、Include 機能を使用できます。具体的な構文は次のとおりです:
include($FileName);
使用するときは、次の点に注意する必要があります。
1. 自己包含は避けるべきです。つまり、include がある場合、File1 には File1 が含まれます。ステートメントを複数のファイルに含める場合、間接的な自己包含は避けるべきです。たとえば、File1 には File2 が含まれ、File2 には File3 が含まれ、File3 には File1 が含まれます。2. インクルードされるスクリプト言語のタイプは PHP である必要があります。言語タイプまたはスクリプト ステートメント セグメント。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。