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 :

Fonction file_get_contents et paramètre maxlen par défaut [PHP 5.2]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 931
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 931
    Par défaut Fonction file_get_contents et paramètre maxlen par défaut
    Salut,

    Je développe une classe "Fichier" dont l'une des méthodes est get() et qui appelle la fonction file_get_contents().

    J'ai dû rajouter depuis peu un paramètre à cette méthode pour prendre en compte le nombre de caractères retournés. Seulement les autres appels qui n'ont pas besoin du paramètre maxlen ne fonctionnent plus.

    Voici en très simplifié ce que donne ma méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public function get( $offset = null, $maxlen = null )
    {
       $contents = file_get_contents( $this->filename, null, null, $offset, $maxlen );
       return $contents;
    }
    Ayant la valeur null pour le paramètre maxlen quand je n'en ai pas besoin, la fonction file_get_contents() ne me retourne rien.
    Dans la doc PHP, la valeur par défaut de maxlen est -1, donc j'ai aussi essayé de renseigner -1 par défaut, seulement j'ai un warning me disant que maxlen doit être un entier positif.

    Je pourrais contourner le problème en testant si le paramètre maxlen est à -1 et faire un appel différent de la fonction, mais si je pouvais éviter ça serait top.

    Donc ma question est : Est-ce que vous connaissez la valeur par défaut à mettre à maxlen quand celui-ci est renseigné mais que l'on veut quand même l'ensemble du fichier ?

    Merci !

  2. #2
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Par défaut
    Citation Envoyé par Bisûnûrs Voir le message
    Donc ma question est : Est-ce que vous connaissez la valeur par défaut à mettre à maxlen quand celui-ci est renseigné mais que l'on veut quand même l'ensemble du fichier ?
    Pas compris , si maxlen est renseigné c'est que tu ne veux pas la totalité du fichier ?
    Sinon tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if ($maxlen === null)
        $maxlen = filesize( $this->filename);
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

  3. #3
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 931
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 931
    Par défaut
    Citation Envoyé par RideKick Voir le message
    Pas compris , si maxlen est renseigné c'est que tu ne veux pas la totalité du fichier ?
    Oui mais non. Quand je lui affecte null, il est renseigné, mais je veux la totalité du fichier quand même.

    Mon appel de la fonction file_get_contents() ressemblera à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    file_get_contents( 'fichier', null, null, null, null );
    Sauf que ça ne me retourne rien.

    Citation Envoyé par RideKick Voir le message
    Sinon tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if ($maxlen === null)
        $maxlen = filesize( $this->filename);
    Ca revient à faire un test (différent de celui que j'ai annoncé, mais un test quand même), qui d'ailleurs est plus lourd que le mien, vu qu'il fait appel à une fonction "stats" de fichier.
    C'est pour ça que je voulais savoir s'il n'y avait pas une valeur par défaut au paramètre maxlen qui me permettait de récupérer tout le fichier quand même, sans avoir à renseigner le nombre exact de caractères du fichier en passant par une autre fonction.

  4. #4
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Par défaut
    ah ok, toi tu veux pas de test du tout .......ça va être chaud pour toi étant donné que ça ne marche ni avec null, ni avec -1
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

  5. #5
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 931
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 931
    Par défaut
    Citation Envoyé par RideKick Voir le message
    ah ok, toi tu veux pas de test du tout
    Exactement !

    Citation Envoyé par RideKick Voir le message
    ça va être chaud pour toi étant donné que ça ne marche ni avec null, ni avec -1
    C'est justement ça qui est bizarre. Vu que maxlen est un paramètre facultatif, il devrait avoir une valeur qui nous permet de l'ignorer, sauf que là, ça marche pas.

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    En interne, apparemment, ce paramètre, lorsqu'il n'est pas renseigné, est initialisé à une valeur importante qui correspond à la macro PHP_STREAM_COPY_ALL (2MB puis, s'étant avéré insuffisant, à (size_t) -1). Elle représente le nombre maximal d'octets à lire (il peut y en avoir moins, php le gérera). Et non -1, valeur qui, en effet, génèrera une erreur.

    Donc je ne vois pas vraiment d'autres solutions.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Paramètres template par défaut
    Par oodini dans le forum Langage
    Réponses: 18
    Dernier message: 04/06/2013, 01h10
  2. [WD14] Paramètres SMTP par défaut
    Par Gino76 dans le forum WinDev
    Réponses: 0
    Dernier message: 28/01/2011, 09h48
  3. Réponses: 2
    Dernier message: 27/03/2009, 22h01
  4. [XI] Paramètre date par défaut
    Par leloup84 dans le forum SAP Crystal Reports
    Réponses: 0
    Dernier message: 02/10/2007, 16h00
  5. Réponses: 15
    Dernier message: 21/08/2006, 01h41

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