Chcę utworzyć skrypt, który analizuje lub ma sens w dzienniku błędów Apache, aby zobaczyć, jaki był ostatni błąd. Zastanawiam się, czy ktoś tam ma coś, co robi to lub ma jakieś pomysły od czego zacząć?Jak mogę analizować dziennik błędów Apache w PHP?
Odpowiedz
Jest kilka rzeczy do rozważenia pierwszy:
- Po pierwsze, twój użytkownik PHP mogą nie mieć dostępu do plików dziennika Apache.
- Po drugie, PHP i Apache nie powiedzą ci, gdzie jest wymieniony plik logu,
- Wreszcie, pliki dziennika Apache mogą stać się dość duże.
Jeśli jednak żadna z powyższych nie ma zastosowania, można użyć zwykłych poleceń odczytu pliku. Najłatwiej dostać ostatni błąd jest
$contents = @file('/path/to/error.log', FILE_SKIP_EMPTY_LINES);
if (is_array($contents)) {
echo end($contents);
}
unset($contents);
Nie ma chyba lepszego sposobu na osiągnięcie tego, że nie OiNK pamięć, ale zostawię to jako ćwiczenie dla czytelnika.
Ostatni komentarz: PHP ma również ini ustawienie przekierowania błędy PHP do pliku dziennika: error_log = /path/to/error.log
Można ustawić to w httpd.conf lub w pliku .htaccess (jeśli masz dostęp do jednego) za pomocą notacji php_flag:
php_flag error_log /web/mysite/logs/error.log
są tam stosy skryptów php, które to robią, wystarczy wyszukać w Google przykłady. Jeśli chcesz przetasować własne, nie jest to nic bardziej skomplikowanego niż czytanie jakiegokolwiek innego pliku. po prostu upewnij się, że znasz położenie plików logów (zdefiniowanych w pliku httpd.conf) i format your log files. Format jest również zdefiniowany w httpd.conf
dla każdego, kto szuka przykładowego skryptu, rzuciłem coś razem, ma podstawy:
<?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>
Czy próbowałeś biterScripting? Jestem administratorem systemu i używam go do analizowania dzienników. Jest to skrypt w stylu univx. biterScripting.com -> Bezpłatne pobieranie.
Oto mała klasa, która ułatwia odczytanie wielu znaków z tyłu dużego pliku bez przeciążenia pamięci. Ustawienie testowe pozwala zobaczyć, jak działa samo kanibalizowanie.
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. Pobierz dziennik błędów PHP z PHP
- 2. Ektronowy dziennik błędów
- 3. Logi błędów PHP w Heroku
- 4. Jak utworzyć dziennik błędów lub niestandardowy dziennik błędów w pakiecie SSIS?
- 5. Jak analizować jsonp PHP
- 6. Jak wyświetlić rejestr błędów PHP lub Apache w przeglądarce?
- 7. Jak analizować HTML w PHP?
- 8. Apache/PHP zwraca kod stanu HTTP 200 na stronach błędów
- 9. Jak mogę analizować długie argumenty w powłoce?
- 10. Jak mogę analizować JSON w Perlu?
- 11. PHP nie pokazuje żadnych błędów.
- 12. Jak analizować plik CSV przy użyciu PHP
- 13. Jak analizować tabelę HTML przy użyciu PHP?
- 14. php zwraca 500 błędów, ale brak rejestru błędów
- 15. Jak włączyć raportowanie błędów PHP w Zend Framework 2?
- 16. PHP: fopen obsługi błędów
- 17. Linux. Jak wyłączyć cały dziennik?
- 18. Jak mogę analizować XML na Androida?
- 19. Jak analizować znaki specjalne za pomocą PHP w MySQL?
- 20. Jak mogę zobaczyć ujednolicony dziennik zmian w zbiorze plików?
- 21. Jak mogę zobaczyć pełny dziennik wyjątków w JAVA?
- 22. Buforowanie wyjściowe Apache/PHP
- 23. Prawidłowy mechanizm wysyłania błędów PHP do klienta
- 24. Serwer Apache - wiele katalogów, różne dzienniki błędów
- 25. wspólny konflikt dziennik logowania z klientem mydła apache osi
- 26. Rejestrowanie błędów PHP nie działa przez .htaccess
- 27. Metoda PHP error_log nie zapisuje błędów w moim pliku dziennika błędów
- 28. nginx/apache/php vs nginx/php
- 29. Jak odzyskać odpowiedzi błędów exec() PHP?
- 30. Node.js/winston - Czy mogę dołączyć dziennik?
"Ćwiczenie dla czytelnika", o, ile razy to słyszałem. ;) – willasaywhat
Cóż, w tym przypadku oznacza to, że jestem w pracy i nie mam dużo czasu, aby napisać kod niezwiązany z pracą. :) – Powerlord