首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP错误处理,当错误是文本消息而不是抛出的异常时

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

Stack Overflow用户
提问于 2013-03-07 23:35:08
回答 3查看 422关注 0票数 2

所以,我第一次开始了一些PHP开发。我正在尝试使用HTML导航/解析库。我选择了加农,但并不在乎我用的是哪一种。

但我立即注意到,PHP与我所见过的所有其他编码语言都有根本的不同。当我看错误处理时,这是非常明显的。如果包含的类/脚本只是打印它的错误,我就不能简单地用try/catch捕获它。我相信这就是这里发生的事。我没有控制权,尽管是我让file_get_dom跑的。它可以做它想做的任何事情,也可以编写它想要的任何结果HTML文件。

这是一种糟糕的做法,它确实把我搞砸了。解决办法是什么?我能捕捉到它试图写的文本(用隐藏的div包围它)吗?但是,在我想阻止这个类编写它想写的东西的同时,我也知道如果发生了错误,那么我可以采取适当的步骤。

注意:做更多的测试,即使我抛出自己的错误或使用“或死”,它并不是做我所期望的,确切地说。因此,也许我也不知道如何使用Try/Catch,即使我在几个教程中看到过这样的用法。但是我最初的问题仍然是,即使这是语法错误,如何控制包含的类,使它们不会污染我的html文件。

代码语言:javascript
复制
<?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();

产出(S):

致命错误:在第238行C:\xampp\htdocs\hockey\ganon.php中超过30秒的最大执行时间

警告: file_get_contents():文件名不能在第19行的C:\xampp\htdocs\hockey\ganon.php中为空

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-07 23:42:41

对于第一个问题:在php中有一些致命的错误,比如语法错误(和其他错误),无法捕获。在这种情况下,程序将立即终止。

对于所有其他方面,都有一种使用set_error_handler()的方法。

我已经为您准备了一个自定义错误处理程序函数,它将所有错误或警告转换为异常。注意,函数的输出(我注册它的方式)取决于php.ini设置error_reporting

首先注册错误处理程序:

代码语言:javascript
复制
set_error_handler('errorHandler', ini_get('error_reporting'));

下面是函数本身:

代码语言:javascript
复制
function errorHandler(
            $errno,
            $errstr,
            $errfile = null,
            $errline = null,
            $errcontext = null
) {
    $message = sprintf("%s: %s, file: %s, line: %s",
        $errno, $errstr, $errfile, $errline
    );
    // -->
    throw new ErrorException($message, 0, $errno, $errfile, $errline);
}

您可以使用以下示例尝试代码:

代码语言:javascript
复制
try {
   $a = 1 / 0; // will throw a warning
} catch ( Exception $e) {
   echo $e->getMessage();
}
票数 1
EN

Stack Overflow用户

发布于 2013-03-07 23:42:27

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

其次,所创建的文件名为空,因此需要检查或放置一个新的文件名:

您需要在访问文件名之前创建一个文件名或编写一个新的文件名。例如,创建一个文件:

$ourFileName =“示例”; $ourFileHandle = fopen($ourFileName,'w')或模(“无法打开文件”); fclose($ourFileHandle);

票数 2
EN

Stack Overflow用户

发布于 2013-03-07 23:43:13

  • 将(可捕获的)错误转换为异常:创建一个这样做的函数&使用set_error_handler()
  • 防止来自坏编码者的输出:使用ob_start() & ob_end_clean(),但更重要的是,试着找出那个编码器住在哪里,并在他的门口拉屎。
  • 在库中使用exit()die()的人:立即转储库,根本没有理由信任该代码。

不幸的是,致命的错误往往是..。致命的。没有例外。但这是我们有error_log ( on ) & display_errors (在生产中关闭,在开发中)指令的地方。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15283990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档