0

CURLとプロキシを使用していくつかのxmlファイルを取得していますが、xml(simplexml_load_string)をロード/使用しようとすると、XMLドキュメントの一部しか通過せず失敗することがあります。

私は次のようなことを考えました。

    if(curl_errno($ch))
    {
        $error = curl_error($ch);
        // handle error
    }

CURLerrnoを介してこのソートエラーをキャッチします。

CURLE_PARTIAL_FILE(18)

ファイル転送が予想よりも短かったり大きかったりしました。これは、サーバーが最初に予想される転送サイズを報告し、次に以前に指定されたサイズと一致しないデータを配信するときに発生します。

ただし、これは機能しません。プロキシを使用していることが原因である可能性があります。他に確認できることはありますか?今の私の唯一の考えは、XMLドキュメントの最後のビットに対してpreg_matchを実行することですが、複数のタイプのXMLドキュメントを取得していて、タイプごとにチェックを作成する必要があるため、これは理想的とは言えません。

4

2 に答える 2

1

私はプロキシで同じ問題を経験しましたが、cURL のエラー ハンドラを使用して問題を解決することはできませんでした。両方のスクリプト (XML を要求するスクリプトと配信するスクリプト) にアクセスできる場合は、XML の最後に期待される一意のコードを要求側に配信させます。

// Request
http://localhost/getxml.php?id=4&uniq=1337

出力の最後にコメントを追加します。

<?xml encoding="..." ..?>
...
<!--1337-->
于 2010-12-05T08:17:25.030 に答える
1

エラーが発生したということは、取得した XML ファイルが無効であることを示しています。あなたがする必要があるのは、そのエラーをキャッチして処理することです。

1 つの簡単な修正方法は次のとおりです。

$xml = @simplexml_load_string($xmlString);
if($xml === false){ /* The XML was not valid. */ }

1 つのログ修正は次のとおりです。

libxml_use_internal_errors(true);
libxml_clear_errors();
$xml = simplexml_load_string($xmlString);
if( ($err = libxml_get_last_error()) !== false ){ /* We got ourselves an XML error. */ }
于 2010-12-05T08:20:52.793 に答える