你还不会处理 PHP 的错误么?PHP 中错误相关知识看这一篇就够了

2023-11-18 14:20:02 浏览数 (2)

PHP | 错误类型

错误是程序中的故障或错误。它可以有多种类型。由于错误的语法或错误的逻辑,可能会发生错误。这是一种错误或对代码的了解不正确的情况。

PHP 中存在多种类型的错误,但基本上包含四种主要错误类型

解析错误或语法错误:

示例:
代码语言:javascript复制
<?php 
$x = "geeks"; 
y = "Computer science"; 
echo $x; 
echo $y; 
?> 
错误:
代码语言:javascript复制
PHP 解析错误:语法错误,意外的“=”
在/home/18cb2875ac563160a6120819bab084c8.php第3行

解释:在上面的程序中,第 3 行缺少 $ 符号,因此会给出错误消息。

致命错误:

这是 PHP 编译器理解 PHP 代码但识别未声明函数的错误类型。这意味着在没有函数定义的情况下调用函数。

例子:
代码语言:javascript复制
<?php 

function add($x, $y) 
{ 
	$sum = $x   $y; 
	echo "sum = " . $sum; 
} 
$x = 0; 
$y = 20; 
add($x, $y); 

diff($x, $y); 
?> 
错误:
代码语言:javascript复制
PHP Fatal error:  Uncaught Error: 
Call to undefined function diff() 
in /home/36db1ad4634ff7deb7f7347a4ac14d3a.php:12

Stack trace:
#0 {main}
  thrown in /home/36db1ad4634ff7deb7f7347a4ac14d3a.php on line 12

解释:在第 12 行中,调用了函数,但函数的定义不可用。所以它给出了错误。

警告错误:

警告错误的主要原因是包含丢失的文件。这意味着 PHP 函数调用了丢失的文件。

例子:
代码语言:javascript复制
<?php 

$x = "thisis demo"; 

include ("gfg.php"); 

echo $x . "Computer science portal"; 
?> 
错误
代码语言:javascript复制
PHP Warning:  include(gfg.php): failed to 
open stream: No such file or directory in 
/home/aed0ed3b35fece41022f332aba5c9b45.php on line 5
PHP Warning:  include(): Failed opening 'gfg.php'
 for inclusion (include_path='.:/usr/share/php') in 
/home/aed0ed3b35fece41022f332aba5c9b45.php on line 5

说明:该程序调用了一个未定义的文件 gfg.php,该文件不可用。所以它会产生错误。

警告错误:

与警告错误类似。这意味着程序包含错误,但允许执行脚本。

例子
代码语言:javascript复制
<?php 

$x = "this for demo"; 

echo $x; 

echo $geeks; 
?> 
错误:
代码语言:javascript复制
PHP 警告:未定义的变量:geeks 在
/home/84c47fe936e1068b69fb834508d59689.php 第 5 行

说明:该程序使用未声明的变量$geeks,因此会给出错误消息。

PHP错误常量及其描述:

  • E_ERROR :导致脚本终止的致命错误
  • E_WARNING :不会导致脚本终止的运行时警告
  • E_PARSE :编译时解析错误。
  • E_NOTICE :由于代码错误引起的运行时通知
  • E_CORE_ERROR : PHP 初始启动(安装)期间发生的致命错误
  • E_CORE_WARNING : PHP 初始启动期间发生的警告
  • E_COMPILE_ERROR :致命编译时错误指示脚本问题。
  • E_USER_ERROR :用户生成的错误消息。
  • E_USER_WARNING :用户生成的警告消息。
  • E_USER_NOTICE :用户生成的通知消息。
  • E_STRICT:运行时通知。
  • E_RECOVERABLE_ERROR :可捕获的致命错误,指示危险错误
  • E_DEPRECATED :运行时通知。

PHP 中的错误处理

PHP 用于 Web 开发。PHP 中的错误处理几乎与所有编程语言中的错误处理类似。PHP 中的默认错误处理将给出文件名行号和错误类型。

处理PHP错误的方法:

  • 使用 die() 方法
  • 自定义错误处理

基本错误处理:使用 die() 函数die() 函数打印一条消息并从当前脚本退出。 句法:

代码语言:javascript复制
<?php

// Php code showing default error handling

$file = fopen("geeks.txt", "w");
?>

注意:运行上面的代码并且geeks.txt文件不存在,那么它将显示运行时错误消息。 

