PHP et COM
PHP peut �tre utilis� pour acc�der � des objets COM et DCOM sur les plates-formes Win32.
- J'ai compil� une DLL pour calculer quelque chose. Y a-t-il un moyen d'utiliser cette DLL sous PHP ?
- Que signifie 'Unsupported variant type: xxxx (0xxxxx)' ?
- Est-il possible de manipuler des objets visuels en PHP ?
- Puis-je stocker un objet COM dans une session ?
- Comment puis-je intercepter des erreurs COM ?
- Puis-je g�n�rer des fichiers DLL � partir de PHP comme je le fais avec Perl ?
- Que signifie 'Unable to obtain IDispatch interface for CLSID {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}' ?
- Comment puis-je utiliser des objets COM � partir d'un serveur distant ?
- J'obtiens 'DCOM is disabled in C:\path...\scriptname.php on line 6', que dois-je faire ?
- Est-il possible de charger/manipuler des objets ActiveX dans une page en PHP ?
- Est-il possible d'obtenir une instance fonctionnelle d'un composant ?
- Y a-t-il moyen de manipuler un �v�nement envoy� par un objet COM ?
- J'ai des probl�mes quand j'invoque une m�thode d'un objet COM qui expose plus d'une interface. Que puis-je faire ?
- Bon, PHP fonctionne avec COM, mais qu'en est-il de COM+ ?
- Si PHP peut manipuler des objets COM, peut-on imaginer d'utiliser des ressources de composants, en conjonction avec PHP ?
-
J'ai compil� une DLL pour calculer quelque chose. Y a-t-il un moyen d'utiliser cette DLL sous PHP ?
-
Si c'est une DLL simple, il n'y a aucun moyen pour le moment de l'utiliser avec PHP. Si la DLL contient un serveur COM, vous pourrez l'utiliser si elle impl�mente l'interface IDispatch.
-
Que signifie 'Unsupported variant type: xxxx (0xxxxx)' ?
-
Il y a des dizaines de types de VARIANT et de combinaisons entre elles. La plupart d'entre elles sont d�j� support�es, mais quelques une ne sont toujours pas impl�ment�es. Les tableaux ne sont pas compl�tement support�s. Seuls le tableaux unidimensionnels index�s peuvent �tre transmis entre PHP et COM. Si vous trouvez d'autres types qui ne sont pas support�s, reportez-les nous comme un bogue (si ce n'est pas d�j� fait) et fournissez le plus d'informations possibles.
-
Est-il possible de manipuler des objets visuels en PHP ?
-
G�n�ralement, c'est possible, mais comme PHP est utilis� le plus souvent en tant que langage de script web et dans un environnement de serveur web, les objets visuels n'appara�tront jamais sur le bureau du serveur. Si vous voulez utiliser PHP pour scripter des applications, par exemple avec PHP-GTK, il n'y a aucune limitation � acc�der et manipuler des objets visuels via COM.
-
Puis-je stocker un objet COM dans une session ?
-
Non, vous ne pouvez pas. Les instances COM sont trait�es comme des ressources, ce qui signifie qu'elles ne sont disponibles que dans un seul contexte de script.
-
Comment puis-je intercepter des erreurs COM ?
-
En PHP 5, l'extension COM envoie des exceptions com_exception, que vous pouvez intercepter en inspectant le membre code pour d�terminer que faire.
En PHP 4, il n'est pas possible d'intercepter des erreurs COM en dehors de la fa�on dont elles sont fournies par PHP lui-m�me (@, track_errors, ..).
-
Puis-je g�n�rer des fichiers DLL � partir de PHP comme je le fais avec Perl ?
-
Non, il n'y a malheureusement pas d'outil disponible pour le faire en PHP.
-
Que signifie 'Unable to obtain IDispatch interface for CLSID {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}' ?
-
Cette erreur peut avoir plusieurs causes :
- le CLSID est incorrect
- la DLL demand�e est introuvable
- le composant demand� n'impl�mente pas l'interface IDispatch
-
Comment puis-je utiliser des objets COM � partir d'un serveur distant ?
-
Exactement de la m�me mani�re qu'avec des objets locaux. Vous devez juste passer l'adresse IP de la machine distante en deuxi�me param�tre du constructeur COM.
Assurez-vous que vous avez sp�cifi� com.allow_dcom=TRUE dans votre php.ini.
-
J'obtiens 'DCOM is disabled in C:\path...\scriptname.php on line 6', que dois-je faire ?
-
�ditez votre php.ini et mettez com.allow_dcom=TRUE.
-
Est-il possible de charger/manipuler des objets ActiveX dans une page en PHP ?
-
Cela n'a rien � voir avec PHP. Les objets ActiveX sont charg�s c�t� client s'il sont demand�s par le document HTML. Il n'y a aucune relation avec le script PHP et il n'y a pas d'interaction directe possible avec le serveur.
-
Est-il possible d'obtenir une instance fonctionnelle d'un composant ?
-
C'est possible avec l'aide de monikers. Si vous voulez des r�f�rences multiples au m�me mot d'instance, vous pouvez cr�er une instance de la fa�on suivante :
<?php
$word = new COM("C:\docs\word.doc");
?>Cela cr�era une nouvelle instance s'il n'y en a aucune disponible ou retournera un descripteur vers l'instance courante, si elle est disponible.
-
Y a-t-il moyen de manipuler un �v�nement envoy� par un objet COM ?
-
Vous pouvez d�finir un moniteur d'�v�nement (sink) et le lier en utilisant com_event_sink(). Vous pouvez utiliser com_print_typeinfo() pour que PHP g�n�re un squelette pour la classe du moniteur d'�v�nement.
-
J'ai des probl�mes quand j'invoque une m�thode d'un objet COM qui expose plus d'une interface. Que puis-je faire ?
-
La r�ponse est aussi simple que non satisfaisante. Je ne sais pas exactement, mais je pense que vous ne pouvez rien faire. Si quelqu'un a des informations sp�cifiques sur ce sujet, faites-le » moi savoir :)
-
Bon, PHP fonctionne avec COM, mais qu'en est-il de COM+ ?
-
COM+ �tend COM avec un canevas pour g�rer des composants via MTS et MSMQ mais il n'y a rien de particulier que PHP doit supporter pour utiliser de tels composants.
-
Si PHP peut manipuler des objets COM, peut-on imaginer d'utiliser des ressources de composants, en conjonction avec PHP ?
-
PHP ne supporte pas encore les transactions. Ainsi, si une erreur se produit, aucun rollback n'est initi�. Si vous utilisez des composants qui supportent les transactions, vous devrez impl�menter le gestionnaire de transactions par vous-m�me.