getActiveSheet(); $sheet->setTitle('Résultat Scan'); $sheet->fromArray(['Fichier', 'Type d\'erreur', 'Détail', 'Proposition'], null, 'A1'); $row = 2; /** * Vérifie les erreurs de syntaxe avec `php -l` */ function checkPhpSyntax($file) { $output = null; $return = null; exec("php -l " . escapeshellarg($file) . " 2>&1", $output, $return); if ($return !== 0) { return implode("\n", $output); } return null; } /** * Recherche des chemins relatifs suspects dans les fichiers */ function checkRelativePaths($file, $content) { $errors = []; // Cas de ../ mal utilisés ou suspects if (preg_match_all('/(include|require)(_once)?\s*\(\s*[\'"](\.\.\/.*?)[\'"]\s*\)/', $content, $matches, PREG_SET_ORDER)) { foreach ($matches as $match) { $relativePath = dirname($file) . '/' . $match[3]; if (!file_exists(realpath($relativePath))) { $errors[] = [ 'type' => 'Lien relatif cassé', 'detail' => $match[0], 'proposition' => 'Vérifier que le chemin relatif existe : ' . $match[3] ]; } } } return $errors; } /** * Récupère tous les fichiers PHP récursivement */ function scanDirectory($dir) { $rii = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir)); $files = []; foreach ($rii as $file) { if ($file->isDir()) continue; if (pathinfo($file, PATHINFO_EXTENSION) === 'php') { $files[] = $file->getPathname(); } } return $files; } $phpFiles = scanDirectory($rootDir); foreach ($phpFiles as $file) { $content = file_get_contents($file); // 1. Vérification syntaxique if ($error = checkPhpSyntax($file)) { $sheet->setCellValue("A{$row}", $file); $sheet->setCellValue("B{$row}", "Erreur syntaxe PHP"); $sheet->setCellValue("C{$row}", $error); $sheet->setCellValue("D{$row}", "Corriger la syntaxe selon le message."); $row++; } // 2. Vérification liens relatifs $relErrors = checkRelativePaths($file, $content); foreach ($relErrors as $err) { $sheet->setCellValue("A{$row}", $file); $sheet->setCellValue("B{$row}", $err['type']); $sheet->setCellValue("C{$row}", $err['detail']); $sheet->setCellValue("D{$row}", $err['proposition']); $row++; } } // Sauvegarde du fichier Excel $writer = new Xlsx($spreadsheet); $writer->save($outputFile); echo "Scan terminé. Rapport sauvegardé dans : $outputFile\n"; ?>