php的libxml函数

打算给初学者分享下微信,从头看微信文档,解析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');

?>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值