IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

EDI, CMS, Outils, Scripts et API PHP Discussion :

script pour suprimer le caractere "\r" dans un fichier


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 72
    Points : 35
    Points
    35
    Par défaut script pour suprimer le caractere "\r" dans un fichier
    bonjour,
    je travaille sous un systeme linux, et actuellement j'ai un problème avec un dossier contenant plusieurs fichiers copiés a partir d'un systeme windows, et donc ces fichiers portent le caractere "\r" sur leur en-tete. et donc il m'est impossible d'executer ces genre de fichier sur ma plateforme linux.
    j'ai telecharger sur le net le script, ci-dessous, permettant de localiser les fichiers portant ce caractère et ensuite de le supprimer. malheureusement en executant le script, j'ai bien le message disant que le fichier a été converti, mais quand je verifie je me rend compte que le caractere "\r" s'y trouve encore.
    quelqu'un ici pourrait-il jeter un coup d'oeil a ce script et me dire a quel niveau ça ne marche pas ? merci d'avance pour toute contribution.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
    <?php
    class convertCRLF {
     
    	public function __construct() {
     
    		$this->countfiles = 0;
    		$this->count = 0;
    		$this->ext = array (
    			'php',
    			'sh',
    			'ini',
    			'png',
    			'xml',
    			'ini',
    			'html',
    			'js',
    			'css',
    			'txt'
    		);
    		$this->returnlist = array ();
     
    	}
     
    	private function trim_CR_ContentFile($file) {
    		$datas = str_replace("\r", '', file_get_contents($file));
    		$fp = fopen($file, "wb+");
    		fwrite($fp, $datas);
    		fclose($fp);
    	}
     
    	private function getExtension($string) {
    		$getExtension = explode(".", $string);
    		return $getExtension[sizeof(explode(".", $string)) - 1];
    	}
     
    	public function viewtree($path = ".") {
    		$files = glob($path . '/*');
    		foreach ($files as $value) {
    			if (is_dir($value)) {
    				self :: viewtree($value);
    			} else {
    				if (in_array(strtolower(self :: getExtension($value)), $this->ext)) {
    					$this->count++;
    					$buffer = file_get_contents($value);
    					if (preg_match('['.chr(13).']', $buffer)) {
    						$this->returnlist[] = $value;
    						$this->countfiles++;
    						self :: trim_CR_ContentFile($value);
    					}
    				}
    			}
    		}
    	}
     
    	public function __toString() {
    		$return = 	$this->count .
    					' fichiers de type ' . implode(', ', $this->ext) .
    					'<br />' .
    					($this->countfiles != 0 ? $this->countfiles . ' trouvé' .
    					($this->countfiles > 1 ? 's' : false) .
    					'.' : 'Aucun CRLF trouvé.');
    		foreach ($this->returnlist as $value) {
    			$return .= '<br />' . $value . ' converti';
    		}
    		return $return;
    	}
    }
     
    $getfiles = new convertCRLF();
    $getfiles->viewtree();
    echo $getfiles;
    ?>

  2. #2
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    Ton script à l'air bon, ça ne serait pas plutôt un problème de droits?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    chmod u+x mon/script #pour moi
    chmod o+x mon/script #pour apache2
    sinon je vois ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    private function trim_CR_ContentFile($file)
    self :: trim_CR_ContentFile($value);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    private function getExtension();
    self :: getExtension($value)
    J'ai un php qui me réclame des déclarations static dans de tels cas, mais c'est pas le bug à proprement parler.

    après moi j'en profiterai pour faire une conversion latin1 => utf8 avec utf8_encode()

  3. #3
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 226
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 226
    Points : 8 485
    Points
    8 485
    Billets dans le blog
    17
    Par défaut
    L'expression rationnelle ne me paraît pas correctement délimitée. http://fr.php.net/manual/fr/regexp.r...delimiters.php
    Sinon je pense comme gene69 : pb de droits ou inhérent à la méthode trim_CR_ContentFile

    La classe fait un peu de tout et de n'importe quoi, essaie ça pour voir si ça va mieux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    <?php
     
    header('Content-Type: text/plain') ;
     
    class ExtensionsRecursiveFilterIterator extends RecursiveFilterIterator
    {
        // Fichiers à traiter
        private $extensions = array('php', 'html', 'css') ; // etc.
     
        public function accept( )
        {
            return $this->isDir( ) ? TRUE
                                   : in_array(pathinfo($this->getFileName( ),
                                                       PATHINFO_EXTENSION),
                                              $this->extensions) ;
        }
    }
     
    $delete = "\r" ; // Motif à supprimer des fichiers
    $directory = '/path/to/dir/to/process' ; // Répertoire à traiter récursivement
    // Attention, je ne saurais être tenu responsable d'une mauvaise utilisation de ce paramètre
     
    // http://fr.php.net/spl
    $iterator = new RecursiveIteratorIterator(
                    new ExtensionsRecursiveFilterIterator(
                        new RecursiveDirectoryIterator($directory))) ;
     
    $n = 0 ;
    foreach ( $iterator as $file ) {
        echo $file->getRealPath( ) ;
        $data = file_get_contents($file->getRealPath( )) ;
        $data = str_replace($delete, '', $data) ;
        file_put_contents($file->getRealPath( ), $data) ;
        echo ' [', ++$n, "]\r\n" ;
    }
     
    ?>

  4. #4
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public function viewtree($path = ".") 
    {
    $this->
    }
     
    self :: viewtree($value);
    ça c'est faux.
    J'avais pas vu le preg_match.

Discussions similaires

  1. Réponses: 22
    Dernier message: 03/08/2007, 15h57
  2. Réponses: 8
    Dernier message: 31/05/2006, 12h33
  3. [MySQL] Script pour modifier les caracteres speciaux dans la bdd
    Par isa150183 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 15/09/2005, 13h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo