诺亚方舟

沉淀

PHP中你没发现的COM组件

什么是COM?

COM(Component Object Model)组件对象模型,是一种跨应用和语言共享二进制代码的方法。是位于DCE RPC上部的对象指向层(关联服务)定义公共的调用协定以允许用不同语言编写的代码调用,并允许其它语言代码进行交互操作(前题是代码是COM明白的),COM可以作为DLL被本机程序载入也可以通过DCOM被远程进程调用。

下面是通过一个实例来说明究竟什么是COM组件。

第一步,做为一个COM组件,这个DLL要被系统识别就要先到系统来报到

  regsvr32 [组件文件名]

  regsvr32 ABC.dll

这时候这个文件就不能移动位置了,系统会在用到它时到这个目录来找,如果改目录就得先删除注册再重新注册

  regsvr32 /u [组件文件名]

系统会显示窗口表示成功,大意是 组件Dllregister成功或是Dllunregister成功

第二步就可以直接调用它了

  $obj = new COM(“ABC.MyObj”); //一般前边是它的主文件名后边是它的类名从注册表里找这个文件可以找到

这样就生成了一个叫obj的对象,我们就可以用它的属性和方法来操作了

  $obj->MyAttr=’123′;

  $obj->SerAttr(‘str’,0);

当然,如果这个组件是第三方的,对方可能出于加密、保密或是后台太烂了不想让你直接见到她,然后就提供一个组件只允许通过这个组件来访问。他会给你提供组件的同时提供一份接口说明包括类、属性和方法。

当然有的为了能说清还会附上一份编译时生成的map(符号对应位置)当然一般人也不看。

—-上述文章转自http://blog.sina.com.cn/s/blog_44bb510e0100gglz.html—-

既然如此,那COM为PHP的贡献就略大了,他可以通过在注册表添加组件记录来实现PHP调用操作系统多种文件功能,比方说像数据库、office软件等等。关于COM调用应用软件的用法网上大把,这里我也还没研究,就不去COPY了。

值得记下的一点是,我猜想了QQ邮箱实现附件预览功能的做法应该是用了COM组件去读取上传附件的文件类型,从而选择调用什么方式去预览,如word、excel可以调用$word = new COM(“word.application”);而如果是图片则直接预览这样。

最后附上个相关博文链接。

用PHP调用 Windows COM组件访问数据库的例子

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>