ホームページ  >  記事  >  バックエンド開発  >  PHP プログラムのさまざまなデバッグ方法の紹介、PHP プログラムのデバッグ_PHP チュートリアル

PHP プログラムのさまざまなデバッグ方法の紹介、PHP プログラムのデバッグ_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:14:55962ブラウズ

PHPプログラムのさまざまなデバッグ方法の紹介、PHPプログラムのデバッグ

デバッグの定義: プログラムが適切に動作できるように、特定の方法を使用してプログラム内の欠陥の数を見つけて減らすこと。
ここでは、PHP プログラムのデバッグ方法に関するいくつかの経験を紹介します。

1. PHP独自のデバッグ機能

1. 内蔵エラー報告機能

2 つの用語: 開発環境は開発者が開発およびデバッグする環境であり、運用環境はエンド顧客が使用するオンライン環境です。 開発環境と本番環境では、エラー報告機能を個別に設定する必要があります。

(1) 開発環境

開発環境ではエラー報告を有効にする必要があります。 php.ini の設定項目と説明は次のとおりです。


コードをコピーします コードは次のとおりです:
; このディレクティブはエラー報告レベルを設定します。
; 開発値: E_ALL | E_STRICT (コーディング標準を含むすべてのエラー、警告、通知を表示します)
エラー報告 = E_ALL |
; このディレクティブは、PHP がエラーを出力するかどうか、およびどこにエラーを出力するかを制御します。 ; エラー出力も開発中に非常に役立ちます。 ; 開発値: オン
display_errors = オン



これにより、開発プロセス中にできるだけ早くエラーを見つけることができます。

たとえそれが低レベルのエラー「通知: 未定義の変数: E:phpspacetest.php の 14 行目」である場合でも、未定義の変数の使用によりバグが隠れることがよくあります。

オープンソースのクラス ライブラリを導入したときに、低レベルのエラーが大量にスローされたらどうなるのかと疑問に思うかもしれません。一般に、コード品質が良好なクラス ライブラリは、「通知」レベルのエラーを報告しません。したがって、これはクラス ライブラリの品質を識別する方法でもあります。

(2) 本番環境

本番環境ではエラーを直接出力できませんが、php.iniの設定項目と説明は以下の通りです。

コードをコピーします

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

; 本番環境では非常に危険な可能性があります。 ; エラーは実稼働サーバーに記録されることをお勧めします ; エラーが STDOUT に送信されます。 display_errors = オフ
; PHP はエラーを表示するだけでなく、
などの場所にエラーを記録することもできます。 ; サーバー固有のログ、STDERR、または error_log で指定された場所 ; ディレクティブは以下にありますが、プロダクションではエラーが表示されるべきではありません
; サーバーは引き続き監視する必要があり、ログ記録はそのための優れた方法です。 ; 生産値: オン
log_errors = オン
; 指定されたファイルにエラーを記録します。 error_log = /path/to/php_error.log




もちろん、ファイルへのログの書き込みはオプションにすぎません。他の設定もあります。マニュアルを参照してください。

実稼働環境は顧客にサービスを提供するためのものであり、ブレークポイントや印刷などを実行することはできないため、ログを選択することをお勧めします。


2. 他の言語機能の使用

(1) エラー制御演算子「@」の使用を減らす

その機能は、PHP 式の前に「@」を配置することであり、式によって生成される可能性のあるエラー メッセージは無視されます。

この式に欠陥が発生した場合、PHP の出力にはエラーが表示されないため、デバッグが難しくなります。したがって、できる限り使用しないでください。

(2) 一部の関数には独自のデバッグ機能があります

たとえば、次のコード行:

コードをコピーします

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

$fp = fsockopen(“www.example.com”, 80, $errno, $errstr, 30);

開発者はデバッグ中に $fp が空で接続が失敗すると判断しましたが、なぜ接続が失敗するのでしょうか? この関数は PHP に付属しており、これ以上詳しくデバッグすることはできません。したがって、一般に、そのような関数 (主にネットワーク通信タイプ) は、独自のデバッグ パラメーター $errno および $errstr を提供します。以下を追加できます:


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

