226 lines
7.2 KiB
PHP
Executable File
226 lines
7.2 KiB
PHP
Executable File
<?php
|
|
$nomFicAppelant = basename(__FILE__);
|
|
// analyseDesLiens.php
|
|
|
|
// Chargement de PhpSpreadsheet
|
|
require '/datas/07Prod/include/vendor/autoload.php';
|
|
|
|
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
|
use PhpOffice\PhpSpreadsheet\Writer\Xls;
|
|
|
|
// Déclaration des variables
|
|
$racineAnalyse = '/datas/07Prod/wwwRoot/alpha.wbadm/';
|
|
$dossierOutillage = '/datas/07Prod/wwwRoot/alpha.wbadm/admin/adminInclude/Outillage/';
|
|
$tableau1 = [];
|
|
$tableau2 = [];
|
|
$tableau3 = [];
|
|
|
|
// Fonction pour nettoyer les chemins
|
|
function nettoyerChemin($chemin) {
|
|
return str_replace('//', '/', $chemin);
|
|
}
|
|
|
|
// Fonction pour scanner les fichiers PHP
|
|
function scannerFichiersPhp($dir) {
|
|
$fichiers = [];
|
|
$elements = scandir($dir);
|
|
|
|
foreach($elements as $element) {
|
|
if($element !== '.' && $element !== '..') {
|
|
$chemin = nettoyerChemin($dir . '/' . $element);
|
|
|
|
if(is_dir($chemin)) {
|
|
$fichiers = array_merge($fichiers, scannerFichiersPhp($chemin));
|
|
} elseif(is_file($chemin)) {
|
|
if(pathinfo($chemin, PATHINFO_EXTENSION) === 'php' && basename($chemin) !== 'gallerie.php') {
|
|
if(strpos($chemin, 'admin/adminInclude/Outillage') === false) {
|
|
$fichiers[] = $chemin;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return $fichiers;
|
|
}
|
|
|
|
// Etape 1 : Remplir tableau1
|
|
$tableau1 = scannerFichiersPhp($racineAnalyse);
|
|
|
|
// Etape 2 : Remplir tableau2 avec includes et $src
|
|
foreach($tableau1 as $cheminFichier) {
|
|
$relatif = str_replace($racineAnalyse, '/', $cheminFichier);
|
|
$relatif = nettoyerChemin($relatif);
|
|
|
|
$contenu = @file($cheminFichier);
|
|
if($contenu === false) continue;
|
|
|
|
foreach($contenu as $numLigne => $ligne) {
|
|
if(preg_match_all('/include(?:_once)?\s*\(\s*[\'"]([^\'"]+)[\'"]\s*\)/i', $ligne, $matches)) {
|
|
foreach($matches[1] as $fichierInclu) {
|
|
$tableau2[] = [
|
|
'fichierContenant' => $relatif,
|
|
'fichierIncludé' => basename($fichierInclu),
|
|
'numeroLigne' => $numLigne + 1
|
|
];
|
|
}
|
|
}
|
|
if(preg_match_all('/\$src\s*=\s*[\'"]([^\'"]+)[\'"]/i', $ligne, $matches)) {
|
|
foreach($matches[1] as $fichierSrc) {
|
|
$tableau2[] = [
|
|
'fichierContenant' => $relatif,
|
|
'fichierIncludé' => basename($fichierSrc),
|
|
'numeroLigne' => $numLigne + 1
|
|
];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Etape 3 : Remplir tableau3 avec liens href ou javascript location
|
|
foreach($tableau1 as $cheminFichier) {
|
|
$relatif = str_replace($racineAnalyse, '/', $cheminFichier);
|
|
$relatif = nettoyerChemin($relatif);
|
|
$nomFichier = basename($cheminFichier);
|
|
|
|
$contenu = @file($cheminFichier);
|
|
if($contenu === false) continue;
|
|
|
|
foreach($contenu as $numLigne => $ligne) {
|
|
if(preg_match_all('/href\s*=\s*[\'"]([^\'"]+)[\'"]/i', $ligne, $matches)) {
|
|
foreach($matches[1] as $lien) {
|
|
if(!preg_match('/^(http|#|mailto:|tel:)/i', $lien)) {
|
|
$tableau3[] = [
|
|
'cheminDufichierComplet' => $relatif,
|
|
'fichierContenantLeLien' => $nomFichier,
|
|
'lien' => $lien,
|
|
'numeroLigne' => $numLigne + 1
|
|
];
|
|
}
|
|
}
|
|
}
|
|
if(preg_match_all('/(document|top|self|parent)\.location\.href\s*=\s*[\'"]([^\'"]+)[\'"]/i', $ligne, $matches)) {
|
|
foreach($matches[2] as $lien) {
|
|
if(!preg_match('/^(http|#|mailto:|tel:)/i', $lien)) {
|
|
$tableau3[] = [
|
|
'cheminDufichierComplet' => $relatif,
|
|
'fichierContenantLeLien' => $nomFichier,
|
|
'lien' => $lien,
|
|
'numeroLigne' => $numLigne + 1
|
|
];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Etape 4 : Trouver Parent, GrandParent, Ailleul
|
|
foreach($tableau3 as $key => &$entry) {
|
|
$fichier = $entry['fichierContenantLeLien'];
|
|
$entry['fichierParent'] = '';
|
|
$entry['grandParent'] = '';
|
|
$entry['ailleul'] = '';
|
|
|
|
foreach($tableau2 as $row) {
|
|
if($row['fichierIncludé'] === $fichier) {
|
|
$entry['fichierParent'] = basename($row['fichierContenant']);
|
|
break;
|
|
}
|
|
}
|
|
|
|
if($entry['fichierParent']) {
|
|
foreach($tableau2 as $row) {
|
|
if($row['fichierIncludé'] === $entry['fichierParent']) {
|
|
$entry['grandParent'] = basename($row['fichierContenant']);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if($entry['grandParent']) {
|
|
foreach($tableau2 as $row) {
|
|
if($row['fichierIncludé'] === $entry['grandParent']) {
|
|
$entry['ailleul'] = basename($row['fichierContenant']);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Dernière étape : Proposition de nouveau lien
|
|
foreach($tableau3 as &$entry) {
|
|
$base = $entry['ailleul'] ?: ($entry['grandParent'] ?: $entry['fichierParent']);
|
|
$lien = $entry['lien'];
|
|
|
|
if($base) {
|
|
$compteurBase = substr_count($base, '/');
|
|
$compteurLien = substr_count($lien, '/');
|
|
|
|
if($compteurBase === $compteurLien) {
|
|
$entry['proposition'] = './';
|
|
} elseif($compteurBase < $compteurLien) {
|
|
$diff = $compteurLien - $compteurBase;
|
|
$entry['proposition'] = str_repeat('../', $diff);
|
|
} else {
|
|
$entry['proposition'] = './';
|
|
}
|
|
} else {
|
|
$entry['proposition'] = '';
|
|
}
|
|
}
|
|
|
|
// Création du fichier Excel
|
|
$spreadsheet = new Spreadsheet();
|
|
|
|
// Onglet tableau1
|
|
$sheet1 = $spreadsheet->createSheet();
|
|
$sheet1->setTitle('tableau1');
|
|
$sheet1->fromArray(['Chemin Complet'], NULL, 'A1');
|
|
foreach($tableau1 as $i => $fichier) {
|
|
$sheet1->setCellValue('A' . ($i + 2), $fichier);
|
|
}
|
|
|
|
// Onglet tableau2
|
|
$sheet2 = $spreadsheet->createSheet();
|
|
$sheet2->setTitle('tableau2');
|
|
$sheet2->fromArray(['Fichier Contenant', 'Fichier Includé', 'N° Ligne'], NULL, 'A1');
|
|
foreach($tableau2 as $i => $row) {
|
|
$sheet2->fromArray(array_values($row), NULL, 'A' . ($i + 2));
|
|
}
|
|
|
|
// Onglet tableau3
|
|
$sheet3 = $spreadsheet->createSheet();
|
|
$sheet3->setTitle('tableau3');
|
|
$sheet3->fromArray([
|
|
'Chemin du fichier', 'Fichier contenant lien', 'Lien', 'N° Ligne', 'Parent', 'GrandParent', 'Ailleul', 'Proposition'
|
|
], NULL, 'A1');
|
|
foreach($tableau3 as $i => $row) {
|
|
$sheet3->fromArray([
|
|
$row['cheminDufichierComplet'],
|
|
$row['fichierContenantLeLien'],
|
|
$row['lien'],
|
|
$row['numeroLigne'],
|
|
$row['fichierParent'],
|
|
$row['grandParent'],
|
|
$row['ailleul'],
|
|
$row['proposition']
|
|
], NULL, 'A' . ($i + 2));
|
|
}
|
|
|
|
// Supprimer la première feuille vide
|
|
$spreadsheet->removeSheetByIndex(0);
|
|
|
|
// Ajuster les colonnes
|
|
foreach($spreadsheet->getAllSheets() as $sheet) {
|
|
foreach(range('A', $sheet->getHighestDataColumn()) as $col) {
|
|
$sheet->getColumnDimension($col)->setAutoSize(true);
|
|
}
|
|
$sheet->freezePane('A2');
|
|
}
|
|
|
|
// Sauvegarde du fichier
|
|
$writer = new Xls($spreadsheet);
|
|
$writer->save('/datas/07Prod/wwwRoot/alpha.wbadm/admin/adminInclude/Outillage/analyseDesLiens.xls');
|
|
|
|
echo "Analyse terminée. Fichier généré : analyseDesLiens.xls\n";
|
|
?>
|