alpha_full/admin/adminInclude/Outillage/analyseSyntaxe.php
2026-04-06 22:58:51 +02:00

102 lines
2.6 KiB
PHP
Executable File

<?php
$nomFicAppelant = basename(__FILE__);
require_once '/datas/07Prod/include/vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
$rootDir = '/datas/07Prod/wwwRoot/alpha.wbadm/';
$outputFile = __DIR__ . '/outils_scan_result.xlsx';
// Initialisation Excel
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->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";
?>