Lancement du programme Scilab via PHP
V4lkYr
Messages postés
38
Date d'inscription
Statut
Membre
Dernière intervention
-
atout1 Messages postés 216 Date d'inscription Statut Membre Dernière intervention -
atout1 Messages postés 216 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
j'essaie de créer une interface web pour Scilab (logiciel de calcul opensource).
J'ai commencé à coder sous XP (à la demande de mes clients), qui m'ont demandé de passer sous Linux peu de temps après. Du coup j'ai installé Scilab sous Linux, et Xampp.
Dans mon code, j'exécutais un script Scilab grâce à la fonction PHP "exec", suivi d'une ligne qui lançait Scilab avec en argument le script à exécuter.
Sauf que, passé sous Linux, il ne veut plus rien entendre ^^"
J'ai essayé les commandes de base, du style ls ou pwd ça marche nickel, mais après pour celle qui m'intéresse rien ne va plus. Mon code de lancement :
exec ('/root/scilab-5.2.2/bin/scilab -f ./scripts/script'.$id.'/'.$this->scripts[$id]->getName().'.sci') ;
Scilab est bien installé dans root, mon script PHP qui appelle le programme est dans un dossier "poject" contenant "scripts" contenant lui même tous mes scripts (dans des dossiers script concaténés avec leur identifiants), et le script en lui-même est dans ce dossier.
J'ai bien sûr vérifié les droits d'accès à tous les fichiers.
Si quelqu'un a ne serait-ce qu'un semblant d'aide à me donner, je suis preneur ;)
j'essaie de créer une interface web pour Scilab (logiciel de calcul opensource).
J'ai commencé à coder sous XP (à la demande de mes clients), qui m'ont demandé de passer sous Linux peu de temps après. Du coup j'ai installé Scilab sous Linux, et Xampp.
Dans mon code, j'exécutais un script Scilab grâce à la fonction PHP "exec", suivi d'une ligne qui lançait Scilab avec en argument le script à exécuter.
Sauf que, passé sous Linux, il ne veut plus rien entendre ^^"
J'ai essayé les commandes de base, du style ls ou pwd ça marche nickel, mais après pour celle qui m'intéresse rien ne va plus. Mon code de lancement :
exec ('/root/scilab-5.2.2/bin/scilab -f ./scripts/script'.$id.'/'.$this->scripts[$id]->getName().'.sci') ;
Scilab est bien installé dans root, mon script PHP qui appelle le programme est dans un dossier "poject" contenant "scripts" contenant lui même tous mes scripts (dans des dossiers script concaténés avec leur identifiants), et le script en lui-même est dans ce dossier.
J'ai bien sûr vérifié les droits d'accès à tous les fichiers.
Si quelqu'un a ne serait-ce qu'un semblant d'aide à me donner, je suis preneur ;)
A voir également:
- Tclerror: no display name and no $display environment variable
- Scilab - Télécharger - Édition & Programmation
- Programme demarrage windows - Guide
- Easy php - Télécharger - Divers Web & Internet
- Lancer un programme au démarrage windows 10 - Guide
- Message programmé iphone - Guide
23 réponses
oui ça marche bien, il me génère mes fichiers de sortie et tout se passe bien
pendant que ça tourne, j'ai fait un petit "ps" pour savoir si Scilab se lance, et il ne se lance pas
j'ai aussi essayé en mettant le chemin vers mon script en dur, aucun effet
pendant que ça tourne, j'ai fait un petit "ps" pour savoir si Scilab se lance, et il ne se lance pas
j'ai aussi essayé en mettant le chemin vers mon script en dur, aucun effet
Je n'en suis pas sûr, c'est juste une idée :
Quand tu fais /root/scilab-5.2.2/bin/scilab, sous linux ok, ca lance le programme depuis la racine du pc
Mais quand tu veux le lancer depuis php, le / correspond à la racine du serveur php, pas à celle du pc ...
Quand tu fais /root/scilab-5.2.2/bin/scilab, sous linux ok, ca lance le programme depuis la racine du pc
Mais quand tu veux le lancer depuis php, le / correspond à la racine du serveur php, pas à celle du pc ...
dommage j'aurai bien aimé que soit ça ^^
j'ai supposé que c'était ça, alors j'ai balancé le chemin en "absolu" depuis la racine serveur, ou en relatif par rapport à mon script et ça ne marche toujours pas :(
j'ai supposé que c'était ça, alors j'ai balancé le chemin en "absolu" depuis la racine serveur, ou en relatif par rapport à mon script et ça ne marche toujours pas :(
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
En allant voir dans le man d'exec, je suis tombé sur ca :
Faut peut être aller désactiver le safe mode dans le php.ini ou déplacer le bin de scilab
Lorsque le safe mode est activé, vous pouvez uniquement exécuter des programmes qui se situent dans le dossier défini par safe_mode_exec_dir. Pour des raisons pratiques, il n'est actuellement pas permis d''avoir le composant .. dans le chemin de l'exécutable.
Faut peut être aller désactiver le safe mode dans le php.ini ou déplacer le bin de scilab
le safe mode est désactivé, j'avais vérifié
mais j'ai trouvé d'autres modes
safe_mode Off Off
safe_mode_exec_dir no value no value
safe_mode_gid On On
safe_mode_include_dir no value no value
y'a peut etre quelque chose que j'ai pas spécifié, mon Linux est sur une machine virtuelle à l'intérieur de mon XP, mais normalement ça pose pas de problème...
mais j'ai trouvé d'autres modes
safe_mode Off Off
safe_mode_exec_dir no value no value
safe_mode_gid On On
safe_mode_include_dir no value no value
y'a peut etre quelque chose que j'ai pas spécifié, mon Linux est sur une machine virtuelle à l'intérieur de mon XP, mais normalement ça pose pas de problème...
Ben je vois pas là :O
Je sais pas si ca change grand chose, mais y'a aussi la fonction php shell_exec()
il doit bien ya voir une différence entre shell_exec et exec, même si je ne la connais pas ^^
Je sais pas si ca change grand chose, mais y'a aussi la fonction php shell_exec()
il doit bien ya voir une différence entre shell_exec et exec, même si je ne la connais pas ^^
la différence c'est que shell_exec retourne le résultat de la commande sous forme de chaine, exec ne retourne rien sauf qi on met un argument (genre $out) après la commande, et retourne ça sous forme de tableau.
j'avoue que je commence un peu à péter un cable XD
j'avoue que je commence un peu à péter un cable XD
le problème c'est que mon php attend la terminaison du programme pour récupérer les graphiques de retour, et du coup, ma page attend la fin sans fin (^^)
je teste en trafiquant et en générant avant les graphiques de retour et ça me donne quelque chose de pire ^^" :
!--error 999
Erreur Tcl: Erreur pendant l'initialisation de TK (Tk_Init): couldn't connect to display ":0.0"
je teste en trafiquant et en générant avant les graphiques de retour et ça me donne quelque chose de pire ^^" :
!--error 999
Erreur Tcl: Erreur pendant l'initialisation de TK (Tk_Init): couldn't connect to display ":0.0"
et du coup, ma page attend la fin sans fin
Ouais mais, si tu fais le echo avant, ca sera quand même affiché non ?
Ca fait longtps que j'ai plus fait de php, mais c'est ce qu'il me semble ^^
Sinon, tu prux écrire dans une sorte de fichier de log ... ^^
dans mon error.log j'ai ça :
No protocol specified
Could not initialize graphics Environment
Scilab Graphical option may not be working correctly.
An error occurred: Could not initialize class sun.awt.X11GraphicsEnvironment
Cannot create Scilab Window.
Check if the thirdparties are available (Flexdock, JOGL...).
See SCI/etc/classpath.xml for default paths.
Could not find class: Could not initialize class sun.awt.X11GraphicsEnvironment
No protocol specified
Could not initialize graphics Environment
Scilab Graphical option may not be working correctly.
An error occurred: Could not initialize class sun.awt.X11GraphicsEnvironment
Cannot create Scilab Window.
Check if the thirdparties are available (Flexdock, JOGL...).
See SCI/etc/classpath.xml for default paths.
Could not find class: Could not initialize class sun.awt.X11GraphicsEnvironment
Je vois ^^
Essayes en ajoutant les paramètres -nwni et -nb à l'appel de scilab :
exec ('/root/scilab-5.2.2/bin/scilab -nwni -nb -f ./scripts/script'.$id.'/'.$this->scripts[$id]->getName().'.sci') ;
Essayes en ajoutant les paramètres -nwni et -nb à l'appel de scilab :
exec ('/root/scilab-5.2.2/bin/scilab -nwni -nb -f ./scripts/script'.$id.'/'.$this->scripts[$id]->getName().'.sci') ;
ça a l'air de marcher car le processus scilab est maintenant visible avec "ps". Par contre, il me met une erreur :
usecanvas(%F) ;
!--error 999
Le module 'GUI' de Scilab n'est pas installé.
at line 178 of exec file called by :
exec('SCI/etc/scilab.start',-1);;exec('./scripts/script0/script0.sci',-1.awt.9
mais apparamment c'est dû à l'installation de scilab... je vais regarder à quoi ça correspond
usecanvas(%F) ;
!--error 999
Le module 'GUI' de Scilab n'est pas installé.
at line 178 of exec file called by :
exec('SCI/etc/scilab.start',-1);;exec('./scripts/script0/script0.sci',-1.awt.9
mais apparamment c'est dû à l'installation de scilab... je vais regarder à quoi ça correspond
toujours le même problème, j'ai essayé avec toutes les options de lancement, sans ça marche pas :'(
on dirait qu'il me manque un module de scilab pour afficher les graphiques ... quelqu'un a une idée ?
on dirait qu'il me manque un module de scilab pour afficher les graphiques ... quelqu'un a une idée ?
Initialisation :
Chargement de l'environnement de travail
!--error 999
Le module Scilab Graphics n'est pas installé.
at line 9 of function createOrSetFigure called by :
at line 14 of function figure called by :
figure(1);
at line 179 of exec file called by :
exec('SCI/etc/scilab.start',-1);;exec('./scripts/script0/script0.sci',-1)
mon module "graphics" est bien installé, j'ai meme réinstallé scilab-5.2.2 et je trouve pas comment résoudre ça :/
besoin d'aide
Chargement de l'environnement de travail
!--error 999
Le module Scilab Graphics n'est pas installé.
at line 9 of function createOrSetFigure called by :
at line 14 of function figure called by :
figure(1);
at line 179 of exec file called by :
exec('SCI/etc/scilab.start',-1);;exec('./scripts/script0/script0.sci',-1)
mon module "graphics" est bien installé, j'ai meme réinstallé scilab-5.2.2 et je trouve pas comment résoudre ça :/
besoin d'aide
je fais la même chose ke toi, et j'ai pas réussi à trouver une solution. j'ai essayé sur plusieurs Forum mais tjs pas de solution :S
en fait moi aussi je développe une interface via php et je veut lancer scilab via php
kan je fais ça :
system('/home/tout/Téléchargements/scilab-5.1.1/bin/scilab -f ./simulation/simulation_morphologique/test.sce') ;
il m'affiche l'erreur suivant :
Error occurred during initialization of VM java.lang.UnsatisfiedLinkError: no zip in java.library.path at java.lang.ClassLoader.loadLibrary(Unknown Source) at java.lang.Runtime.loadLibrary0(Unknown Source) at java.lang.System.loadLibrary(Unknown Source) at java.lang.System.initializeSystemClass(Unknown Source) !--error 999 Tcl Error: Error during the TK initialization (Tk_Init): no display name and no $DISPLAY environment variable
si tu trouve klk chose merci de le mettre ici et moi pareil
bonne chance
A+
en fait moi aussi je développe une interface via php et je veut lancer scilab via php
kan je fais ça :
system('/home/tout/Téléchargements/scilab-5.1.1/bin/scilab -f ./simulation/simulation_morphologique/test.sce') ;
il m'affiche l'erreur suivant :
Error occurred during initialization of VM java.lang.UnsatisfiedLinkError: no zip in java.library.path at java.lang.ClassLoader.loadLibrary(Unknown Source) at java.lang.Runtime.loadLibrary0(Unknown Source) at java.lang.System.loadLibrary(Unknown Source) at java.lang.System.initializeSystemClass(Unknown Source) !--error 999 Tcl Error: Error during the TK initialization (Tk_Init): no display name and no $DISPLAY environment variable
si tu trouve klk chose merci de le mettre ici et moi pareil
bonne chance
A+
voilà le résultat :
Error occurred during initialization of VM java.lang.UnsatisfiedLinkError: no zip in java.library.path at java.lang.ClassLoader.loadLibrary(Unknown Source) at java.lang.Runtime.loadLibrary0(Unknown Source) at java.lang.System.loadLibrary(Unknown Source) at java.lang.System.initializeSystemClass(Unknown Source) !--error 999 Tcl Error: Error during the TK initialization (Tk_Init): couldn't connect to display ":0.0"
tu peux me dire tu veux faire koi ?? et cé koi set env DISPLAY=:0.0 && X : 0.0 ??
Merci
Error occurred during initialization of VM java.lang.UnsatisfiedLinkError: no zip in java.library.path at java.lang.ClassLoader.loadLibrary(Unknown Source) at java.lang.Runtime.loadLibrary0(Unknown Source) at java.lang.System.loadLibrary(Unknown Source) at java.lang.System.initializeSystemClass(Unknown Source) !--error 999 Tcl Error: Error during the TK initialization (Tk_Init): couldn't connect to display ":0.0"
tu peux me dire tu veux faire koi ?? et cé koi set env DISPLAY=:0.0 && X : 0.0 ??
Merci
ben t'es sous linux ?
parce que moi mon interface marchait nickel sur windows, mais pour des raisons techniques j'ai dû passer sous linux (enfin machine virtuelle OpenSUSE)
j'ai entendu dire qu'Apache n'avait pas les droits nécessaires pour accéder au display (affichage graphique) de l'utilisateur courant, et il semblerait que scilab en ait besoin même si on veut lancer un script scilab en mode batch.
du coup dans la console il faut taper xhost +local:apache@
et dans le script php il faut rajouter ces lignes avant d'exécuter le script scilab pour pouvoir accéder au display :
$set_display = "set env DISPLAY=:0.0 && X : 0.0" ;
exec ($set_display) ;
parce que moi mon interface marchait nickel sur windows, mais pour des raisons techniques j'ai dû passer sous linux (enfin machine virtuelle OpenSUSE)
j'ai entendu dire qu'Apache n'avait pas les droits nécessaires pour accéder au display (affichage graphique) de l'utilisateur courant, et il semblerait que scilab en ait besoin même si on veut lancer un script scilab en mode batch.
du coup dans la console il faut taper xhost +local:apache@
et dans le script php il faut rajouter ces lignes avant d'exécuter le script scilab pour pouvoir accéder au display :
$set_display = "set env DISPLAY=:0.0 && X : 0.0" ;
exec ($set_display) ;
je peux pas t'aider j'en suis là moi aussi ça résoud pas mes problèmes :/
je t'envoie mes sources, cherche de ton coté ;)
http://bugzilla.scilab.org/show_bug.cgi?id=7145
http://forum.ubuntu-fr.org/viewtopic.php?id=174370 (à lire jusqu'au bout)
|I am posting this as I see quite a few people looking to create a web
based interface to their MP3 player (XMMS or really what ever you want
to call from the command line) on Linux. Alas, I am not the only one,
and I did not think of it first ( suppose I have to result to other get
rich quick schemes). And even if there were a direct downloadable
utility (as there is XMMS-Control) you, like me, probably want the bowl
of porage that is just right. Which means you want to make your own
because current versions of X, Y, or Z just don't do what you want.
Most of the hard work is at the linux command shell (ugh! - I heard
that! Drop and give me 20 command line scripts!)
login as root
ensure /dev/dsp has the proper access privileges
chmod a+rw /dev/dsp
add apache to the local list of users for the xserver.
xhost +local:apache@
You should see the following if apache is not added to the xserver.
Xlib: connection to ":0.0" refused by server
Xlib: No protocol specified
** CRITICAL **: Unable to open display
And I am sure that error is as clear to you as it was to me!
NOTE !!! only change the following for testing purposes so that you can
su to apache from root and test xmms !!!!
Temporarily change the line
apache:x:48:48:Apache:/var/www:/sbin/nologin
To
apache:x:48:48:Apache:/var/www:/bin/bash
so that you can test out apache access to the Xserver and XMMS.
su apache
xmms
!!! Play a file - Don't just read this actually play a file!!! The
reason is that if it fails xmms will likely give an error you can track
down like a greyhound chases that little bunny at the dog track!
(speaking of get rich quick schemes)
And for the grand finale!
If you can call xmms from the command line you can likely do the
following (unless you are running php in safe mode). Ensure that the
wav, mp3, or whatever you decide to test it with is accessible to
apache. I put the file into /var/www/html/icould.wav and chmod a+rw
icould.wav
<?php
echo ' Executing XMMS ';
// note you could use system too!
//echo system( '/usr/bin/xmms --play icould.wav', $retval );
exec ('/usr/bin/xmms --play icould.wav');
?>
At your browser ensure you hit shift+refresh(button) so your browser
doesn't give you a cahed the web page.
Brian J. Davis|
je t'envoie mes sources, cherche de ton coté ;)
http://bugzilla.scilab.org/show_bug.cgi?id=7145
http://forum.ubuntu-fr.org/viewtopic.php?id=174370 (à lire jusqu'au bout)
|I am posting this as I see quite a few people looking to create a web
based interface to their MP3 player (XMMS or really what ever you want
to call from the command line) on Linux. Alas, I am not the only one,
and I did not think of it first ( suppose I have to result to other get
rich quick schemes). And even if there were a direct downloadable
utility (as there is XMMS-Control) you, like me, probably want the bowl
of porage that is just right. Which means you want to make your own
because current versions of X, Y, or Z just don't do what you want.
Most of the hard work is at the linux command shell (ugh! - I heard
that! Drop and give me 20 command line scripts!)
login as root
ensure /dev/dsp has the proper access privileges
chmod a+rw /dev/dsp
add apache to the local list of users for the xserver.
xhost +local:apache@
You should see the following if apache is not added to the xserver.
Xlib: connection to ":0.0" refused by server
Xlib: No protocol specified
** CRITICAL **: Unable to open display
And I am sure that error is as clear to you as it was to me!
NOTE !!! only change the following for testing purposes so that you can
su to apache from root and test xmms !!!!
Temporarily change the line
apache:x:48:48:Apache:/var/www:/sbin/nologin
To
apache:x:48:48:Apache:/var/www:/bin/bash
so that you can test out apache access to the Xserver and XMMS.
su apache
xmms
!!! Play a file - Don't just read this actually play a file!!! The
reason is that if it fails xmms will likely give an error you can track
down like a greyhound chases that little bunny at the dog track!
(speaking of get rich quick schemes)
And for the grand finale!
If you can call xmms from the command line you can likely do the
following (unless you are running php in safe mode). Ensure that the
wav, mp3, or whatever you decide to test it with is accessible to
apache. I put the file into /var/www/html/icould.wav and chmod a+rw
icould.wav
<?php
echo ' Executing XMMS ';
// note you could use system too!
//echo system( '/usr/bin/xmms --play icould.wav', $retval );
exec ('/usr/bin/xmms --play icould.wav');
?>
At your browser ensure you hit shift+refresh(button) so your browser
doesn't give you a cahed the web page.
Brian J. Davis|
essaye ce code :
system('HOME=/data/www/grainVirtuel /usr/bin/scilab -nwni -nouserstartup -f /data/www/grainVirtuel/simulation/simulation_morphologique/M.sce') ;
HOME=/data/www/grainVirtuel : l'endroit où apache a le droit d'écriture
chez moi ça marche et il gère les fichier des sorties.
dis moi si ça marche ou pas
A+
system('HOME=/data/www/grainVirtuel /usr/bin/scilab -nwni -nouserstartup -f /data/www/grainVirtuel/simulation/simulation_morphologique/M.sce') ;
HOME=/data/www/grainVirtuel : l'endroit où apache a le droit d'écriture
chez moi ça marche et il gère les fichier des sorties.
dis moi si ça marche ou pas
A+