PHP開発基本チュートリアルエ...LOGIN

PHP開発基本チュートリアルエラー

1. 問題の紹介

以前、コードを書いていると、関数名が間違って書かれたり、セミコロンが忘れられたり、関数を再定義するとさまざまなエラーが報告されたりすることがよくありました。

開発において、エラーを表示することは開発にとって非常に有益です。エラーを表示すると、エラーを迅速に特定して問題を解決するのに役立つためです。

実稼働環境 (つまり、パブリック ネットワーク) では、Web サイト、マイクロサイト、モバイル Web サイト、モバイル インターフェイスなどに他のユーザーがアクセスできます。

エラーが表示された場合、次のことが簡単に暴露されます:

  • サーバーのファイルパスとファイルストレージの仕様

  • 個人名を使用することを好む人もおり、パスワードはソーシャルエンジニアリングを通じて逆に推測される可能性があります

  • 場合によっては、mysql データベースサーバーのアドレスも公開されることがあります
    ...etc.

上記の情報は、インターネット上で特に下心を持つ人々によって利用されやすいものです。

たとえば、次のコードでは、セミコロンを追加せずに、サーバー側のファイルストレージパス、フレームワーク情報などを完全に公開しています。次のように:

<?php
$fp = fopen('abc.txt','a+')
fwrite($fp,'abc');
fclose($fp);
?>

がエラーを報告しました:

59.png

中国語のエラー プロンプトは次のように翻訳されます:
解析エラー: 構文エラー。この事故は、/home/vagrant/Code/Laravel/public/index.php ファイルの fwrite の 5 行目付近で発生しました。

この章では、この問題を解決してみましょう


2. php.ini 設定ファイルで表示エラーを抑制します

。 phpのエラー表示状態を制御できます。

php.iniには特別な設定項目があります:

display_errors

このオプションは、エラー情報をWebページに出力するか、表示せずにユーザーに対して非表示にするかを設定します。

この値のステータスはオンまたはオフであり、値を 1 または 0 に設定することもできます。

display_errorの値が0またはoffに設定されている場合、エラーはページに表示されません。1またはonに設定されている場合、エラーメッセージが表示されます。

質問: サーバーの php.ini を変更するステータス権限がない場合はどうすればよいですか?

ini_set を使用できます。

<?php
ini_set('display_errors' , 0 );
?>

上記のコードは、php.ini の display_errors の値を変更することと同じです。ただし、これは現在の PHP コードでのみ有効です。

質問: php.iniの設定項目の状態を取得したい場合はどうすればよいですか?

ini_get (パラメータ項目)を使用してパラメータの値を取得できます。

例:

<?php
echo '服务器中display_errors的状态为' . ini_get('display_errors');
?>

注: php.ini ファイルを変更した後、サーバーを再起動する必要があります。


3. エラー報告レベル

1. エラーの種類

php 最も一般的なエラー表示:


60.png


上記のタイプ:

  • error最も深刻な問題であり、解決する必要があります。そうしないと、プログラムは実行を続行できません

  • 警告も非常に重要です。トングも解決しなければなりません。明らかに意図的なものであれば、対処する必要はありません。

  • 無視しても構いません。しかし、一部の企業では、プロジェクトの基準が特に高くなります。これは、高水準の要件を伴うプロジェクトでも解決する必要があります。通知はPHPの実行効率に影響を与えるためです。通常、関数が未定義の場合などに発生します。

  • 解析エラーとは、解決する必要がある文法エラーとスペルミスを指します

  • は、あらゆるタイプのすべてのエラーを表します

上記の展開に基づいて理解する必要があるその他のエラー項目:


61.png


学習プロセスでは、上記のタイプを理解するだけです。基本的に遭遇することはないので、もし遭遇した場合はこの本やマニュアルを確認すればわかります。

2.error_reporting レポートエラータイプ

error_reporting は、エラーレポートを指します。 php.iniにもそのようなパラメータがあります。このパラメータ。 PHP エンジンが記録、レポート、表示するエラーのタイプを決定します。

1)、php.ini の error_reporting パラメーター

error_reporting パラメーターが 0 に設定されている場合。 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 ファイルの実行の開始時に、error_reporting() 関数を使用して目標を達成できます。

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

