目次
PHP エラー メカニズムの知識の概要、PHP メカニズムの概要
您可能感兴趣的文章:
ホームページ バックエンド開発 PHPチュートリアル PHPエラーメカニズムの知識まとめ、PHPメカニズムまとめ_PHPチュートリアル

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

Jul 12, 2016 am 08:56 AM
php phpcms 機構 間違い

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 までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

今まで知らなかったことを後悔している 7 つの PHP 関数 今まで知らなかったことを後悔している 7 つの PHP 関数 Nov 13, 2024 am 09:42 AM

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

See all articles