-
Notifications
You must be signed in to change notification settings - Fork 158
/
com.xml
310 lines (291 loc) · 8.7 KB
/
com.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
<?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, vous pourrez
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 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.
</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.
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.
</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, 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.
</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 envoie des exceptions
<literal>com_exception</literal>, que vous pouvez intercepter en
inspectant 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. Vous devez
juste passer l'adresse IP de la machine distante en deuxième paramètre
du constructeur COM.
</para>
<para>
Assurez-vous que vous avez spécifié
<link linkend="ini.com.allow-dcom">com.allow_dcom</link><literal>=</literal>&true; dans votre
&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 votre &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 fonctionnelle d'un composant ?
</para>
</question>
<answer>
<para>
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 :
</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 descripteur vers l'instance courante, 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>
Vous pouvez définir un moniteur d'événement (sink) et le lier en
utilisant <function>com_event_sink</function>. Vous pouvez 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. Nous ne savons pas
exactement, mais nous pensons que vous ne pouvez rien faire.
</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 des
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é. Si vous utilisez des composants
qui supportent les transactions, vous devrez implémenter le
gestionnaire de transactions par vous-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
-->