if (!$fp) echo “$errstr ($errno)
n”;

接続失敗の理由がわかります。

これらの関数は、fsockopen、pfsockopen、stream_socket_server、stream_socket_client などです。

mysql_errno、socket_last_error、socket_strerror など、関数のデバッグに使用される関数もいくつかあります。

これらを理解し、遭遇したときにいつでも使用する必要があります。

2. デバッグツールを導入します

複雑な問題が発生した場合は、デバッグ ツールを使用できます。より成熟したものには、Xdebug や ZendDebugger などがあります。

Xdebug を例に挙げると、印刷出力スタイルと配列レベル、スタック エラー追跡、関数呼び出し追跡、コード実行カバレッジ分析、プログラム プロファイリング、リモート デバッグの制御が可能です。詳細については、http://xdebug.org/docs/ を参照してください。

Xdebug の最初の 2 つの関数は、デバッグをより便利にするために PHP の元のデバッグ関数を改良したものです。

デバッグできない複雑な問題はビジネス上の問題である可能性があります。ビジネス ロジックのデバッグについても以下で説明します。

3. ビジネスロジックエラーのデバッグ

PHP スクリプトがエラーなしで実行される場合、それは文法的なエラーがないということだけであり、ビジネス ロジックにエラーがないことを意味するわけではありません。

多くのビジネス ロジック エラーは構文エラーには反映されませんが、デバッグの考え方は PHP に付属するデバッグ機能と似ています。

いくつかの方法をご紹介します。

1. 最も基本的なデバッグ方法

まず、プログラムの期待される結果と、期待を満たしていない現在のプログラムの結果の 2 つを決定します。 両方の結果に関連するコード スニペットを探します
これらのコード スニペットを読んで、「肉眼で」エラーを見つけてみてください。 見つからない場合は、いくつかのキー変数を出力し、その値が正しいかどうかを確認して、エラーが発生した場所を特定する必要があります。 何度か試行すると、最終的にエラーが発生したポイントを特定できます。

Xdebug などのツールを使用して、変数値の変更を表示したり、デバッグ用のブレークポイントを設定したりすることもできます。

2. 操作ログを記録する

一部の複雑または特殊なビジネスには、上記の方法は適していません。たとえば、中断できないバックグラウンドで実行中のスクリプトなどです。このような場合、実行ログを記録する方が適切です。

ログに保存するポイントは慎重に選択してください。ビジネス上でより重要なポイントに加えて、通常、ネットワーク接続や通信、システム権限の問題など、エラーが発生する可能性が高い領域もあります。

3. 単体テスト

最初のポイントのようにデバッグ後にテストコードを捨てるのではなく、そのコードを使ってテストします。テスト駆動開発。

このトピックは比較的大きなものですが、ここで言及するのが適切です。興味のある学生はさらに詳しく学ぶことができます。

4. 機能しないエラーのデバッグ

非機能エラー: メモリ オーバーフローによるプログラムのハング、効率の問題によるプログラムの非常に遅い、無限ループなど。

これらの問題については、「肉眼」でコードをチェックするのはあまりにも非効率です。

そのため、デバッグ ツールを使用してプログラムのプロファイリングを実行し、プログラムのボトルネックをチェックアウトできます。

PHPプログラムをデバッグする方法

ある程度の基礎が無い場合、このような成熟したプログラムから「データベースステートメントの使い方」を学ぶことはお勧めできません。一般的に、さまざまな使い方や機能は、ある程度の基礎がないと理解するのが難しいです


PHPプログラムをデバッグする方法

