Hello hello,
Pour des besoins particulier, j'ai complètement refondu le système, pour ne garder que les fonctions de conversions d'albat.
Au programme des fonctionnalités:
- Traitement récursif et conservation de l'arborescence
- Choix des extensions à traiter (sous forme de tableau)
- Choix des répertoires à exclure ( '.', '..', dossiers svn, librairies externes...)
- Traitement des fichiers vides (simple création du fichier dans le répertoire cible
- Compteur de nombre de fichiers (je suis arrivé à 1244 pour mon projet et ça roule
)
J'ai traité le contenu des fichiers lignes à lignes, car j'en avais un de 405 ... Mo :-°
Donc celà permet combiné à une modification du paramètre memory_limit (php.ini) et du timeout de traiter de très gros fichiers!
(bon le processeur en prend un coup

)
Limitations:
- Attention à ne prendre pour argent comptant le dossier de destination comme votre projet tout frais tout beau!
En effet les dossiers et extensions exclus ne sont pas copiés dans le répertoire source. Il vous faudra faire un "merge" des deux versions
- Attention aux droits des dossiers!
Voici le code:
<table summary="UTF8_izer">
<?php
// nécessaire pour les gros fichiers
// il peut être aussi utile de changer le memory_limit dans le php.ini
set_time_limit(0);
/**
* utf8izer
*
* Permet de transformer les fichiers d'un répertoire récursivement
* en gardant l'arborescence.
*
* @param string $repertoire le répertoire à traiter
* @param string $dossier_utf8 le dossier de destination
* @param array $extensions extensions à traiter
* @param array $exclude_dir répertoires à exclure
* @param bool $first_time indique si la fonction est utilisé
* la première fois, afin d'initialiser
* $dossier_iso et $compteur
*/
function utf8izer($repertoire,$dossier_utf8,$extensions=array('php','html'),$exclude_dir=array('.','..'),$first_time=true)
{
// Compteur du nombre de fichier traité
static $compteur;
// Dossier iso, afin d'effectuer les remplacement de chemins
static $dossier_iso;
// Si premier appel, initialisation
if($first_time){
$compteur = 1;
$dossier_iso = $repertoire;
}
// Ouverture du repertoire
$le_repertoire = opendir($repertoire) or die("Erreur le repertoire $repertoire existe pas");
// Lecture de son contenu
while($fichier = @readdir($le_repertoire))
{
// Si dossier exclu, on passe à l'entrée suivante
if (in_array($fichier,$exclude_dir)) continue;
// on prépare le répertoire cible
$repertoire_cible = str_replace($dossier_iso,$dossier_utf8,$repertoire);
// Si repertoire
if(is_dir($repertoire.'/'.$fichier))
{
// si il n'existe pas, on essaye de créer le répertoire
if (!is_dir($repertoire_cible) && !mkdir($repertoire_cible.'/'.$fichier, 0777, true)) {
die('Echec lors de la création des répertoires...<br />'.$repertoire_cible.'/'.$fichier);
}
// et on descend plus profond dans l'arborescence
utf8izer($repertoire.'/'.$fichier,$dossier_utf8,$extensions,$exclude_dir,false);
}
// Si fichier
else
{
// si il n'éxiste pas déjà dans le répertoire cible
if(!is_file($repertoire_cible.'/'.$fichier)){
// Récupération des infos sur le fichier
$file_infos = pathinfo($repertoire.'/'.$fichier);
// Si extension à traiter
if(in_array($file_infos['extension'],$extensions)){
echo '<tr>'.PHP_EOL.
'<td>'.$compteur.'</td>'.PHP_EOL.
'<td>'.$repertoire.'/'.$fichier.'</td>'.PHP_EOL;
// récupération du contenu sous forme de tableau pour
// pouvoir passer le contenu ligne par ligne aux fonctions
// de transformation, car si le fichier est trop gros
// elles ne fonctionnent plus.
$contenu_array = file($repertoire.'/'.$fichier);
// Si récupération OK
if ($contenu_array!==false){
// taille du tableau
$contenu_size = count($contenu_array);
// Si non vide
if(!empty($contenu_array)){
// initialisation du nouveau contenu
$contenu_new = '';
// parcours de l'ancien contenu
for($i = 0; $i<$contenu_size;$i++){
// transformation de la ligne
$contenu_tmp = $contenu_array[$i];
$contenu_tmp = utf8_encode($contenu_tmp);
$contenu_tmp = html_entity_decode($contenu_tmp,ENT_NOQUOTES,'UTF-8');
// ajout au nouveau contenu
$contenu_new.=$contenu_tmp;
}
// test si le dossier existe déjà
if (!is_dir($repertoire_cible) && !mkdir($repertoire_cible, 0777, true)) {
die('Echec lors de la création des répertoires...<br />'.$repertoire_cible.'/'.$fichier);
}
// écriture dans le fichier cible du résultat final
$conversion = file_put_contents($repertoire_cible.'/'.$fichier,$contenu_new);
}
// création fichier vide
else {
$conversion = fopen($repertoire_cible.'/'.$fichier,'w');
}
echo '<td>'.($conversion!==false ? 'OK' : 'Conversion avortée...<br />('.$repertoire_cible.'/'.$fichier.')').'</td></tr>'."\n";
}
// récupération contenu incorrecte
else {
echo '<td>Impossible de récupérer le contenu...</td></tr>'."\n";
}
// on incrémente le nombre de fichiers traités
$compteur++;
}
}
}
}
closedir($le_repertoire);
}
$dossier_iso = '/path/to/myproject';
$dossier_utf8 = '/path/to/myproject_utf8';
$exclude_dir=array(".","..",".svn","jpgraph","phpToPDF","nbproject");
$extensions = array('php','htm','css','tpl','js','sql','html');
utf8izer($dossier_iso,$dossier_utf8,$extensions,$exclude_dir);
?>
</table>