php7 - hhvm-fastcgi+nginx cómo hacer que muestre errores fatales en el navegador
hhvm vs php7 (2)
Use un controlador de errores personalizado para manejar cualquier tipo de error exactamente de la forma que desee. Tomado casi directamente del ejemplo # 1 en el enlace ...
function myErrorHandler($errno, $errstr, $errfile, $errline)
{
switch ($errno) {
case E_USER_ERROR:
echo "<b>My ERROR</b> [$errno] $errstr<br />/n";
echo " Fatal error on line $errline in file $errfile";
echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />/n";
echo "Aborting...<br />/n";
exit(1);
break;
case E_USER_WARNING:
echo "<b>My WARNING</b> [$errno] $errstr<br />/n";
break;
case E_USER_NOTICE:
echo "<b>My NOTICE</b> [$errno] $errstr<br />/n";
break;
default:
echo "Unknown error type: [$errno] $errstr<br />/n";
break;
}
/* Don''t execute PHP internal error handler */
return true;
}
set_error_handler("myErrorHandler");
Para que este enfoque funcione, debe configurar el controlador de errores lo antes posible en su código.
Como te habrás dado cuenta, dejé un poco de código, a saber, el que verifica si el tipo de error está configurado para que se informe en tu configuración php / hhvm. Con el código anterior, los errores se mostrarán independientemente de la configuración de php / hhvm. (por lo que probablemente desee registrar en lugar de errores de eco en la sugerencia del entorno de producción)
He estado jugando con el archivo de configuración HHVM y aún no he podido hacer que produzca un error fatal en el navegador. Muestra E_NOTICE y E_WARNING pero cuando ocurre cualquier E_ERROR deja la página en blanco y el error solo aparece en el archivo de registro HHVM.
¿Hay alguna forma de hacerlo aparecer en el navegador?
Mi archivo de configuración HHVM es el siguiente:
PidFile = /var/run/hhvm/pid
Log {
Level = Warning
AlwaysLogUnhandledExceptions = true
RuntimeErrorReportingLevel = 8191
UseLogFile = true
UseSyslog = false
File = /var/log/hhvm/error.log
InjectedStackTrace = false
NativeStackTrace = false
Access {
* {
File = /var/log/hhvm/access.log
Format = %h %l %u % t /"%r/" %>s %b
}
}
}
ErrorHandling {
CallUserHandlerOnFatals = true
NoInfiniteLoopDetection = false
NoInfiniteRecursionDetection = false
ThrowBadTypeExceptions = false
ThrowNotices = false
NoticeFrequency = 1 # 1 out of these many notices to log
WarningFrequency = 1 # 1 out of these many warnings to log
AssertActive = false
AssertWarning = false
}
Debug {
FullBacktrace = false
ServerStackTrace = false
ServerErrorMessage = false
TranslateSource = false
RecordInput = false
ClearInputOnSuccess = true
ProfilerOutputDir = /tmp
CoreDumpReport = true
CoreDumpReportDirectory = /tmp
}
Http {
DefaultTimeout = 30 # in seconds
SlowQueryThreshold = 5000 # in ms, log slow HTTP requests as errors
}
Mail {
SendmailPath = sendmail -t -i
ForceExtraParameters =
}
Preg {
BacktraceLimit = 100000
RecursionLimit = 100000
}
Repo {
Central {
Path = /var/log/hhvm/.hhvm.hhbc
}
}
Eval {
Jit = true
}
MySQL {
TypedResults = false
ReadOnly = false
ConnectTimeout = 2000 # in ms
ReadTimeout = 2000 # in ms
SlowQueryThreshold = 2000 # in ms, log slow queries as errors
KillOnTimeout = false
}
Nginx:
location ~ /.php$ {
fastcgi_keep_conn on;
fastcgi_buffers 8 16k;
fastcgi_buffer_size 32k;
fastcgi_read_timeout 900;
fastcgi_send_timeout 900;
fastcgi_intercept_errors off;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
hhvm.server.implicit_flush
habilitar la configuración hhvm.server.implicit_flush
en su php.ini
, luego puede enviar un cuerpo de respuesta en caso de errores fatales. Para poder detectar errores fatales con un controlador de errores, también debe habilitar hhvm.error_handling.call_user_handler_on_fatals
.
Para obtener más información, consulte el tema github en hhvm .