Einfacher PHP-Interpreter

destroflyer

Mitglied
Hi, :)
kennt jemand einen simplen PHP-Interpreter? Er sollte einfache Ausdrücke wie 'echo "Hello World";' interpretieren und ausgeben können. Ich habe zwar etwas namens 'Quercus' bzw. 'Resin' gefunden, das erschein mir aber zu komplex, da ich es beim besten Willen nicht einbinden könne.

Gruß, destro
 

Sekundentakt

Bekanntes Mitglied
Hast Du einen konkreten Anwendungsfall?

Es gibt seitens von PHP eine Bibliothek, mit deren Hilfe sich Java-Anwendungen über PHP-Scripte ansteuern lassen und deren Ergebnisse in PHP weiterverwendet werden können.

PHP-Java-Bridge
 

destroflyer

Mitglied
Genau das will ich ja nicht... -.-
Ich will, dass in Java z.B. in einem Textfeld ein PHP-Code interpretiert und ausgegeben wird. Wenn im Textfeld z.B.
for($i=0;$i<3;$i++){ echo "hello world"; }
steht, soll nach dem interpretieren dreimal "hello world" im Textfeld stehen.

Im Grunde genommen brauche ich eine Funktion des Schemas:
public String interpretiere(String phpCode) { ... }

Gruß, destro :)
 

Sekundentakt

Bekanntes Mitglied
Hi,

so ein Interpreter ist kein Leichtgewicht.
Ich bin mir sicher, dass es sowas als Eclipse-Plugin gibt.
Das Einzige was ich mir vorstellen könnte, wäre, dass Du den Code als Text an ein PHP Script sendest, den Code dort über eval() verarbeitest und den Rückgabewert über XML, JSON oder Ähnliches bei Dir im Programm ausgibst.
Eval() ist allerdings nicht gerade sehr bekannt dafür, dass es schnell ist. Für lastige Anwendungen also eher ungeeignet.

Das wäre m.E. eine Lösung, die sich so auch schnell umsetzen ließe.

Viel Erfolg!
 

destroflyer

Mitglied
Das Problem ist nur, dass das ganze auch offline möglich sein soll... Es muss ja nicht zwangsläufig jede Funktion enthalten sein, Schleifen und Variablen jedoch schon.

Das Einzige was ich mir vorstellen könnte, wäre, dass Du den Code als Text an ein PHP Script sendest, den Code dort über eval() verarbeitest und den Rückgabewert über XML, JSON oder Ähnliches bei Dir im Programm ausgibst.
Über so etwas hatte ich auch schon nachgedacht, aber den Code gibt der User ein, also ziemlich unsicher...

Gruß, destro

P.S.: Kennt sich jemand mit Quercus aus und kann mir ein simples Beispiel zeigen? (Zu dem 3xHelloWorld-Code oben)
 
G

Gastredner

Gast
Der Aufruf des PHP-Interpreters sollte (wenn Quercus im Classpath ist) genauso wie der Aufruf des JavaScript-Interpreters funktionieren, wie es hier gezeigt wird.
 

r.w.

Bekanntes Mitglied
Je nach Anwendungsfall besteht auch die Möglichkeit, PHP lokal zu installieren (läuft auch ohne Webserver).
Den zu evaluierenden Quellcode könnte man in eine Temp-Datei schreiben und diese dem PHP-Interpreter per
Kommandozeilenaufruf übergeben. Den Output in der Kommandozeile könnte man dann wieder in der Java-Applikation
abfangen und anzeigen.

Nur so eine Idee.

VG ROlf
 

destroflyer

Mitglied
Sorry, dass ich nochmal nachfrage, aber wie genau kann ich denn Quercus nutzen. Ich habe es mit dem Code, auf den Gastredner verwies, versucht, aber der schmeißt eine Fehlermeldung nach der anderen.
Kann jemand bitte ein einfaches Beispiel geben, wie ich einen simplen PHP-Befehl ausführen kann? (Sollte offline und ohne PHP-Installation möglich sein)

Gruß, destro :)
 

destroflyer

