$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"; ?>