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 :

Taille maximale des noms de paramètres GET ?


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2011
    Messages : 17
    Points : 23
    Points
    23
    Par défaut Taille maximale des noms de paramètres GET ?
    Bonjour,

    Je cherche à savoir s'il y a un paramètre de configuration de PHP qui limite la taille des noms de paramètres GET. Je parle bien des noms des paramètres, pas des valeurs ni de la taille de l'URL.

    Je suis en effet confronté à un problème que je n'arrive pas à résoudre. Je viens d'installer Piwigo chez moi, sur deux serveurs différents, qu'on va appeler A et B. Piwigo propose un lien 'photos au hasard', qui comme son nom l'indique affiche un certain nombre de photos prises au hasard dans le stock de la galerie. Cette fonctionnalité marche bien sur le serveur A, mais sur le serveur B ça ne fonctionne pas et me renvoie sur la page d'accueil de ma galerie.

    En creusant un peu je me suis rendu compte que sur le serveur B, la variable $_GET est vide.
    L'URL pour les photos au hasard est du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /photo/index.php?/list/123,456,789
    avec les id des photos à afficher (3 ici, mais le nombre dépend des préférences de l'utilisateur, 15 par défaut).
    Ce qui donne dans $_GET :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    array (
        '/list/123,456,789' => '',
    )
    En clair $_GET contient une seule variable dont la valeur est une chaîne vide, et dont le nom contient toutes les infos (façon de faire très curieuse, voire douteuse... mais là n'est pas l'objet de ma question ).

    Et le problème est que sur mon serveur B, avec 15 photos, la liste ne se trouve pas renseignée dans $_GET. Je me retrouve avec un $_GET vide alors que l'URL n'est pas tronquée, je trouve bien tout dans $_SERVER['REQUEST_URI'] et $_SERVER['QUERY_STRING'] ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    array (
    [...]
        'REQUEST_METHOD' => 'GET',
        'QUERY_STRING' => '/list/61,2509,2767,2372,3203,2238,1617,2933,1926,2450,1784,3242,512,1427,1472',
        'REQUEST_URI' => '/photo/index.php?/list/61,2509,2767,2372,3203,2238,1617,2933,1926,2450,1784,3242,512,1427,1472',
    )
    Sur le serveur A, $_GET vaut ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    array (
        '/list/61,2509,2767,2372,3203,2238,1617,2933,1926,2450,1784,3242,512,1427,1472' => '',
    )
    et ça sur le serveur B :
    Je ne trouve rien dans la config de PHP qui limite la taille des noms de paramètres GET, et j'ai beau chercher (mal peut-être...) je ne trouve aucune info à ce sujet sur le net...

    Pour info, les versions de PHP sur mes deux serveurs :
    A : 5.4.4
    B : 5.3.3


    Merci d'avoir lu mon pavé c'est un peu long mais il y a toutes les infos a priori. Est-ce quelqu'un a déjà été confronté à ce problème ?

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je pense que c'est plutôt du côté du serveur web qu'il faut t'orienter.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2011
    Messages : 17
    Points : 23
    Points
    23
    Par défaut
    Tu penses que cette limitation interviendrait plutôt dans la configuration d'Apache ?

    J'ai cherché aussi, mais pour l'instant je ne trouve rien non plus de ce côté

    Les deux serveurs tournent avec Apache 2 : 2.2.22 pour le A (là où ça fonctionne), 2.2.16 pour le B (là où ça ne fonctionne pas).

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    J'ai fais le test sur Apache 2.2.21 et PHP 5.3.8 et ça fonctionne.
    J'ai bien trouvé une instruction Apache "AllowEncodedSlashes" mais quand elle est activée, on obtient une erreur en cas de / dans l'url, pas une url tronquée.

    Qu'on soit d'accord : tu testes bien en ayant un fichier contenant uniquement par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php var_dump($_GET); ?>
    $
    et tu appelles
    tonfichier.php?/list/124,167
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Une simple réécriture d'URL ne permettrait-elle pas de contourner le problème ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteBase /photo
        RewriteRule ^(.*)$ index.php?q=$1 [QSA,L]
    </IfModule>
    (le .htaccess est dans le répertoire /photo)

    Coté PHP, il suffit désormais d'utiliser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
     
    var_dump($_GET['q']);
    Et désormais, tu peux utiliser des URL de la forme http://domaine/photo/list/1,2,3,4,5,6,7,8

  6. #6
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2011
    Messages : 17
    Points : 23
    Points
    23
    Par défaut
    Merci pour ton implication.

    Citation Envoyé par sabotage Voir le message
    J'ai bien trouvé une instruction Apache "AllowEncodedSlashes" mais quand elle est activée, on obtient une erreur en cas de / dans l'url, pas une url tronquée.
    Donc, c'est pas ça, parce que d'une part ça fonctionne si la liste est courte, d'autre part d'autres lien sur la galerie fonctionnent sur le même principe avec des '/' dans la requête sans problèmes.

    Par ailleurs, l'URL n'est pas tronquée, dans $_SERVER['REQUEST_URI'] et $_SERVER['QUERY_STRING'] tout y est.

    Citation Envoyé par sabotage Voir le message
    Qu'on soit d'accord : tu testes bien en ayant un fichier contenant uniquement par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php var_dump($_GET); ?>
    $
    et tu appelles
    tonfichier.php?/list/124,167
    Oui (sauf que c'est du var_export ; ), j'avais commencé par faire des var_export dans le code de Piwigo, puis j'ai isolé le truc, et fini avec juste ça.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <pre>
    <?php
      echo "*** _GET :\n";
      var_export($_GET);
      echo "\n\n*** _SERVER :\n";
      var_export($_SERVER);
    ?>
    </pre>
    Entre temps, je l'ai mis aussi sur mon serveur en ligne, et ça ne fonctionne pas non plus :

    http://www.vanrietschoten.fr/test/in...,512,1427,1472

    Et en supprimant quelques éléments dans la liste ça fonctionne bien :
    http://www.vanrietschoten.fr/test/in...2450,1784,3242


    Je cherche encore...

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2011
    Messages : 17
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par Benjamin Delespierre Voir le message
    Une simple réécriture d'URL ne permettrait-elle pas de contourner le problème ?
    Si, sans doute, mais je préférerais une solution qui évite de toucher au code de Piwigo dans la mesure du possible. À vue de nez ça implique déjà plusieurs modifs dans le code PHP, et c'est toujours un peu galère quand on fait des mises à jour de scripts ensuite, il faut mettre les modifs de côté pour les appliquer sur la nouvelle version, donc quand je peux faire sans modifier je préfère


    Et puis, j'aimerais bien comprendre d'où vient ce phénomène et pourquoi cette différence de fonctionnement entre mes deux serveurs.

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Bon c'est vraiment la taille qui est bloquante

    Par exemple
    http://www.vanrietschoten.fr/test/in...aaaaaaaaaaaaaa
    fonctionne
    mais avec un 66ème "a" ca ne fonctionne plus.

    Je n'ai pas trouvé d'information sur ce type de limitation.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2011
    Messages : 17
    Points : 23
    Points
    23
    Par défaut
    C'est tout bon !!!

    Dans le forum de Piwigo, on m'a fourni le lien suivant, qui, même si'il ne donne pas directement la réponse à mon problème, m'a permis de trouver les paramètres de configuration qui vont bien :
    http://www.shatimes.com/php-suhosin-...arametres-get/

    Là, il parle de la taille des valeurs, mais les tailles de noms ne sont pas loin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    suhosin.get.max_name_length = 256
    suhosin.request.max_varname_length = 256
    Les valeurs par défaut sont à 64.

    Voila, si ça peut aider les prochains

    Merci en tout cas pour vos réponses.


    PS : je ne trouve pas comment mettre le sujet résolu

  10. #10
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par Youri30
    PS : je ne trouve pas comment mettre le sujet résolu
    Le bouton en dessous de la discussion...
    Je l'ai fait pour toi.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

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

Discussions similaires

  1. [DATA] Augmenter la taille maximale du nom des tables SAS
    Par bouazovic dans le forum SAS Base
    Réponses: 2
    Dernier message: 13/02/2015, 11h27
  2. Taille maximale des noms de fichiers?
    Par dexter31 dans le forum Subversion
    Réponses: 1
    Dernier message: 17/12/2008, 14h30
  3. [CR9][VS.NET]Taille maximale d'un champ paramètre
    Par San Soussy dans le forum SDK
    Réponses: 1
    Dernier message: 02/09/2005, 09h03
  4. Réponses: 9
    Dernier message: 29/07/2003, 14h41

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