Mitglied
Tut mir leid, dass ich den Thread nochmal ausgrabe... :( Aber ich muss wissen, wie ich Quercus nutzen kann.
von mir hat gesagt.:
Ich habe es mit dem Code, auf den Gastredner verwies, versucht, aber der schmeißt eine Fehlermeldung nach der anderen.
Kann jemand bitte ein einfaches Beispiel geben, wie ich einen simplen PHP-Befehl ausführen kann? (Sollte offline und ohne PHP-Installation möglich sein)
 

destroflyer

Mitglied
Danke für die schnelle Antwort. :) Ich hab' mir den unteren Link mal angeschaut... Nach einigem Suchen habe ich das hier gefunden:
Part I: Installing Resin
Downloading and unzipping Resin

1. Navigate to caucho.com download
2. Download the latest Resin binary for your operating system.
3. For purposes of this demo, I have downloaded the Windows .zip binary. The non-pro version is open-source.
4. Save the file to your desktop.
5. Double click the binary and unzip the file.
6. For purposes of this demo, I have unzipped the contents to C:\resin-3.0.14

Running Resin for the first time

1. Browse to the directory into which you unzipped the resin download (ie: C:\resin-3.0.14)
2. Double-click httpd.exe. At this point the resin web server should start.
3. Open your favorite browser and type in the following URL: Domain ist reserviert
4. You will now see Resin's Default Home Page

Ich komme nur bis zu dem Punkt 2. Double-click httpd.exe. At this point the resin web server should start.. Ich habe Resin 4.0.10 heruntergeladen und entpackt. Allerdings finde ich keine httpd.exe-Datei...

Gruß, destro :)
 

tfa

Top Contributor
Ich hoffe doch, man muss nicht dieses ganze Resin-Geraffel installieren, nur weil man einen PHP-Interpreter haben will.
Hier hab ich noch einen Artikel zu dem Thema gefunden. Vielleicht hilft dir das ja:

Die Verwendung von PHP-Scripten innerhalb von Java ist damit ein Vierzeiler geworden:

1. ScriptEngineManager m = new ScriptEngineManager();
2. ScriptEngine phpEngine = m.getEngineByExtension("php");
3. ScriptContext context = phpEngine.getContext();
4. Object php2javaResult = phpEngine.eval("<?php echo \"hello world\"; ?>",context);

Damit kann man als Java-Entwickler auf recht einfache Weise die Rückgabewerte von beliebigen PHP-Methoden und -klassen in die eigene Arbeit integrieren.
Integration von PHP mit der Java Enterprise Edition
 

destroflyer

Mitglied
Aber genau dafür muss man sich noch Sachen wie Apache Tomcat etc. installieren.

JavaBridge Website (Sourgeforce) hat gesagt.:
Installation

1. Test your PHP installation with:

java -classpath JavaBridge.war TestInstallation

If the test fails due to a missing "php-cgi" FastCGI SAPI, expect step no. 3 to fail, too.
2. Download and install original Apache Tomcat software (or any other supported servlet engine or application server) as a Windows or Unix service and copy JavaBridge.war to its autodeploy folder.
3. Browse to

http://localhost:8080/JavaBridge

and run the PHP and JSP examples. If this step fails due to a missing "php-cgi" FastCGI SAPI, run Apache/IIS PHP, see below.
4. Copy or symlink the created webapps/JavaBridge folder to the web server document root.
5. Browse to

Ecommerce Web Site Hosting by YourHost.com

and run the PHP examples through Apache/IIS PHP.

Denn alleine mit dem Vierzeiler wird eine Fehlermeldung geschmissen, da phpEngine null ist (da das ganze andere zeug noch nicht installiert ist)

Gruß, destro :)
 
G

Gastredner

Gast
Bei Quercus wohl nicht, da wird wohl eine komplette Java-Implementierung des PHP-Interpreters mitgeliefert.
Lad dir das Ding doch mal und schau nach, ob es vielleicht klappt, wenn du die Server-Jars in den Classpath mit aufnimmst.

Und wenn das auch nicht geht: Schon mal über Alternativen nachgedacht? Warum muss es überhaupt (das meiner bescheidenen Meinung nach potthässliche) PHP sein?
 

ice-breaker

