PHP 错误处理,当错误是文本消息而不是抛出的异常时

标签 php error-handling try-catch

所以,我刚刚开始一些 PHP 开发。我正在尝试使用 HTML DOM 导航/解析库。我选择了 ganon,但并不真正关心我最终使用哪一个。

但我立即注意到 PHP 与我见过的所有其他编码语言有着本质上的不同。当我查看错误处理时,这一点非常明显。如果包含的类/脚本只是打印它的错误,我不能简单地用 try/catch 捕获它。我相信这就是这里正在发生的事情。我没有控制权,尽管我是告诉 file_get_dom 运行的人。它可以做任何它想做的事情,并将任何它想要的内容写入生成的 HTML 文件。

这是不好的做法吗,它肯定把我搞砸了。解决办法是什么?我可以捕获它试图写入的文本(用隐藏的 div 包围它)吗?但是,在我想阻止此类编写它想要的任何内容的同时,我还知道是否发生错误,以便我可以采取适当的步骤。

注意:进行更多测试,即使我抛出自己的错误或使用“或死”,它也没有完全达到我的预期。所以也许我也不知道如何使用 Try/Catch,尽管我已经在一些教程中看到过它与此完全一样。但即使这是一个语法错误,我最初的问题仍然存在,如何控制包含的类,以便它们不会污染我的 html 文件。

<?php
try{
 include_once('ganon.php');
}catch(Exception $e){ echo  "OUT: $e->getMessage()"; }

class GamesSummery{
  public function __construct(){

    try{
        $html = file_get_dom('web site adress');
    }catch(Exception $e){ echo "Main: $e->getMessage()"; }
  }
}    $test = new GamesSummery();

输出:

"Fatal error: Maximum execution time of 30 seconds exceeded in C:\xampp\htdocs\hockey\ganon.php on line 238"

或者

"Warning: file_get_contents(): Filename cannot be empty in C:\xampp\htdocs\hockey\ganon.php on line 19"

最佳答案

首先,增加 php.ini 的执行时间,set_time_limit: http://php.net/manual/en/function.set-time-limit.php

其次,您创建的文件名是空的,因此您需要检查或输入新的文件名:

在访问它之前,您需要创建一个文件名或写入一个新文件名。创建一个文件作为示例:

$ourFileName = "example";

$ourFileHandle = fopen($ourFileName, 'w') or die("can't open file");

fclose($ourFileHandle);

关于PHP 错误处理,当错误是文本消息而不是抛出的异常时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15283990/

相关文章:

javascript按钮在其他按钮中重复操作

php - 如何存储和解析 RRULE 数据

PHP - 从类访问函数

php - Symfony 4 : Login not working for token, 但适用于用户名和密码

php - 安卓 + PHP + MySQL

php - 将所有 mysql 错误记录到数据库或排序?

php - 代码点火器+哎呀

c# - 尝试阻止被调用两次

python - 如何捕获多种错误类型

flutter - Dart - 无法从连接流中捕获异常