<?php
//关闭了所有的错误显示
error_reporting(0);
//显示所有错误
//error_reporting(E_ALL);
//显示所有错误,但不显示提示
//error_reporting(E_ALL & ~ E_NOTICE);
?>

上記のコードを試して、意図的に間違ったコードを書いていないか確認してください。指定されたエラーが現在のファイルに表示されるかどうか。

[知識ポイントを拡張して理解する]: @ 記号は以前に学習した、エラーが表示されない単一行です。@ 記号は使用しないか、控えめに使用してください。

存在しないファイルを読み取り、次の PHP コードを使用して実装プロセスを示してみましょう:

<?php
//读取一个不存在的adsaf.txt文件,用@符抑制错误
@$fp = fopen('adsaf.txt','r');
?>
@符效率较低,它在php内核中的实现过程是:
<?php
//关闭错误
error_reporting(0);
 
//读取一个不存在的文件,显示错误
 
//显示错误
error_reporting(E_ALL & ~ E_NOTICE);
?>

4. ログ記録エラー

一部の企業では、特別なログ収集システムがあります。ログ収集システムは、エラー、警告、プロンプトをバックグラウンドで収集するのに役立ちます。

専用のログ収集システムを持たず、サーバーから実行ログをファイル経由で収集している企業もあります。

その中には、PHP エラーと警告を収集する必要があります。

次に、ユーザーに表示が許可されておらず、エラー報告レベルが設定されている場合、ログ システムにエラーを収集するにはどうすればよいでしょうか?という疑問が生じます。

php.ini で使用する必要がある関連する設定項目は次のとおりです。これら 2 つの構成項目は次のとおりです:


62.png


説明:

  • テーブル内の log_errors と log_errors_max_len は非常に理解しやすいです。

  • そして、error_log は、エラーが保存されるパスを指定します。設定項目のsyslogは少しわかりにくいかもしれません。 syslog はシステム記録を指します。 Windows システムはコンピュータのログ コレクター内にあります。 Linux のデフォルトは: /etc/syslog.conf

[拡張] ナレッジポイントについて学びます。 Linux システムが起動された場合、またはログ収集が変更された場合。サードパーティの専用ログ収集サーバーに保存される場合があります。

さらに、PHP はカスタム エラー ログ関数も特別に用意しています:

bool error_log (string $error message[, int $error message type = 0 [, string $storage target]])

この関数 Errorメッセージは、Web サーバーのエラー ログまたはファイルに送信できます。

一般的に使用されるエラー メッセージのタイプ:


63.png


例:

<?php
//无法连接到数据库服务器,直接记录到php.ini 中的error_log指定位置
error_log("无法连接到数据库服务器服务器");
//可以发送邮件,但是php.ini必须配置过邮件系统
error_log('可以用邮件报告错误,让运维人员半夜起床干活',1 ,'liwenkai@phpxy.com');
//记录在指定的位置
error_log("我是一个错误哟", 3, "d:/test/my-errors.log");
?>

注:
error_log でのメールの送信は初心者にとって馴染みのないものであるため、ある程度の知識を習得する必要はありません。




5. カスタムエラー処理関数

この知識の出発点は少し高いです。ほとんどの人はソフトウェア エンジニアリングやカスタム エラー処理の経験がなく、使用シナリオを想像するのが困難です。この学習ブロックをスキップしたい場合はスキップできます。私たちはそれをサポートします。

このナレッジポイントには、実際的な応用シナリオがあまりありません。独自のフレームワークを書き始める計画がある場合、または本書の最初のプロジェクトを完了している場合。

ユーザー定義のエラーによく使用される 2 つの関数:

set_error_handler (呼び出し可能な $error 処理関数)
ユーザー定義のエラー処理関数を設定する

trigger_error (string $error_msg)
ユーザー レベルのエラー/警告を生成する/お知らせ情報

<?php
//定义一个自定义的错误处理函数
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";
    //中止程序运行
    exit;
}
//使用set_error_handler 绑定用户自定义函数
set_error_handler("customError");
$test=2;
//触发自定义错误
if ($test > 1) {
    trigger_error("A custom error has been triggered");
}
?>


次のセクション
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php.cn</title> </head> <body> <?php echo "Hello World!!!"; ?> </body> </html>
コースウェア