php的libxml函数

来源:互联网 发布:淘宝未发货前退款 编辑:程序博客网 时间:2024/05/16 05:52

打算给初学者分享下微信,从头看微信文档,解析xml时,出现了一个函数:libxml_disable_entity_loader(),没见过。。。


就决定简单的了解下,可查看我转载的文章:

XML注入攻击


接着,看到libxml函数就几个,顺带简单的看看,就翻译了下(也不知道最近咋了,喜欢用我这很垃圾的英文翻译。。。):

libxml函数库:

1.简介:

PHP5.1.0开始,使用这些函数及常量,“函数参考>xml”下的这些核心扩展都依赖libxml扩展:
DOM,libxml,SimpleXML,SOAP,WDDX,XSL,XML,XMLReader,XMLRPC和XMLWriter

2.预定义常量不少,不解释

3.libXMLError,是一个class,libxml可能抛出各种错误,api也查看官方文档,看来php只是简单给封装了下。

4.libxml函数

libxml_clear_errors() - 清空libxml的错误缓冲区

libxml_get_errors() - 从libxml错误缓冲区中获取错误数组(数组每个元素都是一个libXMLError错误对象)

如果libxml的错误缓冲区有任何错误,该函数返回以libXMLError错误对象为元素的一个数组,否则返回一个空数组。

libxml_get_last_error() - 返回libxml最后的错误

如果libxml的错误缓冲区有任何错误,返回最后的一个libXMLError错误对象,否则返回false

libxml_use_internal_errors([bool $use_errors = false]) - 禁用libxml错误,允许用户获取需要的错误信息

    • 禁用标准的libxml错误,启用用户错误处理
    • 设置为true - 启用用户错误处理
    • 设置为false - 禁用用户错误处理
    • 禁用用户错误处理,也会清空所有现存的libxml的错误
    • 返回$use_errors之前的设定值

libxml_disable_entity_loader([bool $disable = true]) - 禁止加载外部实体

禁用/启用记载外部实体

返回$disable之前的设定值

libxml_set_external_entity_loader(callable $resolver_function) - 改变默认的外部实体加载器

callable - 3个参数的回调函数。二个字符串(一个public id和一个system id),以及一个context作为第3个参数(一个有4个元素的数组)。回调函数应该返回一个资源(从打开的资源中得到一个字符串)或者null。

手册上的实例:

<?php$xml = <<<XML<!DOCTYPE foo PUBLIC "-//FOO/BAR" "http://example.com/foobar"><foo>bar</foo>XML;$dtd = <<<DTD<!ELEMENT foo (#PCDATA)>DTD;libxml_set_external_entity_loader(    function ($public, $system, $context) use($dtd) {        var_dump($public);        var_dump($system);        var_dump($context);        $f = fopen("php://temp", "r+");        fwrite($f, $dtd);        rewind($f);        return $f;    });$dd = new DOMDocument;$r  = $dd->loadXML($xml);var_dump($dd->validate());?>
输出:

string(10) "-//FOO/BAR"string(25) "http://example.com/foobar"array(4) {    ["directory"]    => NULL    ["intSubName"]   => NULL    ["extSubURI"]    => NULL    ["extSubSystem"] => NULL}bool(true)



libxml_set_streams_context(resource $streams_context) - 为下一个 libxml 文档的加载或写入,设置流环境

streams_context - 流环境资源(通过 stream_context_create() 创建)

手册上的实例:

<?php$opts = array(    'http' => array(        'user_agent' => 'PHP libxml agent',    ));$context = stream_context_create($opts);libxml_set_streams_context($context);// request a file through HTTP$doc = DOMDocument::load('http://www.example.com/file.xml');?>


0 0
原创粉丝点击