PHP CURL - как определить, был ли загружен весь запрошенный файл не полностью - PullRequest
0 голосов
/ 05 декабря 2010

Я использую CURL и прокси-сервер для захвата некоторых XML-файлов, иногда только часть XML-документа проходит и терпит неудачу, когда я пытаюсь загрузить / использовать XML (simplexml_load_string).

Я думал что-то вроде ..

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

перехватит эту ошибку через CURL errno ..

CURLE_PARTIAL_FILE (18)

Передача файла была короче или больше чем ожидалось. Это происходит, когда Сервер сначала сообщает об ожидаемом Размер передачи, а затем доставляет данные это не соответствует ранее заданный размер.

Однако это не работает, я думаю, это может быть связано с использованием прокси. Что-нибудь еще я могу проверить? Моя единственная мысль сейчас состоит в том, чтобы сделать preg_match для последнего бита XML-документа, но это кажется далеко не идеальным, так как я получаю несколько типов XML-документов, и мне придется писать проверки для каждого типа.

Ответы [ 2 ]

1 голос
/ 05 декабря 2010

Что ж, ошибка уже говорит о том, что полученный вами XML-файл недействителен.Что вам нужно сделать, так это перехватить эту ошибку и обработать ее.

Вот одно быстрое исправление:

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

Это исправление журнала:

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. */ }
1 голос
/ 05 декабря 2010

У меня возникла такая же проблема с прокси, и я не смог решить проблему с помощью обработчиков ошибок cURL.Если у вас есть доступ к обоим сценариям (один запрашивающий и другой, доставляющий XML), то запрашивающий передает уникальный код, который он ожидает в конце XML:

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

и добавляет комментарий вконец вывода:

<?xml encoding="..." ..?>
...
<!--1337-->
...