是不是可以使用PHP并获取XML文件?

时间:2015-01-29 21:44:08

标签: php xml

为什么我不能在.xml文件中使用PHP同时使用SimpleXMLElement获取它?当一个人工作时,另一个人没有工作。

示例:如果我在.xml文件中使用PHP,如

file.xml.php

<?php
require('db.php');
header('Content-Type: application/xml; charset=utf-8');

$updated_date = date('l', filemtime('file.xml.php'));
?>
<?xml version="1.0" encoding="UTF-8" ?>
<content>
         <value name="Content 1" val="Value 1"></value>
         <value name="Content 2" val="Value 2"></value>
         <value name="Content 3" val="Value 3"></value>
         <value name="Last Updated" val="<?php echo $updated_date; ?>"></value>
</content>

工作正常。但是,如果我使用SimpleXMLElement来获取文件:

$xmlstring = file_get_contents('file.xml');
$xmlObject = new SimpleXMLElement($xmlstring);

foreach($xmlObject->children() as $node) {
    $arr = $node->attributes();
    echo $arr['name'] . ':' . $arr['val'];
} 

它给了我这个错误:

PHP Fatal error:  Uncaught exception 'Exception' with message 'String could not be parsed as XML' in /var/www/html/get_xml.php:336\nStack trace:\n#0 /var/www/html/get_xml.php(336): SimpleXMLElement->__construct('<?php??require(...')\n#1 {main}\n

我知道它告诉我无法读取xml文件。但是,当我通过自己的URL读取xml文件时,它可以正常工作,就像它只是另一个xml文件一样。

是不是可以在.xml文件中使用PHP并同时抓取它们?没有PHP,该文件对我来说没用。除非我能使用普通名称,否则它不会显示错误。我知道它必须对要求做点什么。

1 个答案:

答案 0 :(得分:1)

当您获取文件时,您需要确保它首先由PHP实际解析。如果您只是从磁盘获取PHP / XML源文件,它仍将包含PHP代码:代码不会被执行,这意味着您只会拥有一个无效的XML文件。 / p>

正如您已经发现的那样,在浏览器中抓取文件,没关系:您可以使用file_get_contents($urlToTheXmlPhpFile)通过PHP模拟这个。请注意,这必须是通过网络服务器访问该文件的网址:如果您只是使用本地磁盘上文件的路径,这将无法正常工作,您将遇到同样的问题 - PHP不会执行该文件,因此它仍然是XML和PHP的格式错误组合。

澄清:

file_get_contents('myfile.xml.php'); // Malformed - Attempting to parse source code.

file_get_contents('http://mydomain/myfile.xml.php'); // This should work.

如果您只是通过本地文件系统而不是通过网络服务器尝试require PHP XML文件,则可以使用eval来执行PHP代码。但请谨慎,因为这有可能为任何能够更改XML文件的人执行任意代码执行。

$validXmlString = eval(file_get_contents('myfile.xml.php')); // Be careful with this.