// Enregistrement du rapport $fichier_nom = 'rapport_chmod_'.$_SESSION['BASE'].'_'.fabriquer_fin_nom_fichier__date_et_alea().'.html'; FileSystem::fabriquer_fichier_rapport( $fichier_nom , $thead , $tbody ); exit(']¤['.URL_DIR_EXPORT.$fichier_nom); } // //////////////////////////////////////////////////////////////////////////////////////////////////// // Vérification des droits en écriture // //////////////////////////////////////////////////////////////////////////////////////////////////// if($action=='verif_droits') { $_SESSION['tmp'] = array(); // Récupérer l'arborescence $dossier_install = '.'; FileSystem::analyser_dossier( $dossier_install , strlen($dossier_install) , 'avant' , TRUE /*with_first_dir*/ ); // Pour l'affichage du retour $thead = '<tr><td colspan="2">Vérification des droits en écriture - '.date('d/m/Y H:i:s').'</td></tr>'; $tbody = ''; // Dossiers ksort($_SESSION['tmp']['dossier']); foreach($_SESSION['tmp']['dossier'] as $dossier => $tab) { $dossier = ($dossier) ? '.'.$dossier : '.'.DS ; $tbody .= (@is_writable($dossier)) ? '<tr><td class="v">Dossier accessible en écriture</td><td>'.$dossier.'</td></tr>' : '<tr><td class="r">Dossier aux droits insuffisants</td><td>'.$dossier.'</td></tr>' ; } // Fichiers ksort($_SESSION['tmp']['fichier']); foreach($_SESSION['tmp']['fichier'] as $fichier => $tab) { $fichier = '.'.$fichier;
$code_erreur = FileSystem::unzip( $fichier_import , CHEMIN_DOSSIER_IMPORT , TRUE /*use_ZipArchive*/ ); if($code_erreur) { exit(']¤['.'pb'.']¤['.'Fichiers impossibles à extraire ('.FileSystem::$tab_zip_error[$code_erreur].') !'); } exit(']¤['.'ok'.']¤['."Analyse des fichiers et recensement des dossiers…"); } // // 3. Analyse des fichiers et recensement des dossiers... (après initialisation de la session temporaire) // if($action=='verif_file_appli_etape3') { $_SESSION['tmp'] = array(); FileSystem::analyser_dossier( $dossier_install , strlen($dossier_install) , 'avant' , FALSE /*with_first_dir*/ ); FileSystem::analyser_dossier( $dossier_dezip , strlen($dossier_dezip) , 'apres' , FALSE /*with_first_dir*/ , FALSE ); exit(']¤['.'ok'.']¤['."Comparaison des données…"); } // // 4. Comparaison des données... // if($action=='verif_file_appli_etape4') { $thead = '<tr><td colspan="2">Vérification des fichiers de l\'application en place - '.date('d/m/Y H:i:s').'</td></tr>'; $tbody_ok = ''; $tbody_pb = ''; // Dossiers : ordre croissant pour commencer par ceux les moins imbriqués : obligatoire pour l'ajout, et pour la suppression on teste si pas déjà supprimé. ksort($_SESSION['tmp']['dossier']); foreach($_SESSION['tmp']['dossier'] as $dossier => $tab) {
/** * Recense récursivement les dossiers présents et les md5 des fichiers (utilisé pour la maj automatique par le webmestre). * * @param string $dossier * @param int $longueur_prefixe longueur de $dossier lors du premier appel * @param string $indice "avant" ou "apres" * @param string $with_first_dir retourner ou non le dossier du premier appel * @param bool $calc_md5 TRUE par défaut, FALSE si le fichier est son MD5 * @return void */ public static function analyser_dossier($dossier,$longueur_prefixe,$indice,$with_first_dir=FALSE,$calc_md5=TRUE) { $tab_contenu = FileSystem::lister_contenu_dossier_sources_publiques($dossier); $ds = (substr($dossier,-1)==DS) ? '' : DS ; foreach($tab_contenu as $contenu) { $chemin_contenu = $dossier.$ds.$contenu; if(is_dir($chemin_contenu)) { FileSystem::analyser_dossier($chemin_contenu,$longueur_prefixe,$indice,$with_first_dir,$calc_md5); } else { $_SESSION['tmp']['fichier'][substr($chemin_contenu,$longueur_prefixe)][$indice] = ($calc_md5) ? FileSystem::fabriquer_md5_file($chemin_contenu) : file_get_contents($chemin_contenu) ; } } $chemin_dossier = (string)substr($dossier,$longueur_prefixe); if( $with_first_dir || $chemin_dossier!=='' ) { $_SESSION['tmp']['dossier'][$chemin_dossier][$indice] = TRUE; } }
FileSystem::supprimer_dossier($dossier_dezip); } // Dezipper dans le dossier temporaire $code_erreur = FileSystem::unzip($fichier_import, CHEMIN_DOSSIER_IMPORT, TRUE); if ($code_erreur) { exit(']¤[' . 'pb' . ']¤[' . 'Fichiers impossibles à extraire (' . FileSystem::$tab_zip_error[$code_erreur] . ') !'); } exit(']¤[' . 'ok' . ']¤[' . "Analyse des fichiers et recensement des dossiers…"); } // // 3. Analyse des fichiers et recensement des dossiers... (après initialisation de la session temporaire) // if ($action == 'verif_file_appli_etape3') { $_SESSION['tmp'] = array(); FileSystem::analyser_dossier($dossier_install, strlen($dossier_install), 'avant', FALSE); FileSystem::analyser_dossier($dossier_dezip, strlen($dossier_dezip), 'apres', FALSE, FALSE); exit(']¤[' . 'ok' . ']¤[' . "Comparaison des données…"); } // // 4. Comparaison des données... // if ($action == 'verif_file_appli_etape4') { $thead = '<tr><td colspan="2">Vérification des fichiers de l\'application en place - ' . date('d/m/Y H:i:s') . '</td></tr>'; $tbody_ok = ''; $tbody_pb = ''; // Dossiers : ordre croissant pour commencer par ceux les moins imbriqués : obligatoire pour l'ajout, et pour la suppression on teste si pas déjà supprimé. ksort($_SESSION['tmp']['dossier']); foreach ($_SESSION['tmp']['dossier'] as $dossier => $tab) { if (isset($tab['avant']) && isset($tab['apres'])) { // Dossier inchangé (cas le plus fréquent donc testé en premier). $tbody_ok .= '<tr class="v"><td>Dossier présent</td><td>' . $dossier . '</td></tr>';
$fichier = '.' . $fichier; $tbody .= @chmod($fichier, $mode_fichier) ? '<tr><td class="v">Droits appliqués au fichier</td><td>' . $fichier . '</td></tr>' : '<tr><td class="r">Permission insuffisante sur ce fichier pour en modifier les droits</td><td>' . $fichier . '</td></tr>'; } // Enregistrement du rapport $fichier_nom = 'rapport_chmod_' . $_SESSION['BASE'] . '_' . fabriquer_fin_nom_fichier__date_et_alea() . '.html'; FileSystem::fabriquer_fichier_rapport($fichier_nom, $thead, $tbody); exit(']¤[' . URL_DIR_EXPORT . $fichier_nom); } // //////////////////////////////////////////////////////////////////////////////////////////////////// // Vérification des droits en écriture // //////////////////////////////////////////////////////////////////////////////////////////////////// if ($action == 'verif_droits') { $_SESSION['tmp'] = array(); // Récupérer l'arborescence $dossier_install = '.'; FileSystem::analyser_dossier($dossier_install, strlen($dossier_install), 'avant', TRUE); // Pour l'affichage du retour $thead = '<tr><td colspan="2">Vérification des droits en écriture - ' . date('d/m/Y H:i:s') . '</td></tr>'; $tbody = ''; // Dossiers ksort($_SESSION['tmp']['dossier']); foreach ($_SESSION['tmp']['dossier'] as $dossier => $tab) { $dossier = $dossier ? '.' . $dossier : '.' . DS; $tbody .= @is_writable($dossier) ? '<tr><td class="v">Dossier accessible en écriture</td><td>' . $dossier . '</td></tr>' : '<tr><td class="r">Dossier aux droits insuffisants</td><td>' . $dossier . '</td></tr>'; } // Fichiers ksort($_SESSION['tmp']['fichier']); foreach ($_SESSION['tmp']['fichier'] as $fichier => $tab) { $fichier = '.' . $fichier; $tbody .= @is_writable($fichier) ? '<tr><td class="v">Fichier accessible en écriture</td><td>' . $fichier . '</td></tr>' : '<tr><td class="r">Fichier aux droits insuffisants</td><td>' . $fichier . '</td></tr>'; }