Quiero crear un script que analice o tenga sentido el registro de errores de apache para ver cuál fue el error más reciente. Me preguntaba si alguien por ahí tiene algo que hace esto o tiene alguna idea de por dónde empezar.¿Cómo puedo analizar el registro de errores de Apache en PHP?
Respuesta
Hay algunas cosas a tener en cuenta en primer lugar:
- En primer lugar, el usuario PHP no pueden tener acceso a los archivos de registro de Apache.
- En segundo lugar, PHP y Apache no le dirán dónde está dicho archivo de registro,
- Por último, los archivos de registro de Apache pueden llegar a ser bastante grandes.
Sin embargo, si ninguno de estos se aplica, puede utilizar los comandos normales de lectura de archivos para hacerlo. La forma más sencilla de obtener el último error es
$contents = @file('/path/to/error.log', FILE_SKIP_EMPTY_LINES);
if (is_array($contents)) {
echo end($contents);
}
unset($contents);
Probablemente hay una mejor forma de hacerlo que no Oink memoria, pero lo dejo como ejercicio para el lector.
Un último comentario: PHP también tiene una configuración ini para redirigir los errores de PHP a un archivo de registro: error_log = /path/to/error.log
Es posible ajustar esta en httpd.conf o en un archivo .htaccess (si tiene acceso a uno) usando la notación php_flag:
php_flag error_log /web/mysite/logs/error.log
hay montones de scripts PHP que hacen esto, sólo hacer una búsqueda en Google de ejemplos. si quiere hacer su propia versión, no es más complejo que leer cualquier otro archivo. solo asegúrate de saber la ubicación de tus archivos de registro (definidos en el archivo httpd.conf) y el format your log files. El formato también está definido en httpd.conf
para cualquier otra persona que esté buscando un script de muestra, arrojé algo juntos, tiene lo básico:
<?php
exec('tail /usr/local/apache/logs/error_log', $output);
?>
<Table border="1">
<tr>
<th>Date</th>
<th>Type</th>
<th>Client</th>
<th>Message</th>
</tr>
<?
foreach($output as $line) {
// sample line: [Wed Oct 01 15:07:23 2008] [error] [client 76.246.51.127] PHP 99. Debugger->handleError() /home/gsmcms/public_html/central/cake/libs/debugger.php:0
preg_match('~^\[(.*?)\]~', $line, $date);
if(empty($date[1])) {
continue;
}
preg_match('~\] \[([a-z]*?)\] \[~', $line, $type);
preg_match('~\] \[client ([0-9\.]*)\]~', $line, $client);
preg_match('~\] (.*)$~', $line, $message);
?>
<tr>
<td><?=$date[1]?></td>
<td><?=$type[1]?></td>
<td><?=$client[1]?></td>
<td><?=$message[1]?></td>
</tr>
<?
}
?>
</table>
¿Has probado biterScripting? Soy un administrador de sistemas y he estado usando para analizar registros. Es un script de estilo univx. biterScripting.com -> Descarga gratuita.
Aquí hay una clase pequeña que facilita la lectura de una cantidad de caracteres desde la parte posterior de un archivo grande sin memoria de sobrecarga. La configuración de prueba te permite verlo en acción canibalizándose a sí mismo.
BigFile.php
<?php
$run_test = true;
$test_file = 'BigFile.php';
class BigFile
{
private $file_handle;
/**
*
* Load the file from a filepath
* @param string $path_to_file
* @throws Exception if path cannot be read from
*/
public function __construct($path_to_log)
{
if(is_readable($path_to_log))
{
$this->file_handle = fopen($path_to_log, 'r');
}
else
{
throw new Exception("The file path to the file is not valid");
}
}
/**
*
* 'Finish your breakfast' - Jay Z's homme Strict
*/
public function __destruct()
{
fclose($this->file_handle);
}
/**
*
* Returns a number of characters from the end of a file w/o loading the entire file into memory
* @param integer $number_of_characters_to_get
* @return string $characters
*/
public function getFromEnd($number_of_characters_to_get)
{
$offset = -1*$number_of_characters_to_get;
$text = "";
fseek($this->file_handle, $offset , SEEK_END);
while(!feof($this->file_handle))
{
$text .= fgets($this->file_handle);
}
return $text;
}
}
if($run_test)
{
$number_of_characters_to_get = 100000;
$bf = new BigFile($test_file);
$text = $bf->getFromEnd($number_of_characters_to_get);
echo "$test_file has the following $number_of_characters_to_get characters at the end:
<br/> <pre>$text</pre>";
}
?>
- 1. registro fatal/analizar los errores en PHP5
- 2. ¿Cómo ver el registro de errores de PHP o Apache en línea en un navegador?
- 3. (Apache) Embellecedor de registro de errores
- 4. Cómo hacer el registro de errores en CodeIgniter (PHP)
- 5. Cómo detener PHP desde el registro PHP Aviso errores
- 6. Registro de errores de aviso de PHP
- 7. El método PHP error_log no escribe errores en mi archivo de registro de errores
- 8. ¿Dónde reside el registro de errores de PHP en XAMPP?
- 9. ¿Puede Apache httpd crear errores de registro en la consola en lugar de archivos de registro en Windows?
- 10. Biblioteca C++ para analizar el registro
- 11. ¿Deshabilitar el registro de Apache HTTP Client?
- 12. ¿el registro PHP personalizado y el registro de todos los posibles errores son mutuamente exclusivos?
- 13. Desactivar el registro común de Apache
- 14. Registro de errores de PHP y caracteres de nueva línea
- 15. El registro de errores de PHP no funciona a través de .htaccess
- 16. Cómo habilitar el registro de apache commons HttpClient en Android
- 17. PHP MySQL Registro y manejo de errores: mejor práctica
- 18. ¿Cómo puedo redireccionar en PHP sin errores de encabezado?
- 19. Cómo hacer que las entradas de registro de errores de apache sean más largas
- 20. ¿Cómo puedo desactivar el registro de Apache Commons/Log4J en bibliotecas de terceros?
- 21. errores de registro con el matraz
- 22. El registro de PHP no ignorará los errores repetidos con ignore_repeated_errors = On
- 23. ¿Cómo puedo usar php para analizar una cadena de fecha?
- 24. cómo analizar los registros de Apache utilizando una expresión regular en PHP
- 25. Apache grep archivo de registro grande
- 26. Cómo analizar XML en php?
- 27. ¿Errores de rendimiento de velocidad de Apache?
- 28. Obtener la configuración de Apache desde el script PHP
- 29. ¿Cómo puedo ver el registro de errores (logcat) para Android en Eclipse?
- 30. ¿Dónde puedo encontrar archivos de registro de errores?
"Un ejercicio para el lector", ¡cuántas veces he oído eso! ;) – willasaywhat
Bueno, en este caso, significa que estoy en el trabajo y no tengo mucho tiempo para escribir código no relacionado con el trabajo. :) – Powerlord