IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

php java communication


Sujet :

Java

  1. #1
    Membre habitué
    Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2007
    Messages : 439
    Points : 178
    Points
    178
    Par défaut php java communication
    Bonjour, j'aimerais pouvoir a partir d'une classe Java appeler un script PHP ( en fait un Web Service).
    J'ai trouve des sources mais ca ne fonctionne pas :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
       ScriptEngineManager mgr = new ScriptEngineManager();
     
            List<ScriptEngineFactory> factories = mgr.getEngineFactories();
            for(int i=0; i<factories.size(); i++){
            	System.out.println(factories.get(i));
            }        
        	ScriptEngine se =  mgr.getEngineByName("PhpScriptEngineFactory");
            se.eval ("<?php function hello ($who) {return 'Hello '.$who;}; ?>"); 
            System.out.println((((Invocable) se).invokeFunction ("hello", new Object[] {"world"})));
    Le script me renvoie en console :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    com.sun.script.javascript.RhinoScriptEngineFactory@c17164
    php.java.script.InteractivePhpScriptEngineFactory@13e205f
    php.java.script.PhpScriptEngineFactory@863399
    php.java.script.InvocablePhpScriptEngineFactory@16a55fa
    Exception in thread "main" java.lang.NullPointerException
    	at EvalScript.main(EvalScript.java:18)
    Je vois donc qu'il trouve des script factories mais quand j'en cree une avec PhpScriptEngineFactory, il me renvoie null.
    Pourquoi?
    Merci.

    sources:
    http://gpwiki.org/index.php/Java:Tutorials:Scripting

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        	ScriptEngine se =  mgr.getEngineByName("php");
    cf la doc de php java bridge.

    Tu confonds le nom de la classe Factory et le nom de l'engine derrière!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            for(int i=0; i<factories.size(); i++){
            	System.out.println(factories.get(i).getEngineName());
            }

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Oui, enfin, si c'est un Web Service, qu'on veut appeler, ça n'a rien à voir avec le scripting. Il faut appeler l'URL correspondante à ce qu'on veut.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre habitué
    Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2007
    Messages : 439
    Points : 178
    Points
    178
    Par défaut
    oui thelvin, c'est ce que je me suis dit.
    Enfin je veux être capable de résoudre le défi technique d'executer du PHP en Java.
    J'ai corrigé le code et j'arrive à l'erreur missing "php-cgi".
    http://php-java-bridge.sourceforge.n...stallation.php
    Je reprends ce soir chez moi.

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    php n'est probablement pas installé sur ta machine

  6. #6
    Membre habitué
    Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2007
    Messages : 439
    Points : 178
    Points
    178
    Par défaut
    Pourtant si je sais faire tourner
    Je vérifierai si j'ai bien mis dans le path le dossier de php et le dossier où est php-script.jar.


  7. #7
    Membre habitué
    Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2007
    Messages : 439
    Points : 178
    Points
    178
    Par défaut
    Je confirme que php est bien installe et present dans le path.

    comment expliquer l'erreur :

    PHP not found

    Merci

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    php-cgi (qui est une partie particulière de php) est bien installé?

  9. #9
    Membre habitué
    Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2007
    Messages : 439
    Points : 178
    Points
    178
    Par défaut
    Re,
    j'ai suivi la procedure a savoir :
    http://php.net/manual/fr/install.windows.apache1.php

    httpd.conf

    ajout de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ScriptAlias /php/ "C:\Documents and Settings\Owner\My Documents\php\"
    AddType application/x-httpd-php .php
    # Pour PHP 4
    Action application/x-httpd-php "/php/php.exe"
    # Pour PHP 5
    Action application/x-httpd-php "/php/php-cgi.exe"
    # spécifez le répertoire où se trouve php.ini
    SetEnv PHPRC "C:\Documents and Settings\Owner\My Documents\php\"
    J'ai ajoute le dossier C:\Documents and Settings\Owner\My Documents\php dans mon path, j'arrive par consequent a executer :

    lol.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
     
     
    	phpinfo();
     
    ?>
    en tapant php-cgi lol.php
    Cela me retourne le code HTML de la page phpinfo;

    En lancant le script Java plus haut, apres avoir pris soin de mettre php-cgi a la place de php, j'ai comme erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Exception in thread "main" java.lang.NullPointerException
    	at EvalScript.main(EvalScript.java:18)
    com.sun.script.javascript.RhinoScriptEngineFactory@c17164
    php.java.script.InteractivePhpScriptEngineFactory@13e205f
    php.java.script.PhpScriptEngineFactory@863399
    php.java.script.InvocablePhpScriptEngineFactory@16a55fa
    Pour rappel, voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ScriptEngine se =  mgr.getEngineByName("php-cgi");
            se.eval ("<?php function hello ($who) {return 'Hello '.$who;}; ?>"); 
            System.out.println((((Invocable) se).invokeFunction ("hello", new Object[] {"world"})));

  10. #10
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    le non de l'engine pour java, c'est php, pas paph-cgi. php-cgi est le nom de l'applicatif (.exe) que java lancera pour évaluer ton script (en fait php-cgi est l'application pour les serveur qui veulent utiliser du php mais n'ont pas accès au module natif, comme java)

  11. #11
    Membre habitué
    Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2007
    Messages : 439
    Points : 178
    Points
    178
    Par défaut
    Dans ce cas,


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    com.sun.script.javascript.RhinoScriptEngineFactory@c17164
    php.java.script.PhpScriptEngineFactory@157f0dc
    php.java.script.InvocablePhpScriptEngineFactory@141d683
    php.java.script.InteractivePhpScriptEngineFactory@e89b94
    Exception in thread "main" javax.script.ScriptException: java.io.IOException: PHP not found. Please install php-cgi. PHP test command was: [php-cgi, -v] 
    	at php.java.script.PhpScriptEngine.doEvalPhp(PhpScriptEngine.java:119)
    	at php.java.script.AbstractPhpScriptEngine.evalPhp(AbstractPhpScriptEngine.java:153)
    	at php.java.script.AbstractPhpScriptEngine.eval(AbstractPhpScriptEngine.java:137)
    	at php.java.script.AbstractPhpScriptEngine.eval(AbstractPhpScriptEngine.java:263)
    	at javax.script.AbstractScriptEngine.eval(Unknown Source)
    	at EvalScript.main(EvalScript.java:18)
    Caused by: java.io.IOException: PHP not found. Please install php-cgi. PHP test command was: [php-cgi, -v] 
    	at php.java.bridge.Util$Process.start(Util.java:1054)
    	at php.java.bridge.Util$ProcessWithErrorHandler.start(Util.java:1155)
    	at php.java.bridge.Util$ProcessWithErrorHandler.start(Util.java:1206)
    	at php.java.script.CGIRunner.doRun(CGIRunner.java:65)
    	at php.java.script.HttpProxy.doRun(HttpProxy.java:63)
    	at php.java.script.Continuation.run(Continuation.java:100)
    	at php.java.bridge.ThreadPool$Delegate.run(ThreadPool.java:60)
    alors que dans la console, php-cgi lol.php m'affiche le code ht;l de la page generee phpinfo()

  12. #12
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    bizzare, tu lance ton application java dans la même console?

  13. #13
    Membre habitué
    Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2007
    Messages : 439
    Points : 178
    Points
    178
    Par défaut
    Ah, je n'avais pas redemarre Eclipse.
    Voici l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    com.sun.script.javascript.RhinoScriptEngineFactory@c17164
    php.java.script.PhpScriptEngineFactory@157f0dc
    php.java.script.InvocablePhpScriptEngineFactory@141d683
    php.java.script.InteractivePhpScriptEngineFactory@e89b94
    Exception in thread "main" java.lang.ClassCastException: php.java.script.CloseablePhpScriptEngine cannot be cast to javax.script.Invocable
    	at EvalScript.main(EvalScript.java:19)
    J'ai donc change mon code en


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        	ScriptEngine se =  mgr.getEngineByName("php-invocable");
            se.eval ("<?php function hello ($who) {return 'Hello '.$who;}; ?>"); 
            System.out.println((((Invocable) se).invokeFunction ("hello", new Object[] {"world"})));
    et ca fonctionne, merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [COM] PHP en communication avec l'objet COM
    Par joe_le_mort dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 22/05/2012, 14h57
  2. Communication PHP > Java
    Par Drackster dans le forum Général Java
    Réponses: 6
    Dernier message: 27/12/2010, 15h29
  3. [PHP-JS] Communication Javascript vers PHP
    Par wwave dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 22/02/2006, 17h50
  4. [Stratégie] php / Java
    Par ptitsoleil87 dans le forum Développement Web en Java
    Réponses: 6
    Dernier message: 07/02/2005, 09h55
  5. [Java] Communication entre client et serveur
    Par danje dans le forum CORBA
    Réponses: 1
    Dernier message: 14/12/2004, 18h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo