Как вы ловите фатальную ошибку в выводе PHP от клиента Perl? - PullRequest
0 голосов
/ 26 июня 2018

С учетом клиента Perl, который отправляет запросы веб-серверу, используя HTTP :: Request , как в:

$request    = new HTTP::Request('POST', $someurl);
$response   = $ua->request($request);

мы пытаемся поймать / перехватить фатальные ошибки времени выполнения, которые могут быть вызваны PHP-скриптами, которые исчерпывают память или время. Как пример:

Fatal error: Allowed memory size of xxxx bytes exhausted 
  (tried to allocate xx bytes) in /xxx/xxx.php on line xx

Если вызов сделан из браузера, сообщение об ошибке PHP заканчивается в конце страницы и отображается в источнике документа и DOM:

<b>Fatal error</b>:  Allowed memory size of xxxx bytes exhausted 
  (tried to allocate xx bytes) in <b>/xxx/xxx.php</b> on line <b>xx</b><br />

Но при анализе $ response вызова в perl сообщение об ошибке не отображается ни в выходных данных $ response-> content или $ response-> as_string . Поток в основном «обрезается» непосредственно перед сообщением об ошибке:

HTTP/1.1 200 OK
Cache-Control: no-cache
Connection: Upgrade, close
Date: Wed, 27 Jun 2018 07:40:52 GMT
Pragma: no-cache
Upgrade: h2,h2c
Server: Apache/2.4
Content-Type: text/html; charset=UTF-8
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Client-Date: Wed, 27 Jun 2018 07:42:25 GMT
Client-Peer: xxxx
Client-Response-Num: 1
Client-SSL-Cert-Issuer: xxxx
Client-SSL-Cert-Subject: /CN=www.xxxx.ch
Client-SSL-Cipher: xxxx
Client-SSL-Socket-Class: IO::Socket::SSL
Client-Transfer-Encoding: chunked
Set-Cookie: sid=xxxxxx; path=/
Title: xxxxxxx

<!DOCTYPE HTML>
<html>
<head>
  <title>xxxxx</title>
</head>
<body>
<div id="xxxx">
  <div id="xxxx"><img src="xxxx"></div>
    <div id="xxxx"><div id="xxxx">xxxx</div>
      <div id="xxxx">
          <div id="xxxx">
                <b>stream</b>
                marker 1
                marker 2
                marker 3
                marker 4
                marker 5

Проблема в том, что все коды состояния или флаги ошибок (см. HTTP :: Response ) выглядят нормально, поскольку ответ начал потоковую передачу правильно.

Может кто-нибудь рассказать, как отлавливать подобные ошибки из HTTP: Запрос или HTTP :: Response ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...