PHPCon Poland 2024

XMLReader::open

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

XMLReader::openУстанавливает URI, который содержит XML-документ для разбора

Описание

public static XMLReader::open(string $uri, ?string $encoding = null, int $flags = 0): XMLReader
public XMLReader::open(string $uri, ?string $encoding = null, int $flags = 0): bool

Метод устанавливает URI, который содержит XML-документ, который будет разобран.

Список параметров

uri

URI, который указывает на документ.

encoding

Кодировка документа или null.

flags

Битовая маска, которая состоит из констант LIBXML_* констант.

Возвращаемые значения

Функция возвращает true в случае успешного выполнения или false, если возникла ошибка. При статическом вызове возвращает экземпляр класса XMLReader или false, если возникла ошибка.

Ошибки

Метод разрешается вызывать статически, но до PHP 8.0.0 тогда выдаётся ошибка уровня E_DEPRECATED.

Список изменений

Версия Описание
8.0.0 Метод XMLReader::open() объявили статическим, но его по-прежнему разрешается вызывать на экземпляре класса XMLReader.

Смотрите также

  • XMLReader::xml() - Устанавливает данные, которые содержат XML для разбора
  • XMLReader::close() - Закрывает входные данные экземпляра класса XMLReader

add a note

User Contributed Notes 5 notes

up
10
den at nurfuerspam dot de
7 years ago
If you like to read the XML from HTTP whit a POST request, you can use libxml_set_streams_context.
Example:

<?php

$param
= array('http' => array(
'method' => 'POST',
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'content' => http_build_query(array(
'post_param1' => 'value1',
'post_param2' => 'value2',
)),
));
libxml_set_streams_context(stream_context_create($param));
$reader = XMLReader::open('https://example.com/get.php?get_param=value3');

?>
up
9
dave at sophoservices dot com
7 years ago
When using the XmlReader to read local XML files, remember it the open function requests a URI. Add 'file://' to the front of the FULL path to the XML. Otherwise you may get:

PHP Warning: XMLReader::open(): Unable to open source data in ...
up
3
alvaro at demogracia dot com
9 years ago
XML can optionally declare its own encoding:

<?xml version="1.0" encoding="UTF-8"?>

You can use the $encoding parameter to provide this information (if missing) or override it (if wrong).

Output is always UTF-8 (that's how libxml works).
up
0
crungmungus at gmail dot com
15 years ago
Windows users remember to enable php_openssl.dll in your php.ini if you want to be able to use this function (and others) with a HTTPS URL.
up
-2
mood(_a_)twolate.com
7 years ago
For some reasons, the open() method keep throwing me this error :

PHP Warning: XMLReader::open(): Unable to open source data in /var/www/nota/ethamap/fat_xml.php

It doesn't make sense as the xml file target hosted on my server is perfectly reachable. Adding this line before invoking open() fixed it :

libxml_disable_entity_loader(false);

Please view https://bugs.php.net/bug.php?id=62577
It is somehow related.
To Top