加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

传递错误的XML时,PHP XML验证会引发致命的异常

发布时间:2020-12-16 05:34:02 所属栏目:百科 来源:网络整理
导读:我有一个快速的功能来加载 XML字符串,并根据模式验证它.当它给出格式良好的XML时,它表现得非常完美. 然而,当我破解xml语法本身时,php会抛出致命错误并杀死脚本.我正在检查loadXML函数返回值,我想要一个简单的true / false.如果xml是脏的,loadXML()将失败,我
我有一个快速的功能来加载 XML字符串,并根据模式验证它.当它给出格式良好的XML时,它表现得非常完美.

然而,当我破解xml语法本身时,php会抛出致命错误并杀死脚本.我正在检查loadXML函数返回值,我想要一个简单的true / false.如果xml是脏的,loadXML()将失败,我只能返回验证失败.我已经尝试设置一个空的错误处理程序,但它仍然杀死了脚本.

有任何想法吗?我是否需要降级错误或其他内容?

包含的参考代码(PHP):

function __maskerrors(){};

function ValidateImageXML($xml_string)
{
    /* Parse XML data string into DOM object */
    $xdoc = new DomDocument;

    /* Calculate schema location */
    $schema = dirname(realpath(__FILE__));
    $schema.= "/image-xml-schema.xsd";

    /* Mask any errors */
    set_error_handler('__maskerrors');

    /* Parse xml string,check for success */
    if($xdoc->loadXML($xml_string))
    {
        /* Validate xml against schema */
        if($xdoc->schemaValidate($schema))
        {
            /* Valid XML structure & valid against schema,return true */
            return true;
        }
        else
        {
            /* Valid XML structure,but invalid against schema. Return false */
            return false;
        }
    }
    else
    {
        /* Invalid XML structure,return false */
        return false;
    }

    /* Stop masking errors */
    restore_error_handler();
}
试试吧
libxml_use_internal_errors(true);
$xdoc->loadXml($yourXml);
libxml_clear_errors();
return $xdoc->schemaValidate($schema)

这将禁用libxml错误并允许用户根据需要获取错误信息(或清除它们)

见http://.php.net/manual/en/book.libxml.php

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读