Résolu Utilisation de glob(), nom des dossiers et fichiers invalides

Statut
N'est pas ouverte pour d'autres réponses.

Wiligan

Membre
Inscription
31 Octobre 2011
Messages
1 157
Réactions
161
Points
7 403
RGCoins
25
Salut !

Dans mon script, j'utilise la fonction glob() et une fonction récursive afin de lister tous les dossiers d'un répertoire pour afficher leurs noms. Le truc, c'est que quand je modifie leur nom, à l'appel suivant le nom est inchangé au niveau de l'affichage (mais il est bien changé au niveau du système de fichier).

Par exemple, si j'ai un dossier "MACHIN", ça va me l'afficher. Si je le renomme en "TRUC", au prochain appel du script il continuera à s'appeler "MACHIN", et ce même en faisant attention à l'emplacement où je me trouve (tout est défini en chemin relatif), et de toute évidence le tableau contenant la liste des anciens dossier est bien vidé !

Peut être que ça vient de la, mais j'utilise un genre de système de "tags" pour mes dossiers (pour tester), j'ai par exemple MACHIN [truc] que j'ai renommé en MACHIN (truc), mais ça continue d'afficher MACHIN [truc] (et les [ ] sont super mal gérés !).

Bizarrement, seuls mes derniers dossiers créées avec (truc) sont pris en comptes, mais pas les anciens que j'ai renommé qui restent à [truc] ... :/

Une idée ?
Merci !
 
direct


Code:
<?php

// Normalement tu as ça
function glob_recursive($pattern, $flags = 0) {
    $files = glob($pattern, $flags);

    foreach (glob(dirname($pattern).'/*', GLOB_ONLYDIR|GLOB_NOSORT) as $dir) {
        $files = array_merge($files, glob_recursive($dir.'/'.basename($pattern), $flags));
    }

    return $files;
}

foreach (glob_recursive('*') as $filename) {
    echo $filename . '<br />';
}

echo '<p>---</p>';

// Sauf que tu veux modifier les noms, il faut donc, par exemple, faire un preg_replace dans ton foreach et tout mettre dans un tableau

$i = 0;

foreach (glob_recursive('*') as $filename) {
    echo 'Avant:' . $filename . '<br />';
    $array[$i] = preg_replace('/\[/', '(', $filename);
    echo 'Pendant:' . $array[$i] . '<br />';
    $array[$i] = preg_replace('/\]/', ')', $array[$i]);
    echo 'Après:' . $array[$i] . '<br />';
    $i++;
}

echo '<p>---</p>Résultat:';

foreach ($array as $filename) {
    echo $filename . '<br />';
}

?>

direct


C'est ça ? :p
 
Dernière édition:
direct


Code:
<?php

// Normalement tu as ça
function glob_recursive($pattern, $flags = 0) {
    $files = glob($pattern, $flags);

    foreach (glob(dirname($pattern).'/*', GLOB_ONLYDIR|GLOB_NOSORT) as $dir) {
        $files = array_merge($files, glob_recursive($dir.'/'.basename($pattern), $flags));
    }

    return $files;
}

foreach (glob_recursive('*') as $filename) {
    echo $filename . '<br />';
}

echo '<p>---</p>';

// Sauf que tu veux modifier les noms, il faut donc, par exemple, faire un preg_replace dans ton foreach et tout mettre dans un tableau

$i = 0;

foreach (glob_recursive('*') as $filename) {
    echo 'Avant:' . $filename . '<br />';
    $array[$i] = preg_replace('/\[/', '(', $filename);
    echo 'Pendant:' . $array[$i] . '<br />';
    $array[$i] = preg_replace('/\]/', ')', $array[$i]);
    echo 'Après:' . $array[$i] . '<br />';
    $i++;
}

echo '<p>---</p>Résultat:';

foreach ($array as $filename) {
    echo $filename . '<br />';
}

?>

direct


C'est ça ? :p

Salut !

Merci pour ta réponse !
En fait je viens de régler le problème et c'est parfaitement ridicule ... Pour une raison quelconque, le nom des dossiers et des fichiers avaient bien été changés dans mon explorateur de fichier (visuellement), mais ils ont gardé leur ancien nom (que je pouvais voir en ouvrant le dossier avec Atom par exemple ...).

Bref, j'ai tout renommé à la main, c'était long, c'était chiant, mais ça marche ! xD
 
Salut !

Merci pour ta réponse !
En fait je viens de régler le problème et c'est parfaitement ridicule ... Pour une raison quelconque, le nom des dossiers et des fichiers avaient bien été changés dans mon explorateur de fichier (visuellement), mais ils ont gardé leur ancien nom (que je pouvais voir en ouvrant le dossier avec Atom par exemple ...).

Bref, j'ai tout renommé à la main, c'était long, c'était chiant, mais ça marche ! xD
Ah oui, j'étais complètement hors sujet :troll:
Mais bon merci, tu m'as fait m'exercer en découvrant la fonction glob() :troll:
 
Statut
N'est pas ouverte pour d'autres réponses.
Retour
Haut