102 lines
2.6 KiB
PHP
Executable File
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";
|
|
?>
|
|
|