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

Langage PHP Discussion :

Lecture de fichier et encodage


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 756
    Par défaut Lecture de fichier et encodage
    Bonjour,

    J'ai un script custom d'affichage de fichier de log.

    Ce dernier fonctionne bien mais semble avoir du mal avec les encodages.

    Je viens à la recherche d'idées.

    Nom : Screenshot from 2022-10-10 16-40-23.png
Affichages : 162
Taille : 93,1 Ko

    Comme vous pouvez le voir, le problème semble se poser sur les accents.

    Je récupère le log de cette façon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->driverFile->fileGetContents($path)
    Cette méthode est native de magento 2 dans `src/vendor/magento/framework/Filesystem/Driver/File.php`

    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
        /**
         * Retrieve file contents from given path
         *
         * @param string $path
         * @param string|null $flag
         * @param resource|null $context
         * @return string
         * @throws FileSystemException
         */
        public function fileGetContents($path, $flag = null, $context = null)
        {
            $filename = $this->getScheme() . $path;
            clearstatcache(false, $filename);
            $result = @file_get_contents($filename, $flag, $context);
            if (false === $result) {
                throw new FileSystemException(
                    new Phrase(
                        'The contents from the "%1" file can\'t be read. %2',
                        [$path, $this->getWarningMessage()]
                    )
                );
            }
            return $result;
        }
    RIen de foufou donc le file get contents est natif de php.


    Une idée de ce qui peut causer ça ? Une option d'encodage à rajouter probablement ?


    Voilà à quoi ressemble l'appel principal

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            try {
                $path = $this->directoryList->getPath('var').'/log/'.$logfile ;
                $fileSubContent = substr($this->driverFile->fileGetContents($path),- $nbLine * $nbCharPerLineApproximative);
                $re = '/\[\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}][[:print:]]{1,}/';
                preg_match_all($re, $fileSubContent, $contents, PREG_SET_ORDER, 0);
            } catch (FileSystemException $e) {
                var_dump($e->getMessage());
            }

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 670
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 670
    Par défaut
    si l'encodage de la page d'affichage est le même que l'encodage du texte d'origine, il ne devrait pas y avoir de souci.
    quel est l'encodage de la page d'affichage ?

    lancez un message d'erreur à partir du code php avec des accents et autres caractères spéciaux pour voir le résultat à partir de votre éditeur de fichier php.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 756
    Par défaut
    Ce n'est en fait pas lié à l'encodage, c'est la fonction avec l'expression régulière qui casse la chaine pour une raison que j'ignore

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
                $fileSubContent = substr($this->driverFile->fileGetContents($path),- $nbLine * $nbCharPerLineApproximative);
                var_dump($fileSubContent);
    //[2022-04-27 09:50:01] main.CRITICAL:PayPal a rejeté la demande
     
                $re = '/\[\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}][[:print:]]{1,}/';
                preg_match_all($re, $fileSubContent, $contents, PREG_SET_ORDER, 0);
                var_dump($contents);
     //[2022-04-27 09:50:01] main.CRITICAL: PayPal a rejet

Discussions similaires

  1. Lecture Fichier texte - Encodage
    Par aristeas dans le forum Langage
    Réponses: 2
    Dernier message: 10/02/2012, 16h30
  2. Lecture de fichier ASCII et encodage
    Par Ange_blond dans le forum SL & STL
    Réponses: 3
    Dernier message: 13/10/2010, 09h53
  3. Lecture de fichier: encodage utf-8 et iso-8859-1
    Par WindRider_ dans le forum Langage
    Réponses: 2
    Dernier message: 04/11/2009, 10h23
  4. Lecture de fichiers et encodage
    Par sliderman dans le forum Langage
    Réponses: 2
    Dernier message: 09/04/2008, 20h23

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