Exemplo n.º 1
0
  }
  FileSystem::ecrire_fichier($fichier_import,$contenu_zip);
  exit(']¤['.'ok'.']¤['."Décompression de l'archive…");
}

//
// 2. Décompression de l'archive...
//
if($action=='verif_file_appli_etape2')
{
  if(is_dir($dossier_dezip))
  {
    FileSystem::supprimer_dossier($dossier_dezip);
  }
  // Dezipper dans le dossier temporaire
  $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 );
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Etape d'import d'une base
// ////////////////////////////////////////////////////////////////////////////////////////////////////
if ($action == 'importer' && $num && $max && $num < $max) {
    if (!count($_SESSION['tab_info'])) {
        exit('Erreur : données du fichier CSV perdues !');
    }
    // Récupérer la série d'infos
    extract($_SESSION['tab_info'][$num]);
    // import_id / geo_id / localisation / denomination / uai / contact_nom / contact_prenom / contact_courriel / date / fichier_nom
    // Préparer le retour en cas de pb
    $retour_cellules_non = '<td class="nu"></td><td>---</td><td>' . html($localisation . ' | ' . $denomination) . '</td><td>' . html($contact_nom . ' ' . $contact_prenom) . '</td>';
    // Créer ou vider le dossier temporaire
    FileSystem::creer_ou_vider_dossier($dossier_temp_sql);
    // Dezipper dans le dossier temporaire
    $code_erreur = FileSystem::unzip(CHEMIN_DOSSIER_DUMP . $fichier_nom, $dossier_temp_sql, TRUE);
    if ($code_erreur) {
        exit(']¤[' . '<tr>' . $retour_cellules_non . '<td><label class="erreur">Erreur : fichiers de ' . html($fichier_nom) . ' impossible à extraire (' . FileSystem::$tab_zip_error[$code_erreur] . ') !</label></td>' . '</tr>');
    }
    // Vérifier le contenu : noms des fichiers
    $fichier_taille_maximale = verifier_dossier_decompression_sauvegarde($dossier_temp_sql);
    if (!$fichier_taille_maximale) {
        FileSystem::supprimer_dossier($dossier_temp_sql);
        // Pas seulement vider, au cas où il y aurait des sous-dossiers créés par l'archive.
        exit(']¤[' . '<tr>' . $retour_cellules_non . '<td><label class="erreur">Erreur : le contenu de ' . html($fichier_nom) . ' ne semble pas être une sauvegarde de base !</label></td>' . '</tr>');
    }
    // Vérifier le contenu : taille des requêtes
    if (!verifier_taille_requetes($fichier_taille_maximale)) {
        FileSystem::supprimer_dossier($dossier_temp_sql);
        // Pas seulement vider, au cas où il y aurait des sous-dossiers créés par l'archive.
        exit(']¤[' . '<tr>' . $retour_cellules_non . '<td><label class="erreur">Erreur : ' . html($fichier_nom) . ' contient au moins un fichier dont la taille dépasse la limitation <em>max_allowed_packet</em> de MySQL !</label></td>' . '</tr>');
    $contenu_zip = cURL::get_contents(SERVEUR_TELECHARGEMENT, $tab_post, 60);
    if (substr($contenu_zip, 0, 6) == 'Erreur') {
        exit(']¤[' . 'pb' . ']¤[' . $contenu_zip);
    }
    FileSystem::ecrire_fichier($fichier_import, $contenu_zip);
    exit(']¤[' . 'ok' . ']¤[' . "Décompression de l'archive&hellip;");
}
//
// 2. Décompression de l'archive...
//
if ($action == 'verif_file_appli_etape2') {
    if (is_dir($dossier_dezip)) {
        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&hellip;");
}
//
// 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&hellip;");
}
//
Exemplo n.º 4
0
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Uploader et dezipper / vérifier un fichier à restaurer
// ////////////////////////////////////////////////////////////////////////////////////////////////////

if($action=='uploader')
{
  $fichier_upload_nom = 'dump_'.$_SESSION['BASE'].'_'.fabriquer_fin_nom_fichier__date_et_alea().'.zip';
  $result = FileSystem::recuperer_upload( CHEMIN_DOSSIER_IMPORT /*fichier_chemin*/ , $fichier_upload_nom /*fichier_nom*/ , array('zip') /*tab_extensions_autorisees*/ , NULL /*tab_extensions_interdites*/ , NULL /*taille_maxi*/ , NULL /*filename_in_zip*/ );
  if($result!==TRUE)
  {
    exit('<li><label class="alerte">Erreur : '.$result.'</label></li>');
  }
  // Créer ou vider le dossier temporaire
  FileSystem::creer_ou_vider_dossier($dossier_temp);
  // Dezipper dans le dossier temporaire
  $code_erreur = FileSystem::unzip( CHEMIN_DOSSIER_IMPORT.$fichier_upload_nom , $dossier_temp , FALSE /*use_ZipArchive*/ );
  if($code_erreur)
  {
    FileSystem::supprimer_dossier($dossier_temp); // Pas seulement vider, au cas où il y aurait des sous-dossiers créés par l'archive.
    exit('<li><label class="alerte">Erreur : votre archive ZIP n\'a pas pu être ouverte ('.FileSystem::$tab_zip_error[$code_erreur].') !</label></li>');
  }
  FileSystem::supprimer_fichier(CHEMIN_DOSSIER_IMPORT.$fichier_upload_nom);
  // Vérifier le contenu : noms des fichiers
  $fichier_taille_maximale = verifier_dossier_decompression_sauvegarde($dossier_temp);
  if(!$fichier_taille_maximale)
  {
    FileSystem::supprimer_dossier($dossier_temp); // Pas seulement vider, au cas où il y aurait des sous-dossiers créés par l'archive.
    exit('<li><label class="alerte">Erreur : votre archive ZIP ne semble pas contenir les fichiers d\'une sauvegarde de la base effectuée par SACoche !</label></li>');
  }
  // Vérifier le contenu : taille des requêtes
  if( !verifier_taille_requetes($fichier_taille_maximale) )
 if ($result !== TRUE) {
     exit('Erreur : ' . $result);
 }
 // vérification du masque
 if (!$masque) {
     exit('Erreur : masque des noms de fichiers non transmis !');
 }
 $masque_filename = '#\\[(sconet_id|sconet_num|reference|nom|prenom|login|ent_id)\\]#';
 $masque_extension = '#\\.(gif|jpg|jpeg|png)$#';
 if (!preg_match($masque_filename, $masque) || !preg_match($masque_extension, $masque)) {
     exit('Erreur : masque des noms de fichiers contenus dans l\'archive non conforme !');
 }
 // Créer ou vider le dossier temporaire
 FileSystem::creer_ou_vider_dossier($dossier_temp);
 // Dezipper dans le dossier temporaire
 $code_erreur = FileSystem::unzip(CHEMIN_DOSSIER_IMPORT . $fichier_nom, $dossier_temp, FALSE);
 FileSystem::supprimer_fichier(CHEMIN_DOSSIER_IMPORT . $fichier_nom);
 if ($code_erreur) {
     FileSystem::supprimer_dossier($dossier_temp);
     // Pas seulement vider, au cas où il y aurait des sous-dossiers créés par l'archive.
     exit('Erreur : votre archive ZIP n\'a pas pu être ouverte (' . FileSystem::$tab_zip_error[$code_erreur] . ') !');
 }
 // Récupérer la liste des élèves et fabriquer le nom de fichier attendu correspondant à chacun
 $tab_bad = array('[sconet_id]', '[sconet_num]', '[reference]', '[nom]', '[prenom]', '[login]', '[ent_id]');
 $champs = 'user_id, user_id_ent, user_sconet_id, user_sconet_elenoet, user_reference, user_nom, user_prenom, user_login';
 $DB_TAB = DB_STRUCTURE_COMMUN::DB_lister_users_regroupement('eleve', 1, 'all', 0, 'alpha', $champs);
 if (!empty($DB_TAB)) {
     foreach ($DB_TAB as $DB_ROW) {
         $tab_bon = array($DB_ROW['user_sconet_id'], $DB_ROW['user_sconet_elenoet'], Clean::fichier($DB_ROW['user_reference']), Clean::fichier($DB_ROW['user_nom']), Clean::fichier($DB_ROW['user_prenom']), Clean::fichier($DB_ROW['user_login']), Clean::fichier($DB_ROW['user_id_ent']));
         $tab_fichier_masque[$DB_ROW['user_id']] = Clean::fichier(str_replace($tab_bad, $tab_bon, $masque));
     }
// ////////////////////////////////////////////////////////////////////////////////////////////////////

if( ($action=='importer') && $num && $max && ($num<$max) )
{
  if(!count($_SESSION['tab_info']))
  {
    exit('Erreur : données du fichier CSV perdues !');
  }
  // Récupérer la série d'infos
  extract($_SESSION['tab_info'][$num]); // import_id / geo_id / localisation / denomination / uai / contact_nom / contact_prenom / contact_courriel / date / fichier_nom
  // Préparer le retour en cas de pb
  $retour_cellules_non = '<td class="nu"></td><td>---</td><td>'.html($localisation.' | '.$denomination).'</td><td>'.html($contact_nom.' '.$contact_prenom).'</td>';
  // Créer ou vider le dossier temporaire
  FileSystem::creer_ou_vider_dossier($dossier_temp_sql);
  // Dezipper dans le dossier temporaire
  $code_erreur = FileSystem::unzip( CHEMIN_DOSSIER_DUMP.$fichier_nom , $dossier_temp_sql , TRUE /*use_ZipArchive*/ );
  if($code_erreur)
  {
    exit(']¤['.'<tr>'.$retour_cellules_non.'<td><label class="erreur">Erreur : fichiers de '.html($fichier_nom).' impossible à extraire ('.FileSystem::$tab_zip_error[$code_erreur].') !</label></td>'.'</tr>');
  }
  // Vérifier le contenu : noms des fichiers
  $fichier_taille_maximale = verifier_dossier_decompression_sauvegarde($dossier_temp_sql);
  if(!$fichier_taille_maximale)
  {
    FileSystem::supprimer_dossier($dossier_temp_sql); // Pas seulement vider, au cas où il y aurait des sous-dossiers créés par l'archive.
    exit(']¤['.'<tr>'.$retour_cellules_non.'<td><label class="erreur">Erreur : le contenu de '.html($fichier_nom).' ne semble pas être une sauvegarde de base !</label></td>'.'</tr>');
  }
  // Vérifier le contenu : taille des requêtes
  if( !verifier_taille_requetes($fichier_taille_maximale) )
  {
    FileSystem::supprimer_dossier($dossier_temp_sql); // Pas seulement vider, au cas où il y aurait des sous-dossiers créés par l'archive.