0

何らかの理由で、このアクションにより「無効な返された形式」が表示されます。

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

$data = curl_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 コード:

<?xml version="1.0" encoding="UTF-8"?>
<user login="myfile">
    <application id="10" name="test" description="test"> … </application>
    </user>

XML レンダリング ファイル

$applications = $user->applications();


header('Content-Type: text/xml; charset=utf-8');
$dom = new DomDocument('1.0', 'utf-8');

$user_node = $dom->createElement('user');
$user_node->setAttribute('login', $user->getAttribute('login'));

   foreach ($applications as $application) {
    $application_node = $dom->createElement('application');
    $application_node->setAttribute('id', $application->getAttribute('id'));
    $application_node->setAttribute('name', $application->getAttribute('name'));
    $application_node->setAttribute('description',     $application->getAttribute('description'));
    foreach ($application->getMimeTypes() as $mimetype) {
        $mimetype_node = $dom->createElement('mime');
        $mimetype_node->setAttribute('type', $mimetype);
        $application_node->appendChild($mimetype_node);
    }
    $user_node->appendChild($application_node);
}

$dom->appendChild($user_node);

echo $dom->saveXML();
exit(0);
4

1 に答える 1

0

ほとんどの場合、そうではapplication/xmlありませんtext/xml(ヘッダーを手動で設定するか、サーバーに何らかの奇妙な理由で関連付けられている場合を除きますtext/xml)。

そうでない場合、問題は、アクセスしようとしているファイルの無効な xml 形式です。オンラインの XML バリデーターで確認するか、Chrome または Firefox でドラッグすると、synax エラーが表示されるはずです。

将来のためのいくつかの提案:

  1. 変数を印刷しようと$content_typeしましたか?もしそうなら、自分で数分でデバッグできますか?
  2. おそらく、2 つの同一の「無効な戻り形式」メッセージを区別して、コードのどの行でエラーが発生したかがわかるようにする必要があります。

それが役立つことを願っています。

于 2013-10-10T03:09:47.987 に答える