Mailinglisten-Archive |
Hallo Kar-Wing,
Kar-Wing Lau
> Ich weiss, dass man Java-Servlets mit PHP aufrufen kann. Ist es
> auch möglich
> Parameter zu übergeben und auch vor allem wieder auszulesen, so wie es bei
> exec() z.B. mit CGI funktioniert?
Will man mit Servlets und PHP arbeiten, ist folgende
Vorgehensweise empfehlenswert :
1.
php mit der option --with-servlet kompilieren .
Anstelle der gewohnten Webserver-API wird php
mit einer Servlet-API bereitgestellt.
2.
Das so entstandene phpsrvlt.jar kann direkt
in den CLASSPATH gestellt werden, und wird
unter java als net.php.servlet zur Verfügung
gestellt .
Das heisst: man kann direkt aus java PHP-Skripte
bearbeiten .
3.
Dieses "PHP über Java" kann man in einer normalen
Servlet-Engine wie etwa Apaches Tomcat verwenden .
Mit der im PHP-Source in /sapi/servlet/web.xml
ist auch gleiche eine Beispiel-Konfiguration dabei,
die das Bearbeiten von .php-Files über eine
Servlet-Engine erlaubt.
4.
Java-Klassen und -Objekte können wie bei ext/java
mit einfachem Overloading benutzt werden, also
z.B.
$xslprocessorfactory= new
java("org.apache.xalan.xslt.XSLTProcessorFactory");
$xslprocessor=$xslprocessorfactory->getProcessor();
für das, was in Java so hiesse :
import org.apache.xalan.xslt.XSLTProcessorFactory;
import org.apache.xalan.xslt.XSLTProcessor;
...
XSLTProcessor processor = XSLTProcessorFactory.getProcessor();
5.
Warum, in Gottes Namen, nicht einfach etc/java
benutzen und den ganzen Servlet-Kram weglassen ?
Die Benutzung von ext/java führt dazu, dass jedes
PHP-Skript eine komplette JVM hochfährt - und die
kann unter Umständen einige MB gross sein .
Daneben bieten Servlet-Engines in der Regel
Loadbalancing-Mechanismen wie ajpv12 an .
Diese Mechanismen werden natürlich auch vom
php-Servlet benutzt .
> Des weiteren haben wir die Frage von dem Java-Team reinbekommen, ob PHP
> multithread-fähig ist. Ist also PHP unter NT und unter Linux
> multithread-fähig? Wir wollen beides wegen der hohen zu erwartenden Last
> evtl. auf einen NT- oder Linux Cluster schieben, zumindest aber auf
> Multiprozessor-Systeme und dort optimale Lastverteilung erzielen.
Spötter würden sagen: nein, PHP ist nicht
Multithreading-fähig, weil so schon
performant ist.
Leider gibt es in PHP wirklich kein Multi-
threading, und auch eine Servletvariante
bietet hier keine Änderung .
Immerhin gibt es seit einer Woche mit Ticks
die Möglichkeit, PHP-Funktionen im Hintergrund
laufen zu lassen .
Die Fähigkeiten der Servlet-Engine, die Last
über einen Cluster zu verteilen, bleibt auch
bei PHP erhalten .
Damit fehlt zwar das Threading , aber in Summa
sollte es gut über 19"-Racks skalieren .
(Es fehlt leider immer noch jemand, der das
mal ausprobiert ;-) ).
Grüße, johann
php::bar PHP Wiki - Listenarchive