(PHP 5 >= 5.1.0, PHP 7, PHP 8)
XMLReader::open — Set the URI containing the XML to parse
Set the URI containing the XML document to be parsed.
Returns true on success or false on failure. If called statically, returns an
XMLReader or false on failure.
encoding will throw a
ValueError .
E_DEPRECATED error in this case.
| Version | Description |
|---|---|
| 8.4.0 |
Passing an invalid encoding will now throw a
ValueError .
|
| 8.0.0 | XMLReader::open() is now declared as static method, but can still be called on an XMLReader instance. |
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');
?>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 ...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).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.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.