目的: php+cgi+asp+jsp などをサポートするために PHP を実行するための環境を構成します (IIS+PHP+MYSQL+CF+Perl)。
オペレーティング システム: Windows2000 Advanced Server (sp3) 簡体字中国語バージョン
必要な関連ソフトウェア:
1: php -4.3.0-Win32.zip、ファイルをアップロードするのは不便です。
2 つ: ActivePerl-5.6.1.635-MSWin32-x86.msi。元のコードをダウンロードしないでください。これをサポートするためにインストールする必要はありません。 cgi をサポートしたくない場合は、このインストールをダウンロードする必要はありません。3 つ目: mysql-4.0.7-gamma-win.zip。4 つ目: MM ColdFusion MX (どちらでも構いません)これを持っているかどうかは関係ありません。主に PHP+MYSQL をサポートしています)
すべてが私のマシン上のディレクトリに基づいていると仮定します。

php-4.3.0-Win32.zipをL:\phpディレクトリに解凍します
phpディレクトリをコピーします php4ts.dllをwinnt\system32ディレクトリにダウンロードします
php.ini.distをwinntディレクトリにコピーし、拡張子を削除します.dist を取得して php.ini ファイルを取得し、メモ帳で開き、次の 2 つのパラメータを変更します:
1. extension_dir を検索し、PHP 拡張機能のディレクトリを指定します。たとえば、私のディレクトリは L:\PHP\extensions です。これ:
extension_dir = L:\PHP\extensions これらの拡張機能は、いくつかの拡張ライブラリをサポートしたい場合に変更できます。
php .ini を保存します。

mysql をインストールします。
mysql-4.0.7-gamma-win.zip 圧縮パッケージを開きます。
setup.exe をダブルクリックしてプログラムを実行します。インストール プロセス中、mysql のインストール ディレクトリの選択に注意してください (もちろん、デフォルトのディレクトリを選択することもできます)。たとえば、L:\ にインストールしました。 mysql ディレクトリに移動し、L:\mysql\bin\mysqld-nt.exe を実行します。実際には、インストールの完了後にシステムが自動的にサービスを開始します。不明な場合は、「サービス」に移動して mysql が開始されているかどうかを確認してください。

M$ Office をインストールします。ASP をサポートするためにこれをインストールする必要があるかどうかはわかりません。とにかく、システムをインストールした後、すべての Office をインストールしました。サポートしたくない場合は、ASP はそれを無視できます)

Perl インタープリターをインストールします:
ActivePerl-5.6.1.635-MSWin32-x86.msi を実行し、インストール プロセス中に L:\perl ディレクトリを選択します。もちろんデフォルトを使用できます。

MM の ColdFusion MX をインストールするには、L:\ColdFusionMX ディレクトリにインストールしました

サーバーを設定しています、ふふふ、これを書いた後に絵を描くために Photoshop を開かなければなりませんでした、言うのは難しいです

「スタート」-「プログラム」をクリックします-「管理ツール-》インターネット サービス マネージャー

このリンクをクリックすると大きな画像が表示されます

「既定の Web サイト」をクリックして右クリックし、「プロパティ」を選択してダイアログ ボックスを開きます

このリンクをクリックして表示します大きな画像

[ホーム ディレクトリ] をクリックし、次の設定を行います。 [ローカル パス] で、サイトのルート ディレクトリとして使用するマシン上のフォルダーを選択します。たとえば、私の場合は L:\WEB です。以下に示すように、右下の「設定」をクリックすると、新しいダイアログボックスが表示されます

新しいダイアログボックスで「追加」を選択します

L:\php\sapi\php4isapi.dllを参照して選択します実行可能ファイル。参照ダイアログ ボックスで、ファイルの種類として * を選択します。選択しないと、L:\php\sapi\ ディレクトリに .dll ファイルが表示されません。以下に示すように、拡張子に php を追加します。

「OK」をクリックします

L:\ perl...残りのテキストを追加します>>




http://www.bkjia.com/PHPjc/907282.html

www.bkjia.com

http://www.bkjia.com/PHPjc/907282.html技術記事 PHP プログラムのデバッグのさまざまな方法の紹介。PHP プログラムのデバッグの定義: 特定の方法を使用してプログラム内の欠陥を見つけ、正常に動作できるようにすること。 ここでそれについて話しましょう...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。