tutorial php7 hack for docs hhvm

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 .