手机版

PHP和COM、DCOM 对象相关问题

2019-09-10 阅读 :

PHP 可以在 Win32 平台中访问 COM 和 DCOM 对象。

  1. 我建立了一个 DLL 来做某种计算。有办法在 PHP 中运行这个 DLL 吗?
  2. “Unsupported variant type: xxxx (0xxxxx)”是什么意思?
  3. 在 PHP 中有可能操纵可视对象吗?
  4. 可以将一个 COM 对象保存在 session 中吗?
  5. 怎样可以捕获 COM 的错误?
  6. 我能像在 Perl 中一样从 PHP 脚本生成 DLL 文件吗?
  7. “Unable to obtain IDispatch interface for CLSID {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}”是什么意思?
  8. 怎样从远端服务器运行 COM 对象?
  9. 我得到一个“DCOM is disabled in C:\path...\scriptname.php on line 6”信息,应该怎么办?
  10. 有可能在 PHP 页面中加载/操纵 ActiveX 对象吗?
  11. 有可能得到一个组件在运行中的实例吗?
  12. 有办法处理 COM 对象中发送的事件吗?
  13. 我在尝试调用一个打开了多于一个接口的 COM 对象中的方法时碰到问题,应该怎么办?
  14. 这么说 PHP 可以和 COM 一起工作,那么 COM+ 呢?
  15. 如果 PHP 可以操纵 COM 对象,那么可以设想结合 PHP 用 MTS 来管理组件资源吗?
我建立了一个 DLL 来做某种计算。有办法在 PHP 中运行这个 DLL 吗?

如果这是个简单的 DLL 那么还没有办法在 PHP 中运行它。如果这个 DLL 中包含有一个 COM 服务器并且它实现了 IDispatch 接口,那有可能访问它。

“Unsupported variant type: xxxx (0xxxxx)”是什么意思?

有几十种 VARIANT 类型以及它们的组合。大多数已经被支持了但还有几种尚未实现。数组没有完全被支持。只有一维的仅用作索引的数组可以在 PHP 和 COM 之间传递。如果你发现其它未支持的类型,请当作一个 bug 报告(如果尚未被报告的话)并提供尽可能多的信息。

在 PHP 中有可能操纵可视对象吗?

一般来说是可以的,但是 PHP 大都用来作为 web 脚本语言并运行在 web 服务器的上下文环境中,因此可视对象决不会在服务器的桌面上显示。如果你把 PHP 用作应用程序脚本例如结合 PHP-GTK 来使用,那么访问和通过 COM 来操纵可视对象方面没有限制。

可以将一个 COM 对象保存在 session 中吗?

不行。COM 的实例被看作是资源,因此只在一个脚本的上下文中有效。

怎样可以捕获 COM 的错误?

在 PHP 5 中,COM 扩展会发出 com_exception异常信息,可以捕获并检查 code成员来决定下一步的行为。

在 PHP 4 中除了用 PHP 自己提供的办法之外(@,track_errors,..)不可能捕获 COM 的错误。

我能像在 Perl 中一样从 PHP 脚本生成 DLL 文件吗?

不行,PHP 没有这样的工具。

“Unable to obtain IDispatch interface for CLSID {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}”是什么意思?

此错误可以有多种原因:

  • 错误的 CLSID
  • 找不到所请求的 DLL
  • 所请求的组件没有实现 IDispatch 接口
怎样从远端服务器运行 COM 对象?

完全和运行本地对象一样。只须将远端服务器的 IP 作为第二个变量传递给 COM 的构造函数即可。

确认在 php.ini 中设定了 =&true;。

我得到一个“DCOM is disabled in C:\path...\scriptname.php on line 6”信息,应该怎么办?

编辑 php.ini 并设定 =&true;。

有可能在 PHP 页面中加载/操纵 ActiveX 对象吗?

这不关 PHP 的事。如果在 HTML 文档中请求的话,ActiveX 对象被加载在客户端。这和 PHP 脚本没有关系,因此也不可能和服务器端发生直接的交互作用。

有可能得到一个组件在运行中的实例吗?

在绰号的帮助下这有可能。如果你想得到同一个 word 实例的多个引用你可以这样建立此实例:

<?php
$word = new COM("C:\docs\word.doc");
?>

如果没有运行中的实例这将建立一个新的实例,否则将会返回正在运行中的实例的句柄,如果可用的话。

有办法处理 COM 对象中发送的事件吗?

可以自定义事件收报方并且用 com_event_sink()函数绑定之。可以用 com_print_typeinfo()来让 PHP 产生事件收报方类的框架。

我在尝试调用一个打开了多于一个接口的 COM 对象中的方法时碰到问题,应该怎么办?

我也不知道怎么办,我想这没办法。如果什么人有对此问题的明确信息请 » 告诉我。:)

这么说 PHP 可以和 COM 一起工作,那么 COM+ 呢?

COM+ 通过使用 MTS 和 MSMQ 来管理组件的框架扩展了 COM,但并没有什么特殊之处使 PHP 非要支持这样的组件。

如果 PHP 可以操纵 COM 对象,那么可以设想结合 PHP 用 MTS 来管理组件资源吗?

PHP 本身还并不处理事务。因而如果出错也不会发动撤回机制。如果你使用了支持事务处理的组件那你不得不自己实现事务管理。

本文标题:PHP和COM、DCOM 对象相关问题 - 服务器教程_服务器技术_服务器知识_vps教程
本文地址:https://www.helloaliyun.com/tutorial/449.html

相关文章

  • CentOS 7 常用命令(系统关机、重启以及登出)

    关机:(系统的关机、重启以及登出 ) # 关闭系统(1)[root@localhost ~]# shutdown -h now # 关闭系统(2)[root@localhost ~]# init 0 # 关闭系统(3)[root@localhost ~]# telinit 0 # 按预定时间关闭系统[root@localhost...

    2019-12-07 服务器教程
  • linux重启命令 reboot与shutdown -r now的区别与联系

    在linux命令中reboot是重新启动,shutdown -r now是立即停止然后重新启动,都说他们两个是一样的,其实是有一定的区别的。shutdown命令可以安全地关闭或重启Linux系统,它在系统关闭之前给系统上的所有登录用户提示一条警告...

    2019-12-07 服务器教程
  • CentOS 7 如何使用命令重启或关机

    安装GNOME的朋友们首先切换到字符界面。切换到字符界面的方法如下: 先登陆进入系统,进入图形化界面,然后按Ctrl+Alt+F6(笔记本的是Ctrl+Alt+shift+Fn),进入字符界面。关机命令:shutdown或poweroffshutdown:shutdown -h now...

    2019-12-07 服务器教程
  • CentOS 7 正确关机重启的命令方法

    linux主要用于服务器领域,而在服务器上执行一项服务是永无止境的,除非遇到特殊情况,否则不会关机。和Windows不同,在linux系统下,很多进程是在后台执行的。在屏幕背后,可能有很多人同时在工作。如果直接按下电源的按钮,其他...

    2019-12-07 服务器教程
  • CentOS下的yum upgrade和yum update区别,没事别乱用!

    说明:生产环境对软件版本和内核版本要求非常精确,别没事有事随便的进行yum update操作!!!!!!!!!yum update: 升级所有包同时也升级软件和系统内核yum upgrade:只升级所有包,不升级软件和系统内核...

    2019-12-07 服务器教程
你可能感兴趣
热门浏览