Problème avec exec() PHP (pour Scilab)

Résolu/Fermé
Nono_igo - Modifié par Nono_igo le 30/01/2012 à 10:24
 todisoamichel - 24 janv. 2013 à 09:40
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 :
$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:

2 réponses

pitxu Messages postés 689 Date d'inscription vendredi 7 septembre 2007 Statut Membre Dernière intervention 25 mars 2015 94
30 janv. 2012 à 11:29
0
Nono_igo Messages postés 63 Date d'inscription mardi 3 janvier 2012 Statut Membre Dernière intervention 1 octobre 2016 3
30 janv. 2012 à 11:56
Bonjour pitxu,

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.
0
pitxu Messages postés 689 Date d'inscription vendredi 7 septembre 2007 Statut Membre Dernière intervention 25 mars 2015 94
30 janv. 2012 à 12:31
c'est vrai que c'est étrange, je ne suis pas un pro en scilab mais faut pas fermer la condition par un end; ?
0
Nono_igo Messages postés 63 Date d'inscription mardi 3 janvier 2012 Statut Membre Dernière intervention 1 octobre 2016 3
30 janv. 2012 à 12:43
Alors j'avoue que moi non plus, je ne suis qu'un novice en Scilab, mais oui, il faut mettre un "end;" normalement pour finir une structure conditionnelle (mais qu'il y soit ou pas, cela fonctionne sous la console Scilab mais pas sous PHP...).

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 :
clear;
disp("Hello World");

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 !
0
pitxu Messages postés 689 Date d'inscription vendredi 7 septembre 2007 Statut Membre Dernière intervention 25 mars 2015 94
30 janv. 2012 à 13:02
en effet, peut-être faut-il passer par du PERL pour "killer" le processus à la fin de son exécution pour lancer un nouveau processus scilab.
0
pitxu Messages postés 689 Date d'inscription vendredi 7 septembre 2007 Statut Membre Dernière intervention 25 mars 2015 94
30 janv. 2012 à 13:14
http://fossies.org/unix/misc/scilab-5.3.3-src.tar.gz:a/scilab-5.3.3/modules/windows_tools/src/c/scilab_windows/killScilabProcess.h

il existe un outil apparemment pour tuer le processus.
0
Nono_igo Messages postés 63 Date d'inscription mardi 3 janvier 2012 Statut Membre Dernière intervention 1 octobre 2016 3
31 janv. 2012 à 14:59
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
0
Nono_igo Messages postés 63 Date d'inscription mardi 3 janvier 2012 Statut Membre Dernière intervention 1 octobre 2016 3
31 janv. 2012 à 15:37
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 :
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é.
0
Nono_igo Messages postés 63 Date d'inscription mardi 3 janvier 2012 Statut Membre Dernière intervention 1 octobre 2016 3
31 janv. 2012 à 17:16
C'est super, j'ai trouvé comment partir à l'aventure :
$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 ! ^^
0
todisoamichel
24 janv. 2013 à 09:40
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
0