Exemplo n.º 1
0
 /**
  * Méthode pour compresser ou minifier un fichier css ou js
  * 
  * Compression ou minification d'un fichier css ou js sur le serveur en production, avec date auto-insérée si besoin pour éviter tout souci de mise en cache.
  * Hors PROD on ne compresse/minifie pas pour faciliter le débugage.
  * On peut toutefois forcer la compression/minification avec GET['minify'] afin d'en tester le bon fonctionnement.
  * Si pas de compression (hors PROD), on ajoute un GET dans l'URL pour forcer le navigateur à mettre à jour son cache.
  * Attention cependant concernant cette dernière technique : avec les réglages standards d'Apache, ajouter un GET dans l'URL fait que beaucoup de navigateurs ne mettent pas le fichier en cache (donc il est rechargé tout le temps, même si le GET est le même) ; pas de souci si le serveur envoie un header avec une date d'expiration explicite...
  * 
  * @param string $chemin    chemin complet vers le fichier
  * @param string $methode   soit "pack" soit "mini" soit "comm"
  * @return string           chemin vers le fichier à prendre en compte (à indiquer dans la page web) ; il sera relatif si non compressé, absolu si compressé
  */
 private static function compacter($chemin,$methode)
 {
   if(substr($chemin,0,4)=='http')
   {
     // Cas d'un fichier distant
     return $chemin;
   }
   $fichier_original_chemin = $chemin;
   $fichier_original_date   = filemtime($fichier_original_chemin);
   $fichier_original_url    = $fichier_original_chemin.'?t='.$fichier_original_date;
   if( (SERVEUR_TYPE == 'PROD') || isset($_GET['minify']) )
   {
     // On peut se permettre d'enregistrer les js et css en dehors de leur dossier d'origine car les répertoires sont tous de mêmes niveaux.
     // En cas d'appel depuis le site du projet il faut éventuellement respecter le chemin vers le site du projet.
     $tmp_appli = ( (!defined('APPEL_SITE_PROJET')) || (strpos($chemin,'/sacoche/')!==FALSE) ) ? TRUE : FALSE ; /* /!\ modif classe Sésamath /!\ */
     // Conserver les extensions des js et css (le serveur pouvant se baser sur les extensions pour sa gestion du cache et des charsets).
     $fichier_original_extension = pathinfo($fichier_original_chemin,PATHINFO_EXTENSION);
     $fichier_chemin_sans_slash  = substr( str_replace( array('./sacoche/','./','/') , array('','','__') , $fichier_original_chemin ) , 0 , -(strlen($fichier_original_extension)+1) ); /* /!\ modif classe Sésamath /!\ */
     $fichier_compact_nom        = $fichier_chemin_sans_slash.'_'.$fichier_original_date.'.'.$methode.'.'.$fichier_original_extension;
     $fichier_compact_chemin     = ($tmp_appli) ? CHEMIN_DOSSIER_TMP.$fichier_compact_nom : CHEMIN_DOSSIER_PROJET_TMP.$fichier_compact_nom ; /* /!\ modif classe Sésamath /!\ */
     $fichier_compact_url        = ($tmp_appli) ?        URL_DIR_TMP.$fichier_compact_nom :        URL_DIR_PROJET_TMP.$fichier_compact_nom ; /* /!\ modif classe Sésamath /!\ */
     $fichier_compact_date       = (is_file($fichier_compact_chemin)) ? filemtime($fichier_compact_chemin) : 0 ;
     // Sur le serveur en production, on compresse le fichier s'il ne l'est pas.
     if($fichier_compact_date<$fichier_original_date)
     {
       $fichier_original_contenu = file_get_contents($fichier_original_chemin);
       $fichier_original_contenu = utf8_decode($fichier_original_contenu); // Attention, il faut envoyer à ces classes de l'iso et pas de l'utf8.
       if( ($fichier_original_extension=='js') && ($methode=='pack') )
       {
         $myPacker = new JavaScriptPacker($fichier_original_contenu, 62, TRUE, FALSE);
         $fichier_compact_contenu = trim($myPacker->pack());
       }
       elseif( ($fichier_original_extension=='js') && ($methode=='mini') )
       {
         $fichier_compact_contenu = trim(JSMin::minify($fichier_original_contenu));
       }
       elseif( ($fichier_original_extension=='js') && ($methode=='comm') )
       {
         // Retrait des commentaires // ... et /** ... */ et /*! ... */
         // Option de recherche "s" (PCRE_DOTALL) pour inclure les retours à la lignes (@see http://fr.php.net/manual/fr/reference.pcre.pattern.modifiers.php).
         $fichier_compact_contenu = trim(
           preg_replace( '#'.'(\n)+'.'#s' , "\n" , 
           preg_replace( '#'.'// '.'(.*?)'.'\n'.'#s' , '' , 
           preg_replace( '#'.'/\*!'.'(.*?)'.'\*/'.'#s' , '' , 
           preg_replace( '#'.'/\*\*'.'(.*?)'.'\*/'.'#s' , '' , 
           $fichier_original_contenu ) ) ) ) );
       }
       elseif( ($fichier_original_extension=='css') && ($methode=='mini') )
       {
         $fichier_compact_contenu = cssmin::minify($fichier_original_contenu);
       }
       else
       {
         // Normalement on ne doit pas en arriver là... sauf à passer de mauvais paramètres à la fonction.
         $fichier_compact_contenu = $fichier_original_contenu;
       }
       $fichier_compact_contenu = utf8_encode($fichier_compact_contenu);  // On réencode donc en UTF-8...
       // Il se peut que le droit en écriture ne soit pas autorisé et que la procédure d'install ne l'ai pas encore vérifié ou que le dossier __tmp n'ait pas encore été créé.
       $test_ecriture = FileSystem::ecrire_fichier_si_possible($fichier_compact_chemin,$fichier_compact_contenu); /* /!\ modif classe Sésamath /!\ */
       return $test_ecriture ? $fichier_compact_url : $fichier_original_url ; /* /!\ modif classe Sésamath /!\ */
     }
     return $fichier_compact_url;
   }
   else
   {
     // Sur un serveur local on n'encombre pas le SVN, en DEV on garde le fichier normal pour debugguer si besoin.
     return $fichier_original_url;
   }
 }
Exemplo n.º 2
0
 /**
  * Ecrire un fichier "index.htm" vide dans un dossier pour éviter le lsitage du répertoire.
  * 
  * @param string   $dossier_chemin   Chemin jusqu'au dossier
  * @param bool     $obligatoire      Facultatif, TRUE par défaut.
  * @return bool
  */
 public static function ecrire_fichier_index($dossier_chemin,$obligatoire=TRUE)
 {
   $ds = (substr($dossier_chemin,-1)==DS) ? '' : DS ;
   $fichier_chemin  = $dossier_chemin.$ds.'index.htm';
   $fichier_contenu = 'Circulez, il n\'y a rien à voir par ici !';
   if($obligatoire) return FileSystem::ecrire_fichier( $fichier_chemin , $fichier_contenu );
   else return FileSystem::ecrire_fichier_si_possible( $fichier_chemin , $fichier_contenu );
 }
Exemplo n.º 3
0
  // Création des fichiers index.htm
  $poursuivre1 = TRUE;
  foreach(FileSystem::$tab_dossier_tmp as $dossier)
  {
    $poursuivre1 = $poursuivre1 && FileSystem::ecrire_fichier_index( $dossier , FALSE /*obligatoire*/ ) ;
  }
  if($poursuivre1)
  {
    $affichage .= '<label class="valide">Fichiers &laquo;&nbsp;<b>index.htm</b>&nbsp;&raquo; créés dans chaque sous-dossier de &laquo;&nbsp;<b>'.FileSystem::fin_chemin(CHEMIN_DOSSIER_TMP).'</b>&nbsp;&raquo;.</label><br />'.NL;
  }
  else
  {
    $affichage .= '<label class="erreur">Échec lors de la création d\'un ou plusieurs fichiers &laquo;&nbsp;<b>index.htm</b>&nbsp;&raquo; dans chaque dossier précédent.</label><br />'.NL;
  }
  // Création du fichier .htaccess
  $poursuivre2 = FileSystem::ecrire_fichier_si_possible( CHEMIN_DOSSIER_PRIVATE.'.htaccess' , 'deny from all'.NL );
  if($poursuivre2)
  {
    $affichage .= '<label class="valide">Fichier &laquo;&nbsp;<b>.htaccess</b>&nbsp;&raquo; créé dans le dossier &laquo;&nbsp;<b>'.FileSystem::fin_chemin(CHEMIN_DOSSIER_PRIVATE).'</b>&nbsp;&raquo;.</label>'.NL;
  }
  else
  {
    $affichage .= '<label class="erreur">Échec lors de la création du fichier &laquo;&nbsp;<b>.htaccess</b>&nbsp;&raquo; dans le dossier &laquo;&nbsp;<b>'.FileSystem::fin_chemin(CHEMIN_DOSSIER_PRIVATE).'</b>&nbsp;&raquo;.</label>.'.NL;
  }
  // Affichage du résultat des opérations
  echo $affichage;
  echo ($poursuivre1 && $poursuivre2) ? '<p><span class="tab"><a href="#" class="step3">Passer à l\'étape 3.</a><label id="ajax_msg">&nbsp;</label></span></p>' : '<p><span class="tab"><a href="#" class="step2">Reprendre l\'étape 2.</a><label id="ajax_msg">&nbsp;</label></span></p>' ;
  exit();
}

// ////////////////////////////////////////////////////////////////////////////////////////////////////
Exemplo n.º 4
0
    } else {
        FileSystem::supprimer_fichier(CHEMIN_FICHIER_DEBUG_CONFIG, TRUE);
    }
    exit('ok');
}
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Modifier les paramètres des logs phpCAS
// ////////////////////////////////////////////////////////////////////////////////////////////////////
if ($action == 'modifier_phpCAS' && $chemin_logs) {
    $chemin_logs = substr($chemin_logs, -1) == DS ? $chemin_logs : $chemin_logs . DS;
    // Vérifier chemin valide
    if (!is_dir($chemin_logs)) {
        exit('Chemin invalide (le dossier n\'existe pas) !');
    }
    // Tester droits en écriture
    if (!FileSystem::ecrire_fichier_si_possible($chemin_logs . 'debugcas_test_ecriture.txt', 'ok')) {
        exit('Droits en écriture dans le dossier insuffisants !');
    }
    FileSystem::supprimer_fichier($chemin_logs . 'debugcas_test_ecriture.txt');
    // Nettoyer la liste des établissements transmise
    if ($etabl_id_listing) {
        $tab_etabl_id = explode(',', $etabl_id_listing);
        $tab_etabl_id = Clean::map_entier($tab_etabl_id);
        $tab_etabl_id = array_filter($tab_etabl_id, 'positif');
        $etabl_id_listing = count($tab_etabl_id) ? ',' . implode(',', $tab_etabl_id) . ',' : '';
    }
    // ok
    FileSystem::fabriquer_fichier_hebergeur_info(array('PHPCAS_CHEMIN_LOGS' => $chemin_logs, 'PHPCAS_ETABL_ID_LISTING' => $etabl_id_listing));
    exit('ok');
}
// ////////////////////////////////////////////////////////////////////////////////////////////////////