Problème avec exec() PHP (pour Scilab)
Résolu
Nono_igo
-
todisoamichel -
todisoamichel -
Bonjour,
Pour mon site, j'utilise la fonction PHP exec() pour exécuter mes scripts Scilab.
Mon problème, c'est que sur 2 de mes scripts qui fonctionnent parfaitement sur la console Scilab, un fonctionne avec PHP et pas l'autre !
En détail avec 2 petits scripts :
Cela fonctionne :
Script Scilab (test.sce) :
clear;
m=[1 2 3; 3 4 5];
disp(m);
Code PHP :
Mais cela ne fonctionne pas :
Script Scilab (test2.sce) :
clear;
if (1 < 2)
disp("si tu vois ça, ça marche !");
else
disp ("si tu vois ça, ça marche, mais plus les mathématiques !");
Code PHP :
Alors j'ai travaillé un peu la question, et déjà les structures conditionnelles if/else ainsi que les chaînes de caractères font buguer la commande... Comment passer outre ce problème et exécuter avec PHP n'importe quel script qui fonctionne sous Scilab ??? Quelqu'un a une idée ?
Cordialement,
Nono
Pour mon site, j'utilise la fonction PHP exec() pour exécuter mes scripts Scilab.
Mon problème, c'est que sur 2 de mes scripts qui fonctionnent parfaitement sur la console Scilab, un fonctionne avec PHP et pas l'autre !
En détail avec 2 petits scripts :
Cela fonctionne :
Script Scilab (test.sce) :
clear;
m=[1 2 3; 3 4 5];
disp(m);
Code PHP :
$path = '..\scilab-5.3.3\bin\\'; $path_script = 'test.sce'; $command = $path.'scilex -nwni -nb -f '.$path_script; exec($command, $output); echo '<pre>'; print_r ($output); echo '</pre>';
Mais cela ne fonctionne pas :
Script Scilab (test2.sce) :
clear;
if (1 < 2)
disp("si tu vois ça, ça marche !");
else
disp ("si tu vois ça, ça marche, mais plus les mathématiques !");
Code PHP :
$path = '..\scilab-5.3.3\bin\\'; $path_script = 'test2.sce'; $command = $path.'scilex -nwni -nb -f '.$path_script; exec($command, $output); echo '<pre>'; print_r ($output); echo '</pre>';
Alors j'ai travaillé un peu la question, et déjà les structures conditionnelles if/else ainsi que les chaînes de caractères font buguer la commande... Comment passer outre ce problème et exécuter avec PHP n'importe quel script qui fonctionne sous Scilab ??? Quelqu'un a une idée ?
Cordialement,
Nono
A voir également:
- Problème avec exec() PHP (pour Scilab)
- Scilab - Télécharger - Édition & Programmation
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Retour à la ligne php ✓ - Forum PHP
- Retour a la ligne avec Echo comment faire ? - Forum Webmastering
2 réponses
Bonjour, regarde cette exemple (Listing2) -> https://www.ibm.com/developerworks/opensource/library/os-php-scilab/index.html?ca=drs-
Alors j'ai re-vérifié sous DOS l'exécution de mes scripts (.sce) et cette fois, même ceux avec des chaînes de caractères ou des conditions if/else fonctionnent... Donc cela vient bien du PHP et de la façon dont sont lu ces caractères/mots clés. Au-moins, j'ai une légère idée de où chercher...
Pour info, voici mes commande DOS :
MyRepertory>Scilex -nwni -nb -f test2.sce
Pour info, voici mes commande DOS :
MyRepertory>Scilex -nwni -nb -f test2.sce
Alors, il se trouve que ça fonctionne finalement ! Lorsque j'intègre le "exit;" directement dans le script (.sce)... J'ai l'impression qu'on ne peut pas fait faire :
Et c'est pour ça que Scilab tournait sans fin !
Que ce soit avec "exit;" ou l'ajout de n'importe quel autre morceau de code Scilab. Sinon, il faut mettre seulement du code Scilab à la place et l'option -e en remplacement de -f.
Donc pour rendre justice : l'erreur venait du fait que le développeur (en l'occurrence moi), n'avait juste pas mis de "exit;" dans les qq scripts de tester avec des chaînes de caractères ou des conditions ! Pas bien !
Alors une dernière question : Et si on veut vraiment pouvoir faire qqch du style :
Une des solutions serait de pouvoir extraire sous forme de chaîne de caractères le code contenu dans les fichiers .sce et de le placer dans une variable PHP ou alors une option -magic pour faire ça ! ^^
Je vais chercher ça de mon côté.
exec('Scilex -nwni -nb -f script.sce exit;', $output);
Et c'est pour ça que Scilab tournait sans fin !
Que ce soit avec "exit;" ou l'ajout de n'importe quel autre morceau de code Scilab. Sinon, il faut mettre seulement du code Scilab à la place et l'option -e en remplacement de -f.
Donc pour rendre justice : l'erreur venait du fait que le développeur (en l'occurrence moi), n'avait juste pas mis de "exit;" dans les qq scripts de tester avec des chaînes de caractères ou des conditions ! Pas bien !
Alors une dernière question : Et si on veut vraiment pouvoir faire qqch du style :
exec('Scilex -nwni -nb -f script1.sce clear; script2.sce exit;', $output);
Une des solutions serait de pouvoir extraire sous forme de chaîne de caractères le code contenu dans les fichiers .sce et de le placer dans une variable PHP ou alors une option -magic pour faire ça ! ^^
Je vais chercher ça de mon côté.
C'est super, j'ai trouvé comment partir à l'aventure :
Avec cette méthode et l'option -e, je pense qu'on peut faire pas mal de chose avec PHP et Scilab combiné. Si ça peux donner des idées à certains, j'aurais pas posté ça inutilement ! ^^
$monfichier = fopen('test.sce', 'r'); echo('Voici ce que contient mon code : <br>'); while($ligne = fgets($monfichier)){ print_r($ligne); echo "<br />"; } fclose($monfichier);
Avec cette méthode et l'option -e, je pense qu'on peut faire pas mal de chose avec PHP et Scilab combiné. Si ça peux donner des idées à certains, j'aurais pas posté ça inutilement ! ^^
bonjour!
merci pour le tuyau. j'ai toutefois une question: est-ce que vous savez pourquoi scilab-5.4.0 na veut plus redémarrez et m'affiche: "scilab ne peut pas créer la classe principale java scilab( la classe Scilab est impossible a trouver.vérifiez si les paquets scilab et thirdparty sont accessibles)? et comment redémarrer scilab?
merci beaucoup
merci pour le tuyau. j'ai toutefois une question: est-ce que vous savez pourquoi scilab-5.4.0 na veut plus redémarrez et m'affiche: "scilab ne peut pas créer la classe principale java scilab( la classe Scilab est impossible a trouver.vérifiez si les paquets scilab et thirdparty sont accessibles)? et comment redémarrer scilab?
merci beaucoup
Merci pour l'exemple, mais je l'avais déjà trouvé et le problème, c'est qu'il ne montre pas comment on utilise directement un fichier/script Scilab (.sce) avec PHP mais seulement comment faire exécuter une commande d'un script que l'on entre dans une variable ($code pour être précis).
Remarque, je commence à me dire que je passerai par cette méthode... Mais si je pouvais utiliser directement des fichiers .sce, ça serait plus "propre". Et cela est possible puisque j'y arrive avec mon 1er exemple d'au-dessus !
Merci tout de même pour ton aide.
Plus déroutant encore : j'ai testé le code de l'exemple que tu as donné, et même avec cette méthode, cela ne fonctionne pas avec des caractères. J'ai juste voulu tester ceci :
Et même problème : Scilab est lancé dans les processus en fond sur mon ordi mais tourne en boucle sans réussir à exécuter le script (pourtant pas compliqué ! ^^)... Pourtant, le code de l'exemple prend bien en compte le remplacement de certains caractères spécifiques (tels que le ")... Je suis en train de me dire que ce que je veux faire n'est pas possible !
il existe un outil apparemment pour tuer le processus.