Top Contributor
Denn alleine mit dem Vierzeiler wird eine Fehlermeldung geschmissen, da phpEngine null ist (da das ganze andere zeug noch nicht installiert ist)

natürlich ist phpEngine null wenn du die Quercus.jar nicht einbindest. Das ganze Webserver-Zeug benötigst du nur, wenn du auch wirklich PHP über HTTP machen willst.

In der WAR-Datei steckt irgendwo die quercus-Scriptengine drinne, also mit WinRar öffnen und die richtige Jar suchen.
Edit: in der resin.jar steckt es drinne, also einfach die jar einbinden und nochmal alle ScriptEngines auflisten lassen.
 

destroflyer

Mitglied
Danke dir vielmals. :)
Allerdings bekomme ich immernoch einen Fehler:
Code:
Exception in thread "main" java.lang.RuntimeException: java.lang.NoClassDefFoundError: javax/servlet/ServletInputStream
        at com.caucho.quercus.script.QuercusScriptEngine.eval(QuercusScriptEngine.java:166)
        at com.caucho.quercus.script.QuercusScriptEngine.eval(QuercusScriptEngine.java:179)
        at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:247)

Wahrscheinlich muss ich noch eine *.jar-Datei einbinden, oder? (Die, die sich um das Servlet kümmert)

Gruß, destro :)

EDIT: Es klappt :) Juhu^^ Ich hab einfach mal per Zufalle die *.jar-Datei 'servlet-api.jar' aus Tomcat in den Klassenpfad eingebunden und TADAA^^ Es funzt :D
EDIT²: Wie kann ich den generierten Code in einem String abspeichern bzw. anzeigen lassen. eval gibt den im Moment immer nur in der Ausgabe aus und von der Funktion zurückgegeben wird nur null. (Eventuell mit ScriptContext?)
EDIT³: OK, jetzt klappt es perfekt. :) Ich habe mithilfe von setWriter(new FileWriter(..)) den Code in eine Datei geschrieben, die ich dann auslese... Alternativ würde auch in einem String speichern gehen (mithilfe eines Streams), allerdings brauchte ich sowieso später eine Datei^^
Nochmals Danke an alle, die mir geholfen haben. :)
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
F 2 JsonArray vergleichen, geht es auch einfacher ? Allgemeine Java-Themen 3
J JUnit, TestCase vs "einfacher" Test Allgemeine Java-Themen 3
G einfacher Installer Allgemeine Java-Themen 3
T Geht das vielleicht noch einfacher? Allgemeine Java-Themen 7
J Selbsterstelltes Programm einfacher öffnen? Allgemeine Java-Themen 2
C JUNG Framework - einfacher Graph Allgemeine Java-Themen 7
Chris_1980 Geht das nicht auch einfacher (Arcanoid Multiball) Allgemeine Java-Themen 2
K Registry-Zugriff auch einfacher? (ORACLE_HOME auslesen) Allgemeine Java-Themen 3
T Einfacher regulärer Ausdruck Allgemeine Java-Themen 2
E einfacher taschenrechner Allgemeine Java-Themen 5
D Klassendesign für einen Pascal Interpreter Allgemeine Java-Themen 6
D Pascal Interpreter Allgemeine Java-Themen 2
D Pascal Interpreter Allgemeine Java-Themen 7
S Gibt es eigentlich Java Source Code Interpreter..? Allgemeine Java-Themen 13
J Java Interpreter Allgemeine Java-Themen 7
K Command Line Argument Interpreter für komplexe Strukturen Allgemeine Java-Themen 9
K event dispatch thread fehler. Compiler meckert nicht aber der Interpreter? Warum?? Allgemeine Java-Themen 11
martin82 Java Interpreter Allgemeine Java-Themen 24
F Woher bekomme ich "dlib" oder: Interpreter-Program Allgemeine Java-Themen 2
B Formel Interpreter gesucht Allgemeine Java-Themen 7
G Script interpreter Allgemeine Java-Themen 3
S was wird optimiert ? klassen, bytecode oder interpreter? Allgemeine Java-Themen 12

Ähnliche Java Themen

Neue Themen


Oben