PHP開発基本チュートリアルエラー
1. 問題の紹介
以前、コードを書いていると、関數(shù)名が間違って書かれたり、セミコロンが忘れられたり、関數(shù)を再定義するとさまざまなエラーが報(bào)告されたりすることがよくありました。
開発において、エラーを表示することは開発にとって非常に有益です。エラーを表示すると、エラーを迅速に特定して問題を解決するのに役立つためです。
実稼働環(huán)境 (つまり、パブリック ネットワーク) では、Web サイト、マイクロサイト、モバイル Web サイト、モバイル インターフェイスなどに他のユーザーがアクセスできます。
エラーが表示された場合、次のことが簡単に暴露されます:
サーバーのファイルパスとファイルストレージの仕様
個(gè)人名を使用することを好む人もおり、パスワードはソーシャルエンジニアリングを通じて逆に推測される可能性があります
場合によっては、mysql データベースサーバーのアドレスも公開されることがあります
...etc.
上記の情報(bào)は、インターネット上で特に下心を持つ人々によって利用されやすいものです。
たとえば、次のコードでは、セミコロンを追加せずに、サーバー側(cè)のファイルストレージパス、フレームワーク情報(bào)などを完全に公開しています。次のように:
<?php $fp = fopen('abc.txt','a+') fwrite($fp,'abc'); fclose($fp); ?>
がエラーを報(bào)告しました:
中國語のエラー プロンプトは次のように翻訳されます:
解析エラー: 構(gòu)文エラー。この事故は、/home/vagrant/Code/Laravel/public/index.php ファイルの fwrite の 5 行目付近で発生しました。
この章では、この問題を解決してみましょう
2. php.ini 設(shè)定ファイルで表示エラーを抑制します
。 phpのエラー表示狀態(tài)を制御できます。
php.iniには特別な設(shè)定項(xiàng)目があります:
display_errors
このオプションは、エラー情報(bào)をWebページに出力するか、表示せずにユーザーに対して非表示にするかを設(shè)定します。
この値のステータスはオンまたはオフであり、値を 1 または 0 に設(shè)定することもできます。
display_errorの値が0またはoffに設(shè)定されている場合、エラーはページに表示されません。1またはonに設(shè)定されている場合、エラーメッセージが表示されます。
質(zhì)問: サーバーの php.ini を変更するステータス権限がない場合はどうすればよいですか?
ini_set を使用できます。
<?php ini_set('display_errors' , 0 ); ?>
上記のコードは、php.ini の display_errors の値を変更することと同じです。ただし、これは現(xiàn)在の PHP コードでのみ有効です。
質(zhì)問: php.iniの設(shè)定項(xiàng)目の狀態(tài)を取得したい場合はどうすればよいですか?
ini_get (パラメータ項(xiàng)目)を使用してパラメータの値を取得できます。
例:
<?php echo '服務(wù)器中display_errors的狀態(tài)為' . ini_get('display_errors'); ?>
注: php.ini ファイルを変更した後、サーバーを再起動する必要があります。
3. エラー報(bào)告レベル
1. エラーの種類
php 最も一般的なエラー表示:
上記のタイプ:
error最も深刻な問題であり、解決する必要があります。そうしないと、プログラムは実行を続行できません
警告も非常に重要です。トングも解決しなければなりません。明らかに意図的なものであれば、対処する必要はありません。
無視しても構(gòu)いません。しかし、一部の企業(yè)では、プロジェクトの基準(zhǔn)が特に高くなります。これは、高水準(zhǔn)の要件を伴うプロジェクトでも解決する必要があります。通知はPHPの実行効率に影響を與えるためです。通常、関數(shù)が未定義の場合などに発生します。
解析エラーとは、解決する必要がある文法エラーとスペルミスを指します
は、あらゆるタイプのすべてのエラーを表します
上記の展開に基づいて理解する必要があるその他のエラー項(xiàng)目:
學(xué)習(xí)プロセスでは、上記のタイプを理解するだけです?;镜膜嗽庥訾工毪长趣悉胜い韦?、もし遭遇した場合はこの本やマニュアルを確認(rèn)すればわかります。
2.error_reporting レポートエラータイプ
error_reporting は、エラーレポートを指します。 php.iniにもそのようなパラメータがあります。このパラメータ。 PHP エンジンが記録、レポート、表示するエラーのタイプを決定します。
1)、php.ini の error_reporting パラメーター 。
error_reporting パラメーターが 0 に設(shè)定されている場合。 PHP エンジン全體のエラーは表示、出力、または記録されません。次の章で説明するログには記録されません。
すべてのエラーを表示したい場合は、次のように記述できます:
error_reporting = E_ALL
プロンプトを除外してすべてのエラーを表示したい場合は、このパラメータを次のように記述できます:
error_reporting = E_ALL & ~ E_NOTICE
Showすべてのエラー、ただし除外のヒント、互換性、將來の互換性。これは次のように記述できます:
error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
2) 場合によっては、php.ini ファイルを操作する権限がない場合、どうすればよいでしょうか。 error_reporting を制御するには?
xxxx.php ファイルの実行の開始時(shí)に、error_reporting() 関數(shù)を使用して目標(biāo)を達(dá)成できます。
デモコードは次のとおりです:
<?php //關(guān)閉了所有的錯誤顯示 error_reporting(0); //顯示所有錯誤 //error_reporting(E_ALL); //顯示所有錯誤,但不顯示提示 //error_reporting(E_ALL & ~ E_NOTICE); ?>
上記のコードを試して、意図的に間違ったコードを書いていないか確認(rèn)してください。指定されたエラーが現(xiàn)在のファイルに表示されるかどうか。
[知識ポイントを拡張して理解する]: @ 記號は以前に學(xué)習(xí)した、エラーが表示されない単一行です。@ 記號は使用しないか、控えめに使用してください。
存在しないファイルを読み取り、次の PHP コードを使用して実裝プロセスを示してみましょう:
<?php //讀取一個(gè)不存在的adsaf.txt文件,用@符抑制錯誤 @$fp = fopen('adsaf.txt','r'); ?> @符效率較低,它在php內(nèi)核中的實(shí)現(xiàn)過程是: <?php //關(guān)閉錯誤 error_reporting(0); //讀取一個(gè)不存在的文件,顯示錯誤 //顯示錯誤 error_reporting(E_ALL & ~ E_NOTICE); ?>
4. ログ記録エラー
一部の企業(yè)では、特別なログ収集システムがあります。ログ収集システムは、エラー、警告、プロンプトをバックグラウンドで収集するのに役立ちます。
専用のログ収集システムを持たず、サーバーから実行ログをファイル経由で収集している企業(yè)もあります。
その中には、PHP エラーと警告を収集する必要があります。
次に、ユーザーに表示が許可されておらず、エラー報(bào)告レベルが設(shè)定されている場合、ログ システムにエラーを収集するにはどうすればよいでしょうか?という疑問が生じます。
php.ini で使用する必要がある関連する設(shè)定項(xiàng)目は次のとおりです。これら 2 つの構(gòu)成項(xiàng)目は次のとおりです:
説明:
テーブル內(nèi)の log_errors と log_errors_max_len は非常に理解しやすいです。
そして、error_log は、エラーが保存されるパスを指定します。設(shè)定項(xiàng)目のsyslogは少しわかりにくいかもしれません。 syslog はシステム記録を指します。 Windows システムはコンピュータのログ コレクター內(nèi)にあります。 Linux のデフォルトは: /etc/syslog.conf
[拡張] ナレッジポイントについて學(xué)びます。 Linux システムが起動された場合、またはログ収集が変更された場合。サードパーティの専用ログ収集サーバーに保存される場合があります。
さらに、PHP はカスタム エラー ログ関數(shù)も特別に用意しています:
bool error_log (string $error message[, int $error message type = 0 [, string $storage target]])
この関數(shù) Errorメッセージは、Web サーバーのエラー ログまたはファイルに送信できます。
一般的に使用されるエラー メッセージのタイプ:
例:
<?php //無法連接到數(shù)據(jù)庫服務(wù)器,直接記錄到php.ini 中的error_log指定位置 error_log("無法連接到數(shù)據(jù)庫服務(wù)器服務(wù)器"); //可以發(fā)送郵件,但是php.ini必須配置過郵件系統(tǒng) error_log('可以用郵件報(bào)告錯誤,讓運(yùn)維人員半夜起床干活',1 ,'liwenkai@phpxy.com'); //記錄在指定的位置 error_log("我是一個(gè)錯誤喲", 3, "d:/test/my-errors.log"); ?>
注:
error_log でのメールの送信は初心者にとって馴染みのないものであるため、ある程度の知識を習(xí)得する必要はありません。
5. カスタムエラー処理関數(shù)
この知識の出発點(diǎn)は少し高いです。ほとんどの人はソフトウェア エンジニアリングやカスタム エラー処理の経験がなく、使用シナリオを想像するのが困難です。この學(xué)習(xí)ブロックをスキップしたい場合はスキップできます。私たちはそれをサポートします。
このナレッジポイントには、実際的な応用シナリオがあまりありません。獨(dú)自のフレームワークを書き始める計(jì)畫がある場合、または本書の最初のプロジェクトを完了している場合。
ユーザー定義のエラーによく使用される 2 つの関數(shù):
set_error_handler (呼び出し可能な $error 処理関數(shù))
ユーザー定義のエラー処理関數(shù)を設(shè)定する
trigger_error (string $error_msg)
ユーザー レベルのエラー/警告を生成する/お知らせ情報(bào)
<?php //定義一個(gè)自定義的錯誤處理函數(shù) function customError($errno, $errstr, $errfile, $errline) { //輸出錯誤消息 echo "<b>Custom error:</b> [$errno] $errstr<br />"; //輸出錯誤文件和錯誤行 echo "Error on line $errline in $errfile<br />"; echo "Ending Script"; //中止程序運(yùn)行 exit; } //使用set_error_handler 綁定用戶自定義函數(shù) set_error_handler("customError"); $test=2; //觸發(fā)自定義錯誤 if ($test > 1) { trigger_error("A custom error has been triggered"); } ?>