运行时错误:
代码语言:javascript复制
PHP 警告:fopen(geeks.txt):无法打开流:权限被拒绝
在 /home/dac923dff0a2558b37ba742613273073.php 第 2 行

为了防止此错误,请使用 die() 函数。下面是 die() 函数的实现:

示例:
代码语言:javascript复制
<?php

// PHP code to check errors

// If file is not present 
// then exit from script
if( !file_exists("demo.txt") ) {
	die("File is not present");
}

// If file is present
// then continue
else {
	$file = fopen("demo.txt", "w");
}
?>

注意:如果demo.txt文件不存在,则会显示输出。 

输出 :

代码语言:javascript复制
File is not present

自定义错误处理:

在 PHP 中创建自定义错误处理程序非常简单。创建一个在 PHP 发生错误时可以调用的函数。

代码语言:javascript复制
error_function( $error_level, $error_message, $error_file, $error_line, $error_context)

参数:该函数接受上面提到的五个参数,如下所述:  

  • $error_level:必填参数,必须为整数。有预定义的错误级别。
  • $error_message:必填参数,是用户要打印的消息。
  • $error_file:可选参数,用于指定发生错误的文件。
  • $error_line:可选参数,用于指定发生错误的行号。
  • $error_context:它是可选参数,用于指定发生错误时包含每个变量及其值的数组。

error_level:下面列出了可能的错误级别: 

  • 1:.E_ERROR:致命的运行时错误脚本的执行已停止
  • 2:E_WARNING:非致命运行时错误脚本的执行已停止
  • 4:E_PARSE:编译时错误,由解析器生成
  • 8 :E_NOTICE :脚本发现一些可能是错误的东西
  • 16 :E_CORE_ERROR :脚本初始启动期间发生的致命错误
  • 32 :E_CORE_WARNING : 脚本初始启动期间发生的非致命错误
  • 8191 :E_ALL :所有错误和警告

set_error_handler() 函数:创建 myerror() 函数后需要设置自定义错误处理程序,因为 PHP 以正常方式处理它,但如果用户执行自定义错误处理,则用户必须将其设置为参数并将 myerror 函数作为字符串传递。

例子:

代码语言:javascript复制
<?php

// Creates my error function which prints message
//to user
function myerror($error_no, $error_msg) {
	echo "Error: [$error_no] $error_msg ";
	echo "n Now Script will end";
	
	// When error occurred script has to be stopped
	die();
} 

// Setting set_error_handler
set_error_handler("myerror");

$a = 10;
$b = 0;

// This will generate error
echo($a / $b);;
?>
结论:

总是尝试使用自定义错误处理来进行错误处理,因为它会根据用户显示更多对用户有帮助的指定消息。如果未使用自定义错误处理来处理错误,则发生错误,则默认情况下脚本将停止,但如果使用自定义错误处理来处理错误,则可以在显示错误消息后继续执行脚本。

如何显示 PHP 错误?

PHP 中有四种显示错误的方法,如下所示: 

  • error_reporting:不显示E-STRICT、E-NOTICE和E_DEPRECATED级别的错误,显示所有其他级别的错误。
  • display_errors:默认值为“off”。将其设置为“开”。
  • log_errors:默认值为“on”,表示是否应该进行错误日志记录。
  • error_log string:它设置应记录脚本错误的文件的名称。

示例:要显示 PHP 中的错误,最快、最简单的方法是将以下行添加到代码中。  

代码语言:javascript复制
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL); 
  • ini_set: ini_set 函数将尝试覆盖 PHP ini 文件中的配置。
  • display_errors:这是一个指令,决定错误是向用户显示还是保持隐藏。
  • display_startup_errors:该指令用于查找 PHP 启动序列期间的错误。ini_set 函数可以覆盖的指令列表可以在官方文档中找到。

这两个指令不显示解析错误。

方案一:

代码语言:javascript复制
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

include("gfg.php");
?>

要显示错误(包括解析错误),必须在 php.ini 中进行以下更改并重新启动 php-fpm、apche2  

代码语言:javascript复制
显示错误=开

方案2:

代码语言:javascript复制
<?php 

for($i = 0; $i <= 5 $i  ) 
{
	echo $i;
}
?>

输出:

  • 在 php.ini 文件中禁用 display_error 时的输出:
  • 启用display_error并重新启动时的输出:

上述指令将显示在浏览器上加载网站时遇到的任何 PHP 错误。当站点处于活动状态时,应禁用显示错误,以防止不在开发环境中时出现任何安全 问题

0 人点赞