mirror of
https://github.com/php/doc-fr.git
synced 2026-03-23 22:52:18 +01:00
311 lines
8.7 KiB
XML
311 lines
8.7 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- $Revision$ -->
|
|
<!-- EN-Revision: e0352653179c355a6b9c353629147b06a2069f24 Maintainer: gui Status: ready -->
|
|
<!-- Reviewed: yes -->
|
|
|
|
<chapter xml:id="faq.com" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
<title>PHP et COM</title>
|
|
<titleabbrev>PHP et COM</titleabbrev>
|
|
|
|
<para>
|
|
PHP peut être utilisé pour accéder à des objets COM et DCOM sur les
|
|
plates-formes Win32.
|
|
</para>
|
|
|
|
<qandaset>
|
|
<qandaentry xml:id="faq.com.q1">
|
|
<question>
|
|
<para>
|
|
J'ai compilé une DLL pour calculer quelque chose. Y a-t-il un moyen
|
|
d'utiliser cette DLL sous PHP ?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
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, il sera possible de
|
|
l'utiliser si elle implémente l'interface IDispatch.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.com.q2">
|
|
<question>
|
|
<para>
|
|
Que signifie 'Unsupported variant type: xxxx (0xxxxx)' ?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
Il y a des dizaines de types de VARIANT et de combinaisons entre eux.
|
|
La plupart d'entre elles sont déjà supportées, mais quelques-unes ne sont
|
|
toujours pas implémentées.
|
|
Les tableaux ne sont pas complètement supportés. Seuls les tableaux
|
|
unidimensionnels indexés peuvent être transmis entre PHP et COM.
|
|
Si d'autres types non supportés sont trouvés, les reporter
|
|
comme un bogue (si ce n'est pas déjà fait) en fournissant le plus
|
|
d'informations possibles.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.com.q3">
|
|
<question>
|
|
<para>
|
|
Est-il possible de manipuler des objets visuels en PHP ?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
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.
|
|
Pour 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.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.com.q4">
|
|
<question>
|
|
<para>
|
|
Puis-je stocker un objet COM dans une session ?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
Non, c'est impossible. Les instances COM sont traitées comme des
|
|
ressources, ce qui signifie qu'elles ne sont disponibles que dans un
|
|
seul contexte de script.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.com.q5">
|
|
<question>
|
|
<para>
|
|
Comment puis-je intercepter des erreurs COM ?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
L'extension COM lance des exceptions
|
|
<literal>com_exception</literal>, qu'il est possible d'intercepter puis
|
|
d'inspecter le membre <literal>code</literal> pour déterminer que faire.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.com.q6">
|
|
<question>
|
|
<para>
|
|
Puis-je générer des fichiers DLL à partir de PHP comme je le fais avec
|
|
Perl ?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
Non, il n'y a malheureusement pas d'outil disponible pour le faire en
|
|
PHP.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.com.q7">
|
|
<question>
|
|
<para>
|
|
Que signifie 'Unable to obtain IDispatch interface for CLSID {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}' ?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
Cette erreur peut avoir plusieurs causes :
|
|
<itemizedlist>
|
|
<listitem>
|
|
<simpara>
|
|
le CLSID est incorrect
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
la DLL demandée est introuvable
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
le composant demandé n'implémente pas l'interface IDispatch
|
|
</simpara>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.com.q8">
|
|
<question>
|
|
<para>
|
|
Comment puis-je utiliser des objets COM à partir d'un serveur distant ?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
Exactement de la même manière qu'avec des objets locaux. Il faut
|
|
juste passer l'adresse IP de la machine distante en deuxième paramètre
|
|
du constructeur COM.
|
|
</para>
|
|
<para>
|
|
Il faut s'assurer d'avoir spécifié
|
|
<link linkend="ini.com.allow-dcom">com.allow_dcom</link><literal>=</literal>&true; dans le
|
|
&php.ini;.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.com.q9">
|
|
<question>
|
|
<para>
|
|
J'obtiens 'DCOM is disabled in C:\path...\scriptname.php on line 6', que
|
|
dois-je faire ?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
Éditez le &php.ini; et mettez
|
|
<link linkend="ini.com.allow-dcom">com.allow_dcom</link><literal>=</literal>&true;.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.com.q10">
|
|
<question>
|
|
<para>
|
|
Est-il possible de charger/manipuler des objets ActiveX dans une page en
|
|
PHP ?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
Cela n'a rien à voir avec PHP. Les objets ActiveX sont chargés côté
|
|
client s'ils 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.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.com.q11">
|
|
<question>
|
|
<para>
|
|
Est-il possible d'obtenir une instance en cours d'exécution d'un composant ?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
C'est possible avec l'aide de monikers. Pour obtenir des références
|
|
multiples au même mot d'instance, il est possible de créer cette instance de la
|
|
façon suivante :
|
|
</para>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
$word = new COM("C:\docs\word.doc");
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
<para>
|
|
Cela créera une nouvelle instance s'il n'y en a aucune disponible ou
|
|
retournera un gestionnaire vers l'instance en cours d'exécution, si elle est
|
|
disponible.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.com.q12">
|
|
<question>
|
|
<para>
|
|
Y a-t-il moyen de manipuler un événement envoyé par un objet COM ?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
Il est possible de définir un moniteur d'événement (sink) et le lier en
|
|
utilisant <function>com_event_sink</function>. Il est possible d'utiliser
|
|
<function>com_print_typeinfo</function> pour que PHP génère un
|
|
squelette pour la classe du moniteur d'événement.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.com.q13">
|
|
<question>
|
|
<para>
|
|
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 ?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
La réponse est aussi simple que non satisfaisante. Il n'y a pas de solution
|
|
connue à ce problème.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.com.q14">
|
|
<question>
|
|
<para>
|
|
Bon, PHP fonctionne avec COM, mais qu'en est-il de COM+ ?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
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.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.com.q15">
|
|
<question>
|
|
<para>
|
|
Si PHP peut manipuler des objets COM, peut-on imaginer d'utiliser
|
|
MTS pour gérer les ressources de composants, en conjonction avec PHP ?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
PHP ne supporte pas encore les transactions. Ainsi, si une erreur se
|
|
produit, aucun rollback n'est initié. Lors de l'utilisation de composants
|
|
qui supportent les transactions, il faut implémenter le
|
|
gestionnaire de transactions soi-même.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
</qandaset>
|
|
</chapter>
|
|
|
|
<!-- Keep this comment at the end of the file
|
|
Local variables:
|
|
mode: sgml
|
|
sgml-omittag:t
|
|
sgml-shorttag:t
|
|
sgml-minimize-attributes:nil
|
|
sgml-always-quote-attributes:t
|
|
sgml-indent-step:1
|
|
sgml-indent-data:t
|
|
indent-tabs-mode:nil
|
|
sgml-parent-document:nil
|
|
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
|
sgml-exposed-tags:nil
|
|
sgml-local-catalogs:nil
|
|
sgml-local-ecat-files:nil
|
|
End:
|
|
vim600: syn=xml fen fdm=syntax fdl=2 si
|
|
vim: et tw=78 syn=sgml
|
|
vi: ts=1 sw=1
|
|
-->
|