Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何让loadXML加载我的XML文件?_Php_Xml - Fatal编程技术网

Php 如何让loadXML加载我的XML文件?

Php 如何让loadXML加载我的XML文件?,php,xml,Php,Xml,由于某些原因,此操作给了我一个“无效的返回格式” $dom = new DomDocument('1.0', 'utf-8'); $ret = @$dom->loadXML($data); if (! $ret) { $_SESSION['error'] = 'invalid returned format'; return false; } 我使用$data=curl\u exec($socket)检索指向XML文件的链接,并且我能够通过使用此操作回显文件的内容类型,因

由于某些原因,此操作给了我一个“无效的返回格式”

$dom = new DomDocument('1.0', 'utf-8');
$ret = @$dom->loadXML($data);
if (! $ret) {
    $_SESSION['error'] = 'invalid returned format';
    return false;
}
我使用$data=curl\u exec($socket)检索指向XML文件的链接,并且我能够通过使用此操作回显文件的内容类型,因此该文件存在:

if (strpos($content_type, 'text/xml') === FALSE) {
    $_SESSION['error'] = 'invalid returned format';
    return false;
} 
我怎样才能使它不出错

谢谢

额外代码:

curl_setopt($socket, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($socket, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($socket, CURLOPT_CONNECTTIMEOUT, 15);
curl_setopt($socket, CURLOPT_TIMEOUT, (15+5));
curl_setopt($socket, CURLOPT_SSL_VERIFYHOST, 2);
$data = curl_exec($socket);
$code = curl_getinfo($socket, CURLINFO_HTTP_CODE);
$content_type = curl_getinfo($socket, CURLINFO_CONTENT_TYPE);
curl_close($socket);

if ($code != 200) {
    $_SESSION['error'] = 'Unable to talk to sm';
    return false;
}

if (strpos($content_type, 'text/xml') === FALSE) {
    $_SESSION['error'] = 'invalid returned format';
    return false;
} 

$dom = new DomDocument('1.0', 'utf-8');
$ret = @$dom->loadXML($data);
if (! $ret) {
    $_SESSION['error'] = 'invalid returned format';
    return false;
}

if ($dom->documentElement->nodeName != 'user') {
    $_SESSION['error'] = 'authentication issue';
    return false;
}
<?xml version="1.0" encoding="UTF-8"?>
<user login="myfile">
    <application id="10" name="test" description="test"> … </application>
    </user>
XML代码:

curl_setopt($socket, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($socket, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($socket, CURLOPT_CONNECTTIMEOUT, 15);
curl_setopt($socket, CURLOPT_TIMEOUT, (15+5));
curl_setopt($socket, CURLOPT_SSL_VERIFYHOST, 2);
$data = curl_exec($socket);
$code = curl_getinfo($socket, CURLINFO_HTTP_CODE);
$content_type = curl_getinfo($socket, CURLINFO_CONTENT_TYPE);
curl_close($socket);

if ($code != 200) {
    $_SESSION['error'] = 'Unable to talk to sm';
    return false;
}

if (strpos($content_type, 'text/xml') === FALSE) {
    $_SESSION['error'] = 'invalid returned format';
    return false;
} 

$dom = new DomDocument('1.0', 'utf-8');
$ret = @$dom->loadXML($data);
if (! $ret) {
    $_SESSION['error'] = 'invalid returned format';
    return false;
}

if ($dom->documentElement->nodeName != 'user') {
    $_SESSION['error'] = 'authentication issue';
    return false;
}
<?xml version="1.0" encoding="UTF-8"?>
<user login="myfile">
    <application id="10" name="test" description="test"> … </application>
    </user>

它很可能是
application/xml
,而不是
text/xml
(除非您手动将标题设置为该值,或者您的服务器出于某种奇怪的原因将其与
text/xml
关联)

如果不是这样,那么问题是您试图访问的文件的xml格式无效。使用一些在线XML验证器检查它,或者在Chrome或Firefox中使用它,它应该会显示synax错误

对未来的一些建议:

curl_setopt($socket, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($socket, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($socket, CURLOPT_CONNECTTIMEOUT, 15);
curl_setopt($socket, CURLOPT_TIMEOUT, (15+5));
curl_setopt($socket, CURLOPT_SSL_VERIFYHOST, 2);
$data = curl_exec($socket);
$code = curl_getinfo($socket, CURLINFO_HTTP_CODE);
$content_type = curl_getinfo($socket, CURLINFO_CONTENT_TYPE);
curl_close($socket);

if ($code != 200) {
    $_SESSION['error'] = 'Unable to talk to sm';
    return false;
}

if (strpos($content_type, 'text/xml') === FALSE) {
    $_SESSION['error'] = 'invalid returned format';
    return false;
} 

$dom = new DomDocument('1.0', 'utf-8');
$ret = @$dom->loadXML($data);
if (! $ret) {
    $_SESSION['error'] = 'invalid returned format';
    return false;
}

if ($dom->documentElement->nodeName != 'user') {
    $_SESSION['error'] = 'authentication issue';
    return false;
}
<?xml version="1.0" encoding="UTF-8"?>
<user login="myfile">
    <application id="10" name="test" description="test"> … </application>
    </user>
  • 您是否尝试过打印
    $content\u type
    变量?如果您尝试过,您可以自己在几分钟内调试它
  • 您可能应该区分两条相同的“返回格式无效”消息,以便知道哪一行代码会给您带来错误

  • 希望能有所帮助。

    我看到您正在检查内容类型。听起来您可能正在获取包含标题的文件,这将使其成为无效的xml。如果没有,你需要发布更多的代码,包括curl部分。我粘贴了一些额外的代码!如果你给传入的XML一个标题
    @mackiee-他实际上从curl中将XML作为字符串,所以这不是答案。@i--好的,oops:)嗯,我想知道
    简单XML\u加载\u字符串
    是否会带来同样的错误?从下面的注释#1判断,是否与这里的问题相同?是否由于某种原因,标记之间存在冲突?也许是自我评价还是什么?