server-logs.php 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <?php
  2. session_start();
  3. require_once "../env.inc.php";
  4. require_once "../access.inc.php";
  5. require_once "../conf.inc.php";
  6. require_once DIR_PHP_LAYOUTS . "header.php";
  7. require_once DIR_PHP_LAYOUTS . "cms.session.php";
  8. $logDir = SERVER_LOGS;
  9. if (!is_readable($$logDir)) {
  10. echo "Le dossier n'est pas accessible en lecture.";
  11. exit();
  12. }
  13. $selectedLog = $_GET['log'] ?? '';
  14. $search = strtolower($_GET['search'] ?? '');
  15. $files = array_filter(scandir($logDir), fn($f) => is_file($logDir . $f));
  16. if (!$selectedLog && !empty($files)) {
  17. $selectedLog = reset($files);
  18. }
  19. $logPath = $logDir . $selectedLog;
  20. $logLines = [];
  21. if (is_file($logPath) && is_readable($logPath)) {
  22. $lines = array_slice(file($logPath), -200);
  23. if ($search) {
  24. $lines = array_filter($lines, fn($line) => stripos($line, $search) !== false);
  25. }
  26. $logLines = array_map('htmlspecialchars', array_map('trim', $lines));
  27. }
  28. ?>
  29. <!DOCTYPE html>
  30. <html lang="fr">
  31. <head>
  32. <meta charset="UTF-8">
  33. <title>Visualiseur de logs</title>
  34. <style>
  35. body { font-family: monospace; background: #f4f4f4; padding: 20px; }
  36. .error { color: red; }
  37. .warning { color: orange; }
  38. .notice { color: blue; }
  39. pre { background: #fff; padding: 10px; border: 1px solid #ccc; overflow-x: auto; }
  40. </style>
  41. <script>
  42. setInterval(() => {
  43. location.reload();
  44. }, 5000);
  45. </script>
  46. </head>
  47. <body>
  48. <form method="get">
  49. <label for="log">Fichier de log :</label>
  50. <select name="log" onchange="this.form.submit()">
  51. <?php foreach ($files as $file): ?>
  52. <option value="<?= $file ?>" <?= $file === $selectedLog ? 'selected' : '' ?>><?= $file ?></option>
  53. <?php endforeach; ?>
  54. </select>
  55. <br><br>
  56. <label for="search">Filtrer par mot-clé :</label>
  57. <input type="text" name="search" value="<?= htmlspecialchars($search) ?>">
  58. <button type="submit">Filtrer</button>
  59. </form>
  60. <hr>
  61. <pre>
  62. <?php foreach ($logLines as $line) {
  63. if (stripos($line, 'error') !== false) {
  64. echo '<div class="error">' . $line . '</div>';
  65. } elseif (stripos($line, 'warn') !== false) {
  66. echo '<div class="warning">' . $line . '</div>';
  67. } elseif (stripos($line, 'notice') !== false) {
  68. echo '<div class="notice">' . $line . '</div>';
  69. } else {
  70. echo '<div>' . $line . '</div>';
  71. }
  72. } ?>
  73. </pre>
  74. </body>
  75. </html>