Php et Ocaml - PHP - Programmation
Marsh Posté le 20-03-2005 à 13:31:22
Je ne vois pas l'interet de compiler ton prog ocaml a la volee. Tu compiles une bonne fois pour toutes et tu appelles l'exe genere via PHP avec les parametres qui vont bien. C'est pas plus complique que ca.
Marsh Posté le 21-03-2005 à 19:08:59
mais je ne sais pas comment envoyé des paramétres a un programme caml d"ja compilé. Peux-tu m'expliqué stp?
Sinon, j'ai quand même du mal à récupéré le retour avec php
Marsh Posté le 21-03-2005 à 22:40:46
Je réussi a ratrappé le retour, mais comment peut-on envoyé des paramètres en entrée d'un fichier déja compilé stp? (ca m'éviterais pas mal de ligne de code ...
Marsh Posté le 21-03-2005 à 22:57:03
goodspirit a écrit : Je réussi a ratrappé le retour, mais comment peut-on envoyé des paramètres en entrée d'un fichier déja compilé stp? (ca m'éviterais pas mal de ligne de code ... |
Soit tu passes tes paramètres en arguments quand tu appelles ton programme , soit tu utilises des sockets
Marsh Posté le 21-03-2005 à 23:42:37
oui, ca j'avais bien compris mais ma question consistait surtout a savoir comment les arguments sont-ils récupérer par le programme Caml (comment faire mon programme caml et que passer en argument pour qu'il l'utilise?) (Désolé, je suis moins bon en Caml qu'en php et j'ai conscience que ce post traite maintenant plus de Caml que de php)
Marsh Posté le 22-03-2005 à 00:18:10
goodspirit a écrit : oui, ca j'avais bien compris mais ma question consistait surtout a savoir comment les arguments sont-ils récupérer par le programme Caml (comment faire mon programme caml et que passer en argument pour qu'il l'utilise?) (Désolé, je suis moins bon en Caml qu'en php et j'ai conscience que ce post traite maintenant plus de Caml que de php) |
(ça tombe très bien, je ne connais rien du tout au php )
Les arguments sont dans Sys.argv. C'est une array (de string), donc tu peux avoir le nombre d'arguments avec
Code :
|
Pour récupérer le premier argument:
Code :
|
(c'est la même chose que Array.get Sys.argv 1)
Tu peux bien sûr faire un open Array;; au début si tu ne veux pas te taper le "Array.bidule" et utiliser directement "bidule"
Je ne sais pas trop quel est ton niveau, donc un petit exemple bien détaillé:
Code :
|
Bien sûr, tu n'es pas obligé d'utiliser une demi douzaine d'identifiants pour rien, tu peux vérifier que les arguments passés à "traiter" sont corrects (int_of_string lève une exception si ce n'est pas le cas, tu peux l'attraper avec try...with), tu peux passer toutes tes variables en un seul argument (en utilisant des guillemets) puis parser à coup de Scanf.sscanf , etc...
Et là normalement:
$ ./le_nom_du_programme 12 15 |
Si veux apprendre un peu l'ocaml, tu peux en trouver la référence sur le site du langage, et parcourir ce bouquin.
Marsh Posté le 23-03-2005 à 00:57:06
Merci beaucoup, ta réponse est très précise et claire, c'est parfait. Je vais testé ca dès que possible et te dire quoi. Merci...
Marsh Posté le 23-03-2005 à 01:09:26
ok, ca marche, j'arrive a récupéré mes arguments.
Cependant, j'ai pas compris ce passage de ta réponse : existerait-il une méthode simple pour récupéré plusieurs arguments (j'ai 48 entiers a passer en arguments mais je peux utiliser Sys.argv.(1);; ... Sys.argv.(48);; puisque l'ordre et rigoureux et je n'ai à les utiliser qu'une seule fois dans le programme.
Pillow a écrit : (ça tombe très bien, je ne connais rien du tout au php ) |
En tout cas, merci beaucoup, ca me simplifie pas mal le travail...
Marsh Posté le 23-03-2005 à 03:03:47
goodspirit a écrit : ok, ca marche, j'arrive a récupéré mes arguments. |
Ce que je disais, c'est que tu pourrais par exemple appeller ton programme comme ça :
Code :
|
Et ensuite récupérer les données comme ça:
Code :
|
L'intérêt? Il n'y en a pas. Je voulais juste montrer qu'il y a d'autres possibilités
Je voulais aussi souligner que si par malheur un de tes arguments n'est pas un entier, l'application s'arrêtera. Dans ton cas il y a probablement très peu de chances que ça se produise et ce ne serait certainement pas vraiment grave, mais si on voulait être complet on traiterait le cas. Comme ça:
Code :
|
L'underscore (_) signifiant qu'on rattrape toutes les exceptions, mais je suppose que tu savais déjà ça. Bien sûr on peux faire tout ce qu'on veut quand on rattrape une exception, et on peut faire un traitement séparé pour chaque exception:
Code :
|
Bref, je crois que j'ai un peu digressé
J'imagine que tu sais déjà ça, mais au cas où : pour transformer tes 48 arguments en entiers, l'idéal serait de faire un tableau et une boucle:
Code :
|
Ensuite tu peux bien sûr utiliser les données à coup de donnees.(0), donnees.(1), etc.
A la rigueur si ton traitement est simple (par exemple, faire l'addition de tous les paramètres) tu peux te passer de cette étape.
Marsh Posté le 19-03-2005 à 19:21:53
Salut
Pour un projet de TIPe, je cherche a communiqué entre PHP et OCaml : je m'explique :
Je voudrais que l'utilisateur entre des entrées, que Caml résoud le problème et que php affiche le résultat sur une page html.
J'ai pensé a ce que le fichier php créé (ou modifie plus exactement) mon fichier test.ml, puis qu'il lance la complation grace a la commande exec(ocamlc -o test.ml ...). J'obtiendrais ainsi un fichier executable. Il me faut alors lire les informations qui sortent de ce ficier executable par php et les traitées... Je voulaus éssayé par exec aussi, mais je n'y arrive pas (cf sujet [php] 66467).
Existe t-il une manière plsu simlpe de communiqué entre php et OCaml ou quelqu'un peut-il m'aiguiller sur une alternative a ma tentative?
Merci d'avance ...