off - php no error display
error_log en el mismo directorio que los archivos incluidos? (1)
Investigué diferentes métodos y directivas que incluyen:
- auto_prepend_file
- archivos .user.ini
- getcwd ()
- debug_backtrace ()
Y parece que no puedo encontrar la forma de cambiar la ruta del error_log para iniciar sesión en la misma ruta que el archivo que se incluye / requiere.
Por ejemplo, digamos index.php tiene la línea:
include(''subdir/file.php'');
Si subdir/file.php
tiene un error de sintaxis, obligando a php a crear subdir/error_log
, en lugar del comportamiento predeterminado de crear error_log en la misma ruta que index.php
, auto_prepend_file sufre de esta misma limitación ya que prepede el archivo especificado antes de la primer script llamado, en lugar de cada archivo incluido.
He mirado alrededor y no puedo encontrar una manera legítima de hacer esto. Entiendo las implicaciones de la sobrecarga de rendimiento al hacer esto, y planeo usarlo solo para fines de desarrollo. Creo que esto puede ayudar a aislar errores en lugar de usar trazados de pila como debug_backtrace()
, ya que puedo usar un script de terminal para mostrar los últimos registros de error por última modificación y encontrar los archivos ofensivos mucho más rápido que leer un registro de error masivo.
Mi objetivo final es no tener estos archivos en absoluto, obviamente, ya que la depuración de sitios ya existentes y tener que pasar por un registro de errores de 10 GB o la tail
/ multitail
puede ser algo engorroso. Estoy tratando de idear este método para que los errores se puedan aislar por ruta. ¿Alguna sugerencia?
En base a las sugerencias de hakre anteriores, he creado este script, que se incluirá en la parte superior de cualquier script php:
(también aquí hay una idea fundamental que hice de este archivo si desea bifurcar / descargarlo: ver en github )
<?
function custom_error_debug($errno, $errstr, $errfile, $errline, $errvars) {
$message = "";
$message .= "[ " . date(''Y-m-d h-i-s'') . " ] Error: [$errno] $errstr on line $errline of $errfile ";
//Dump all info to browser!
//WARNING: Leave this commented except for extreme cases where you need to see all variables in use!
//Using this will cause excessive processing time, and RAM. Use only as needed!
/*if (!empty($errvars)) {
echo $message . PHP_EOL . "Variables in use: <pre>";print_r($errvars); echo "</pre>";
//WARNING: not ending execution here may cause the browser to overload on larger frameworks, comment out at your own risk!
die();
}*/
//get the directory of the offending file, put a log in that path, and separate them by end of line, append to file
file_put_contents ( dirname($errfile) . "/php_errors.log", $message . PHP_EOL, FILE_APPEND );
//Dump all variables to file as well, (MAY CAUSE LARGE FILES, read above)
//file_put_contents ( dirname($errfile) . "/php_errors.log", $errvars . PHP_EOL, FILE_APPEND );
//Optionally end script execution
//die();
}
set_error_handler(''custom_error_debug'');
?>