2015-04-10 3 views
1

В настоящее время я создаю веб-приложение, которое извлекает данные из API. API использует XML как форму приема запросов и отправки ответов. У меня веб-приложение работает отлично на моем сервере WAMP. Я даже развернул его онлайн на бесплатном веб-сервере PHP, как способ его тестирования, и он работает без проблем. Однако, когда я развернул его в реальном времени, я получил следующие ошибки в моем файле журнала php.декодирование вывода xml с использованием gzuncompress(): ошибка данных в

Вт 7 апреля 2015 17:28:12] [ошибка] [клиент 94.236.7.190] PHP Примечание: Undefined смещение: 1 в /home/jdsites/camping.blacks.co.uk/api.php на линия 214 [Вт 07 апр 17:28:12 2015] [ошибка] [клиент 94.236.7.190] PHP Предупреждение: gzuncompress(): ошибка данных в /home/jdsites/camping.blacks.co.uk/api .php on line 214 [Вт 07 апр 17:28:12 2015] [ошибка] [клиент 94.236.7.190] Замечание PHP: попытка получить свойство не-объекта в /home/jdsites/camping.blacks.co. uk/api.php on line 89 [Вт 07 апр 17:28:12 2015] [ошибка] [клиент 94.236.7.190] PHP Примечание: попытка получить свойство не-объекта в /home/jdsites/camping.blacks.co.uk/api.php on line 89 [Вт 07 апр 17:28:12 2015] [ошибка] [клиент 94.236.7.190] Замечание PHP: попытка получить свойство non -объект в /home/jdsites/camping.blacks.co.uk/api.php на линии 89

Это PHP-код в моем сценарии:

// decode the attachment data and this should return a valid xml string 
line 214: $attachment_xml = gzuncompress(base64_decode($matches[1])); 
line 215: $responseXml = new SimpleXMLElement($attachment_xml); 

Я не могу показаться, для выяснения проблемы: - |

+0

Мы понятия не имеем, что находится в переменной '$ matches'. Очевидно, что в пустое или пустое.Просто проверьте с xdebug, что происходит, когда вы заполняете '$ matches'. Здесь проблема. Не в gunzip. –

+0

Я сделал var_dump на $ matches [1], и я получаю следующий вывод. eJylXNtu4zgM/ZU87cvCiGVZkt01AqRtdqaY6QXpZbCPbuJpjUnsrJ20O3 +/lONcnMSmxDwM4shD6ogiDykqaDROykWelUk5iDaP + unfVVIub64HLOrvvkTDya/B/beorz + j63gZD6KHIp + uJsty + 7R9AAEpAl9F/d3A5t04 + ZkUSTZJBkx6IQu3/2f3Yjt0WrP0GaqZc8nsNQslQwPMgoRZGGB2KZhdhmN2CXbmErWGCEOftoMct4YgaBZK4TuohLLWzJkUmJ3dIBQEr5Ouh ++ gJPiGCGWARIrrhkrZW0PbGd1B8DqP4nWoZu11AcmfTTRLeztzD + U6zkPBSXbGWVQJe8zgTwyPFNhDktchXAdeR/JnsDOGWduZYA3PR1kUiNbzSdZAMOsYFBR/VhLFHIYuIbp9hvqzkCGjxaABZp + QYYE3TDTbW0OwQGK52/WVImD2eIjaGdI7wesCpjDMWrP9DkLmdjHMDGokSqQINLp9n2INbWcTa1CyFV5viD»... (длина = 3139) –

+0

Там также второй строка, которая выводит: eJzsvf1y28xy4P33btXew2SrkuecOqKEb5KOX2dlWbIdfymS/HiTra1TEDkSEYEEA4CSmfIfext7E7mIXMpeyds9A4KgCJJNCENp + ODUc2QSBAYzPTM9X92/fn3Bk3E0Snjy5vXsI376twlP0o/v3pivj + ZfXh/37t58 +/T6CP99fe7fBqPbN6 + vojs + emM6Rp8bfrd94/i9jtuF/7Wdfr/vtK8t2 + vaptl + fSRvfX00e/Сдн/qQUBz1J700/wBvsk273YX78guz3y74DY/5qMffmEbbc4z8nvkPs1tPj7 ++ yX8WX/JbUz8IeXwS9fmbQgLFq9nFr/6Qs9Af 3U78W/7 // Xc + at1e // c3x2P + k33rpf6IM4tdTUYjHrIrPkrzxPA5KF6QjEN/OisfyPLRldlrLtMIJGq18 + flhdcnfspvozjA2sk + T9 + 8BnF0O3AvikW86LiXBvdBCre9PpJvxr/nfjpY + klcfP394vMbv/ALfn99NH/Ds73LNCyn8D»... (длина = 161195) –

ответ

1

Ваш код пропускает фундаментальной проверки ошибки (простите за дерзость здесь :)).

// decode the attachment data and this should return a valid xml string 
$attachment_xml = gzuncompress(base64_decode($matches[1])); 
$responseXml = new SimpleXMLElement($attachment_xml); 

Это может быть рабочий код PHP, но только при определенных обстоятельствах. Это именно то, что вы испытываете: на вашем ящике WAMP это прекрасно, но в других местах он содержит множество ошибок и предупреждений. Давайте посмотрим, где проблема первая:

$match = $matches[1]; 
if (!strlen($match)) { 
    throw new UnexpectedValueException('No match found'); 
} 

$compress = base64_decode($match); 
if (false === $compress) { 
    throw new RuntimeException('Failed to decode base64'); 
} 

$uncompress = gzuncompress($compressed); 
if (false === $uncompress) { 
    throw new RuntimeException('Failed to gzuncompress'); 
} 

$xml = simplexml_load_string($uncompress); 
if (false === $xml) { 
    throw new RuntimeException('Failed to parse XML'); 
} 

Как этот код явно показывает, он расскажет сам по себе, какую операцию он выполняет не удается, так как возвращаемое значение каждой операции является надлежащим образом проверены перед кодом продолжается.

Как вы общаетесь здесь с зарубежными данными это очень важно, потому что ошибка в данных может быть перемешана в различные кодировки вы здесь:

  • base64
  • GZIP
  • XML

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

Если вы считаете, что входные данные всегда неисправны, код также проверяет соответствие, то есть неизвестную кодировку, которую вы используете, вы разбираете из чего-то, что я предполагаю, с помощью регулярного выражения. Поэтому важно, чтобы вы обнаружили первое место ошибки как можно раньше. В противном случае вы, возможно, найдете неправильное место, чтобы найти причину ошибки.

 Смежные вопросы

  • Нет связанных вопросов^_^