Bonjour,
Je précise tout d'abord que je ne suis vraiment pas calé 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.
# fichier ou mémoire partagée
Posté par YannPeniguel . Évalué à 2.
http://php.net/manual/en/book.sem.php
http://bmsi.com/java/posix/
http://bmsi.com/java/posix/posix-1.2.2/doc/index.html
cradingue: Tu créé un fichier avec ton texte par exemple dans /tmp et tu passe son chemin en argument.
Pour chaque personne qui me plussoie, je frappe un fan de Justin Bieber.
[^] # Re: fichier ou mémoire partagée
Posté par yellowiscool . Évalué à 5.
Envoyé depuis mon lapin.
[^] # Re: fichier ou mémoire partagée
Posté par YannPeniguel . Évalué à 2.
Pour chaque personne qui me plussoie, je frappe un fan de Justin Bieber.
[^] # Re: fichier ou mémoire partagée
Posté par benthebest . Évalué à 1.
[^] # Re: fichier ou mémoire partagée
Posté par Infernal Quack (site web personnel) . Évalué à 10.
L'association LinuxFr ne saurait être tenue responsable des propos légalement repréhensibles ou faisant allusion à l'évêque de Rome, au chef de l'Église catholique romaine ou au chef temporel de l'État du Vatican et se trouvant dans ce commentaire
[^] # Re: fichier ou mémoire partagée
Posté par benthebest . Évalué à 1.
[^] # Re: fichier ou mémoire partagée
Posté par yellowiscool . Évalué à 6.
Envoyé depuis mon lapin.
[^] # Re: fichier ou mémoire partagée
Posté par benthebest . Évalué à -1.
Concretement, voila ce que je fais actuellement dans mon script PHP:
exec ("java -jar /var/www/executable.jar \"$arg1\" \"$arg2\"", $res, $return_var);
Et j'ai le resultat dans la variable $res.
Pouvez-vous me donner l'equivalent avec le "tube nomme" ?
Merci
[^] # Re: fichier ou mémoire partagée
Posté par YannPeniguel . Évalué à 10.
Pour chaque personne qui me plussoie, je frappe un fan de Justin Bieber.
[^] # Re: fichier ou mémoire partagée
Posté par pasBill pasGates . Évalué à 3.
Typiquement : Tu commences a lire, et pendant que tu lis l'autre cote modifie --> boum
Alors qu'avec le fichier, tu lock le fichier et c'est bon.
[^] # Re: fichier ou mémoire partagée
Posté par YannPeniguel . Évalué à 5.
Pour chaque personne qui me plussoie, je frappe un fan de Justin Bieber.
[^] # Re: fichier ou mémoire partagée
Posté par pasBill pasGates . Évalué à 2.
[^] # Re: fichier ou mémoire partagée
Posté par YannPeniguel . Évalué à 2.
Pour contrer ce problème, la solution proposée par yellowiscool permet d'utiliser un segment de ram comme si c'était un fichier. C'est surement le plus simple pour son utilisation, puisqu'il souhaite passer des caractères.
Pour chaque personne qui me plussoie, je frappe un fan de Justin Bieber.
[^] # Re: fichier ou mémoire partagée
Posté par benoar . Évalué à 3.
Pas forcément : le cache disque sera peut-être juste rempli le temps de passer les données d'un appli à l'autre, et le fichier ne sera peut-être jamais vraiment écrit sur le disque.
[^] # Re: fichier ou mémoire partagée
Posté par YannPeniguel . Évalué à 3.
Après, il est possible que la probabilité qu'il y ai passage par le disque soit faible, mais c'est un pari dont on peut se passer.
Pour chaque personne qui me plussoie, je frappe un fan de Justin Bieber.
[^] # Re: fichier ou mémoire partagée
Posté par gaaaaaAab . Évalué à 2.
tant que ça swap pas
[^] # Re: fichier ou mémoire partagée
Posté par YannPeniguel . Évalué à 3.
Bon, je refais.
Deux cas: tu passes par un segment de ram partagé ou tube nommé, ça passera par la ram sauf si elle est pleine, auquel cas ça swap (disque dur).
Ou tu passe par un fichier, dans ce cas ça passera par le disque (modulo les systèmes de caches).
La première méthode sera plus rapide que la première, sauf en cas de swap, auquel cas elle sera aussi lente que la seconde, mais pas plus.
Donc, je ne vois pas l'avantage de la seconde méthode.
Pour chaque personne qui me plussoie, je frappe un fan de Justin Bieber.
[^] # Re: fichier ou mémoire partagée
Posté par gaaaaaAab . Évalué à 2.
je ne réagissais qu'à la phrase qui, en elle même, me paraissait incorrecte, mais sur le fond, je suis d'accord avec ton analyse.
# Des suites
Posté par benthebest . Évalué à 1.
Finalement, 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 ma fonction exec me plante !
voici ma commande dans mon script PHP:
Code :
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 ça 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é)
Any idea?
[^] # Re: Des suites
Posté par benthebest . Évalué à 1.
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 :
yum install java-1.6.0-openjdk
Et effectivement ça m'avait bien mis à jour et j'ai pu faire marcher mon exécutable.
Or il me semble que le openjdk n'est pas exactement le même que le jre fournit par sun
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
[^] # Re: Des suites
Posté par YannPeniguel . Évalué à 2.
Le seul cas problématique est celui où tu es en 1.4?
Pour chaque personne qui me plussoie, je frappe un fan de Justin Bieber.
# précisions
Posté par benthebest . Évalué à 1.
ça marche chez moi en local avec le jdk de sun 1.6 mais sur mon serveur opendjdk 1.6 ça bug des fois...
[^] # Re: précisions
Posté par YannPeniguel . Évalué à 2.
Pour chaque personne qui me plussoie, je frappe un fan de Justin Bieber.
[^] # Re: précisions
Posté par benthebest . Évalué à 0.
C'était du au fait que dans mon applic java , y a un set time max au dela du quel si il ne trouve pas le calcul, il doit arreter...
J'ai augmenter ce set time limit et ca marche!
(mon serveur est plus lent que mon PC...)
pfiou tout ca pr ca!!!
Encore merci a vous :D
[^] # Re: précisions
Posté par benthebest . Évalué à 2.
C'était du au fait que dans mon applic java , y a un set time max au dela du quel si il ne trouve pas le calcul, il doit arreter...
J'ai augmenter ce set time limit et ca marche!
(mon serveur est plus lent que mon PC...)
pfiou tout ca pr ca!!!
Encore merci a vous :D
[^] # Re: précisions
Posté par YannPeniguel . Évalué à 2.
Pour chaque personne qui me plussoie, je frappe un fan de Justin Bieber.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.