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

Shell et commandes GNU Discussion :

Taille d'un argument passé en ligne de commande limité !


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    422
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 422
    Points : 83
    Points
    83
    Par défaut Taille d'un argument passé en ligne de commande limité !
    Bonjour,

    Je précise tout d'abord que je ne suis vraiment pas caler en linux

    Je vous expose mon soucis:

    J'ai un site PHP dans lequel je fais appel à la fonction exec() qui me permet d'appeler un exécutable java avec 5 arguments.

    Or le problème est que parmi mes 5 arguments il y en a un qui peut être une chaine très longue !

    Or linux (et d'après ce que j'ai pu lire Windows aussi) limite apparemment la taille d'un argument à un nombre de caractères maximum.


    Je ne savais pas ceci et c'est pour cela que des fois ça marchait et des fois non...

    Pouvez-vous me donner un moyen de contourner ceci, d'augmenter par exemple pour tel argument la taille maximum autorisé


    Un grand merci d'avance.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 90
    Points : 111
    Points
    111
    Par défaut shift + concatenation ?
    peux-tu accéder au code source de ton programme java ?
    Si oui met l'argument qui peux être si long en dernier et quand tu l'appelles tu divises celui-ci en morceau qui ne dépasse pas la taille maximum autorisée pour un paramètre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    prgmJava arg1 arg2 arg3 arg4 arg51 arg52 arg53
    et dans ton programme java tu recontruit le dernier paramètre en concaténant tous les paramètres supérieur ou égal à 5.
    Donc tu aurais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    arg1 arg2 arg3 arg4 arg51arg52arg53

  3. #3
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 129
    Points
    28 129
    Par défaut
    Bonjour,

    Tu sembles surpris du fait que la taille d'un argument soit limité. Mais saches qu'en informatique, tout a une taille limitee !

    Lorsque tu dis que ta chaine peut etre tres longue, tu penses a quelle taille ? Si elle est vraiment si grosse que ca, peut-etre faudrait-il en venir a l'evidence suivante : elle est trop grosse, et ne passera pas en argument. Je l'ecris donc dans un fichier, et je passe le nom du fichier a mon programme.

    Attention, les fichiers aussi ont une taille maximum. Mais elle est deja plus grande que la taille max d'un argument.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    422
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 422
    Points : 83
    Points
    83
    Par défaut
    Merci pour vos réponses

    gangsoleil, j'ai écouté ce que tu m'a dit: je suis passé par un fichier...

    Mais malheureusement, y a encore un problème !

    En fait, c'est bizarre mais même en passant par un fichier, quand la chaine est trop longue ben la aussi mon exec me plante!

    voici ma commande dans mon script PHP:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    unset($res);
    exec ("java -Djava.endorsed.dirs=".PUBLIC_HTML_PATH."/java/ressource -jar ".PUBLIC_HTML_PATH."/java/executable.jar \"$completePathFileName\"", $res, $return_var);
    Et bien figurez-vous que malgré cela, lorsque mon argument est trop grand ca ne passe pas alors que ça passe lorsqu'il est moins long...




    D'ailleurs, $return_var renvoi 1 à ce moment là (alors que normalement, il me semble qu'il doit renvoyer 0 lorsque tout s'est bien déroulé)

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    422
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 422
    Points : 83
    Points
    83
    Par défaut
    bon j'ai des nouvelles


    J'ai testé l'exécution du .jar directement à partir de la console putty et la il semblerai que j'ai un problème dans mon exécutable java : Exception indexOutOfBoundsException index: 0, size: 0

    Donc pour essayé de débuggé ceci, j'ai bossé sur mon ordi en local pour être plus confort, avec eclipse et tout le toutime...

    J'ai bien sur repris le même fichier pour tester et la, BIZZARE: aucun bug!!!

    Plus d'Exception indexOutOfBoundsException !!!


    La ça devient vraiment chelou...


    Je remarque quelque chose, lorsque j'ai loué ce serveur chez OVH il y a un mois, il y avait une ancienne version de JAVA dessus (1.4) et mon programme nécessitait la version 1.6 pour être conforme...

    Donc, j'ai suivi les conseils de quelqu'un pour me mettre à jour (car je n'y connais rien en mise à jour sous linux) en tapant la commande:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    yum install java-1.6.0-openjdk
    Et effectivement ça m'avait bien mis à jour et j'ai pu faire marcher mon executable.

    Or il me semble que le openjdk n'est pas exactement le même que le jre fournit par sun (voir ce post)

    De plus chez moi en locale (là où il n'y a pas de bug), j'ai le JRE de Sun qui est installé...



    Pensez-vous que ceci explique cela et qu'il faut que je me mette à changer et passer à la JRE de sun? ou avez-vous une autre idée ?

    Merci


    [EDIT]
    je viens de voir que le bug que j'ai est reporté ici, dans la database des bugs de sun

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    422
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 422
    Points : 83
    Points
    83
    Par défaut
    Je viens au nouvelles!

    Bon ben j'ai trouvé d'ou venait mon problème..

    En fait, c'était un problème interne lié à mon programme java, c'était simplement dû au fait que il y avait un limitTime trop faible et il fallait juste l'augmenter!!

    Tout ça pour ça...

    Encore merci

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

Discussions similaires

  1. Argument passé en ligne de commande
    Par katoyi dans le forum VB.NET
    Réponses: 1
    Dernier message: 09/10/2008, 10h45
  2. Récupérer des arguments passé en ligne de commande
    Par FinalSpirit dans le forum VBScript
    Réponses: 2
    Dernier message: 01/10/2007, 10h54
  3. argument avec espace passé en ligne de commande
    Par gorgonite dans le forum Langage
    Réponses: 9
    Dernier message: 07/05/2007, 23h07
  4. Réponses: 3
    Dernier message: 03/03/2007, 19h50
  5. Récuperer Arguments sur la ligne de commande ?
    Par Muetdhiver dans le forum x86 16-bits
    Réponses: 9
    Dernier message: 20/01/2003, 21h01

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