Lancement du programme Scilab via PHP

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 ;)

23 réponses

Résumé de la discussion

Problème rencontré lors du déploiement d'une interface web pour Scilab sous Linux via PHP, après migration depuis Windows, consiste à lancer Scilab avec un script Sci via exec et à obtenir une non-réponse graphique. Les messages d’erreur évoquent des soucis graphiques et d’environnement X11, notamment Could not initialize graphics, Could not initialize class sun.awt.X11GraphicsEnvironment et l’absence d’affichage DISPLAY dans le contexte serveur. Les échanges suggèrent d’essayer shell_exec, de vérifier l’accès et le contexte d’exécution du serveur web, puis d’examiner l’environnement DISPLAY ou l’installation Java/GUI de Scilab pour résoudre le problème. Finalement, plusieurs intervenants constatent des erreurs Java/TK et l’impossibilité de créer une fenêtre Scilab dans un serveur sans affichage, sans aboutir à une solution commune à ce stade.

Bobot (l’IA à votre service)
  1. je travaille avec la version 5.2.2
    j'ai bien mis les arguments de lancement, c'est bizarre...
    0
    1. moi je suis sur la version 5.1.1 essaye d'installer cette version
      mais je ne pense pas ke cé ca le pb ...
      0
  2. tu travail avec kel version de scilab ??
    tas bien mis le -nwni -nouserstartup ??
    0
    1. !--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)

      ça ne marche pas chez moi, j'ai toujours la même erreur :/
      0
      1. 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+
        0
        1. 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|
          0
          1. ok merci à toi,
            je te tiens au courant si je trouve la solution

            bonne chance à nous :)
            A+
            0
        2. help plz
          0
          1. 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+
            0
          2. moi ça a pas résolu mon problème, mais essaies :

            $set_display = "set env DISPLAY=:0.0 && X : 0.0" ;
            exec ($set_display) ;
            system('DISPLAY=:0.0 /home/tout/Téléchargements/scilab-5.1.1/bin/scilab -f ./simulation/simulation_morphologique/test.sce') ;

            redis moi le résultat
            0
          3. 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
            0
          4. 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) ;
            0
          5. et tu exécute de cette manière :

            system('DISPLAY=:0.0 /home/tout/Téléchargements/scilab-5.1.1/bin/scilab -f ./simulation/simulation_morphologique/test.sce') ;
            0
        3. 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
          0
          1. j'ai toujours mon problème ...
            0
            1. 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 ?
              0
              1. ç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
                0
                1. 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') ;
                  0
                  1. 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
                    0
                    1. 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 ... ^^
                      0
                      1. 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"
                        0
                        1. T'as bien vérifié le contenu du exec en faisant un echo ?
                          0
                          1. 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
                            0
                            1. 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 ^^
                              0
                              1. 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...
                                0
                                1. En allant voir dans le man d'exec, je suis tombé sur ca :

                                  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
                                  0
                                  1. 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 :(
                                    0
                                    • 1
                                    • 2