ホームページ >バックエンド開発 >PHPチュートリアル >PHPエラーメカニズムの知識まとめ、PHPメカニズムまとめ_PHPチュートリアル

PHPエラーメカニズムの知識まとめ、PHPメカニズムまとめ_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-12 08:56:211073ブラウズ

PHP エラー メカニズムの知識の概要、PHP メカニズムの概要

PHP のエラー メカニズムも非常に複雑ですが、私はこのレッスンでそれを補います。

特記事項: この記事の PHP バージョンは 5.5.32 を使用しています

PHPのエラーレベル

まず、php にどのようなエラーがあるかを理解する必要があります。 php5.5の時点では、合計16のエラーレベルがあります

注: 以下のコードを試すときは、error_log:
を必ずオンにしてください。

リーリー

E_エラー

このエラーは致命的なエラーであり、このエラーが発生するとページに致命的なエラーが表示され、プログラムは実行を続行できません。

エラーの例:


リーリー

キャッチされなかった例外がある場合、このレベルもトリガーされることに注意してください。


リーリー

E_警告

この種のエラーは単なる警告であり、スクリプトは終了せず、プ​​ログラムは続行され、表示されるエラー メッセージは「警告」です。たとえば、存在しないファイルを含めます。


リーリー

E_NOTICE

この種のエラーはより軽微で、この場所はこのように書かれるべきではないことを思い出させます。これも実行時エラーです。コードが間違っていると、他の場所では問題が発生せず、現在のコンテキストでのみ問題が発生する可能性があります。


たとえば、$b 変数が存在しない場合は、それを別の変数に代入します


リーリー

E_PARSE

このエラーはコンパイル中に発生し、コンパイル中に構文エラーが見つかり、構文解析を実行できません。


例えば、以下のzは変数として設定されていません。


リーリー

E_STRICT

このエラーは PHP5 以降に導入されました。コードは実行できますが、PHP が推奨する方法で記述されていません。


たとえば、関数パラメータに ++ 記号を渡します


リーリー

E_RECOVERABLE_ERROR

このレベルは実際にはERRORレベルですが、エラー処理で捕捉されない場合はE_ERRORと同等の性能となります。


仮パラメータで型を定義しているのに、呼び出し時に間違った型が渡された場合によく発生します。そのエラー リマインダーには、E_ERROR の致命的なエラーの前に Catachable という単語もあります。


リーリー


E_非推奨

このエラーは、古いバージョンの関数を使用していることを意味しており、この関数の新しいバージョンは無効になっているか、メンテナンスされていない可能性があります。


たとえば、curl の CURLOPT_POSTFIELDS は @FILENAME を使用してファイルをアップロードします


リーリー

E_CORE_ERROR、E_CORE_WARNING

これら 2 つのエラーは PHP のエンジンによって生成され、PHP の初期化プロセス中に発生します。


E_COMPILE_ERROR、E_COMPILE_WARNING

これら 2 つのエラーは PHP エンジンによって生成され、コンパイル プロセス中に発生します。


E_USER_ERROR、E_USER_WARNING、E_USER_NOTICE、E_USER_DEPRECATED、

これらのエラーはすべてユーザーによって作成されます。これは、try catch 例外を回避する良い方法です。


リーリー

E_ALL

E_STRICT すべてのエラーおよび警告メッセージ。


エラー制御

PHP にはエラーやエラーログの表示を制御できる設定やパラメータが多数あります。最初のステップとして、PHP の間違った設定は何なのかを知る必要があります。


php+php-fpm モデルに従っています。実際には、php エラーの表示に影響する 2 つの設定ファイルがあります。1 つは php 自体の設定ファイル php.ini で、もう 1 つは php-fpm の設定ファイルです。 php-fpm.conf。


php.iniの設定
リーリー

error_reporting と display_errors の違いは何ですか?とよく質問されます。これら 2 つの機能はまったく異なります。


PHP はデフォルトでログと標準出力を実行します (fpm モードの場合、標準出力はページです)


error_reportingのパラメータはエラーレベルです。どのレベルでエラーが発生するかを示します。すべてのエラー レベルでエラーをトリガーする必要がないことを PHP に指示した場合、ログにもページにもこのエラーは表示されません。これは何も起こっていないことと同じです。


display_errors は、エラーメッセージを標準出力に表示するかどうかを制御します


log_errors は、エラー情報をログに記録するかどうかを制御します。


error_log はエラーログが表示される場所です。これは php-fpm で書き換えられることが多いため、cli と fpm のエラーログが同じファイルにないことがよくあります。


ignore_repeat_errors このフラグは、次のプログラムのように、重複したログがある場合に 1 つだけが記録されるように制御します。

リーリー
NOTICE は本来 2 回表示されますが、現在は 1 回のみ表示されます...

track_errors开启会把最后一个错误信息存储到变量里面去,这个可能在对记日志的时候会有一些用处吧。不过我觉得真是没啥用...

html_errors 和 docref_root 两个是个挺有人性化的配置,配置了这两个参数以后,我们返回的错误信息中如果有一些在文档中有的信息,就会变成链接形式。

error_reporting(E_ALL);
ini_set('html_errors', 1);
ini_set('docref_root', "https://secure.php.net/manual/zh/");
include("a2.php"); //E_WARNING 

页面显示:

能让你快速定位到我们出现错误的地方。是不是很人性~

php-fpm中的配置

error_log = /var/log/php-fpm/error.log // php-fpm自身的日志
log_level = notice // php-fpm自身的日志记录级别
php_flag[display_errors] = off // 覆盖php.ini中的某个配置变量,可被程序中的ini_set覆盖
php_value[display_errors] = off // 同php_flag
php_admin_value[error_log] = /tmp/www-error.log // 覆盖php.ini中的某个配置变量,不可被程序中的ini_set覆盖
php_admin_flag[log_errors] = on // 同php_admin_value
catch_workers_output = yes // 是否抓取fpmworker的输出
request_slowlog_timeout = 0 // 慢日志时长
slowlog = /var/log/php-fpm/www-slow.log // 慢日志记录 

php-fpm的配置中也有一个error_log配置,这个很经常会和php.ini中的error_log配置弄混。但他们记录的东西是不一样的,

php-fpm的error_log只记录php-fpm本身的日志,比如fpm启动,关闭。

而php.ini中的error_log是记录php程序本身的错误日志。

那么在php-fpm中要覆盖php.ini中的error_log配置,就需要使用到下面几个函数:

•php_flag
•php_value
•php_admin_flag
•php_admin_value

这四个函数admin的两个函数说明这个变量设置完之后,不能在代码中使用ini_set把这个变量重新赋值了。而php_flag/value就仍然以php代码中的ini_set为准。

slowlog是fpm记录的,可以使用request_slowlog_timeout设置判断慢日志的时长。

总结

我们经常弄混的就是日志问题,以及某些级别的日志为何没有记录到日志中。最主要的是要看error_log,display_errors, log_errors这三个配置,只是在看配置的时候,我们还要注意区分php.ini里面的配置是什么,php-fpm.ini里面的配置是什么。

好吧,我觉得弄懂这些配置,基本就没有php日志记录不了的WTF的问题了。

关于PHP错误机制知识汇总小编就给大家介绍到这里,希望对大家有所帮助!

您可能感兴趣的文章:

  • PHP中的错误处理、异常处理机制分析
  • php错误、异常处理机制(补充)
  • PHP 错误处理机制

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1113699.htmlTechArticlePHP错误机制知识汇总,php机制汇总 PHP的错误机制也是非常复杂的,做了几年php,也没有仔细总结过,现在就补上这一课。 特别说明:文章...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。