С учетом клиента 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 ?