Il y a deux moyens de connecter PHP et Java : soit en intégrant PHP dans un environnement de Servlet Java , ce qui est la solution la plus stable et la plus efficace, soit en intégrant Java directement dans PHP. La première solution est fournie par le module SAPI qui s'interface avec un serveur de Servlet, la dernière par cette extension.
L'extension Java fournit un moyen simple et efficace pour créer et invoquer des méthodes d'un objet Java depuis PHP. La JVM est créée avec JNI, et tout fonctionne en intra-processus.
Ce module est EXPERIMENTAL . Cela signifie que le comportement de ces fonctions, leurs noms et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez ce module à vos risques et périls.
Vous avez besoin d'une Machine virtuelle Java installée sur votre machine pour utiliser cette extension.
Cette extension » PECL n'est pas intégrée à PHP.
En PHP 4, les sources de cette extension PECL peuvent être trouvées dans le dossier ext/ avec les sources de PHP ou sur le lien PECL ci-dessous. Si vous voulez utiliser ces fonctions, vous devez compiler PHP avec le support Java en utilisant l'option de configuration --with-java[=DIR] où DIR représente le dossier d'installation de base de votre JDK. Cette extension ne peut être compiler qu'en tant qu'extension partagée. Les extensions compilées additionnellement peuvent être trouvées dans php-src/ext/java/README .
Les utilisateurs de Windows doivent activer la bibliothèque php_java.dll dans le php.ini pour pouvoir utiliser ces fonctions. En PHP 4, cette bibliothèque DLL se trouve dans le dossier extensions/ avec les binaires PHP pour Windows téléchargées. La bibliothèque DLL pour cette extension PECL peut être téléchargée depuis, soit la page de » téléchargement PHP , soit depuis » http://pecl4win.php.net/
Note: Pour activer ce module dans un environnement Windows avec PHP <= 4.0.6, vous devez rendre la bibliothèque jvm.dll disponible pour votre PATH système. Aucune autre bibliothèque DLL n'est nécessaire pour les version de PHP > 4.0.6.
Le comportement de ces fonctions est affecté par la configuration dans le fichier php.ini .
Tableau 150. Options de configuration
Nom | Par défaut | Modifiable | Historique |
---|---|---|---|
java.class.path | NULL | PHP_INI_ALL | |
java.home | NULL | PHP_INI_ALL | |
java.library.path | NULL | PHP_INI_ALL | |
java.library | JAVALIB | PHP_INI_ALL |
Cette extension ne définit aucune ressource.
Cette extension ne définit aucune constante.
Exemple 1247. Exemple avec Java
<?php
// créer une instance de la classe Java java.lang.System dans PHP
$system
= new
Java
(
'java.lang.System'
);
// accède aux propriétés
echo
'Java version='
.
$system
->
getProperty
(
'java.version'
) .
' <br />'
;
echo
'Java vendor='
.
$system
->
getProperty
(
'java.vendor'
) .
'<br />'
;
echo
'OS='
.
$system
->
getProperty
(
'os.name'
) .
' '
.
$system
->
getProperty
(
'os.version'
) .
' on '
.
$system
->
getProperty
(
'os.arch'
) .
'<br />'
;
// Exemple avec java.util.Date
$formater
= new
Java
(
'java.text.SimpleDateFormat'
,
"EEEE, MMMM dd, yyyy 'at' h:mm:ss a zzzz"
);
echo
$formater
->
format
(new
Java
(
'java.util.Date'
));
?>
Exemple 1248. Exemple AWT
<?php
// Cet exemple ne fonctionne qu'en mode CGI.
$frame
= new
Java
(
'java.awt.Frame'
,
'PHP'
);
$button
= new
Java
(
'java.awt.Button'
,
'Hello Java World!'
);
$frame
->
add
(
'North'
,
$button
);
$frame
->
validate
();
$frame
->
pack
();
$frame
->
visible
=
True
;
$thread
= new
Java
(
'java.lang.Thread'
);
$thread
->
sleep
(
10000
);
$frame
->
dispose
();
?>
Les exceptions sont transformées en alertes PHP, et résultat NULL. Les alertes peuvent être supprimées en préfixant l'appel par l'opérateur > . Les fonctions suivantes peuvent être utilisées pour lire et effacer la dernière erreur remontée :
Les surcharges de fonctions sont des problèmes épineux, étant données les différences de type de valeurs entre les deux /bin/bash: q: command not found mais efficace pour déterminer la meilleur fonction à utiliser.
De plus, les noms de méthodes ne sont pas sensibles à la casse en PHP, ce qui augmente le nombre de conflits potentiels.
Une fois qu'une méthode est sélectionnée, les paramètres sont transtypés, avec une perte d'information potentielle non négligeable (par exemple, les nombres à virgules flottante en double précisions seront convertis en booléen).
L'interface PHP 4 sapi/servlet est construite sur un mécanisme défini par l'extension Java, qui permet à PHP d'être exécuté comme une servlet. L'avantage immédiat d'un point de vue PHP est que les serveurs web qui supportent les servlets gèrent rigoureusement les machines virtuelles. Les instructions d'installation du module Servlet SAPI sont disponibles dans le fichier php4/sapi/README . Notes :