好象默认就支持的,我写过一个COM的,没有配置,直接使用的

解决方案 »

  1.   

    phpinfo()
    看一下,4.04以上的版本应该都是默认支持的,不过一般没什么必要的话不要用com,万一服务器换成了unix平台怎么办?真要用的话不如用java beans
      

  2.   

    wingoffire(wingoffire)的话有道理 :)
      

  3.   

    php可以支持com的话 能给它带来哪些好处啊?
      

  4.   

    to leejd(小东):
        我直接调用word或excel的application,好像就不行,它提示找不到库文件。to wingoffire(wingoffire):
        我也是这样想的,但对JAVA beans 的配置我也不会,可否告诉我详细配置????
      

  5.   

    嘿嘿~~平常都浏览一些论坛还是有用的,看,不仅可以学东西,还可以拿分~~~~~~~~~
    〈转载〉 
    作者/来源:东方一蛇/网易广州 
    PHP4调用自己编写的COM组件 搞完了PHP4调用JavaBean,又想去试试调用COM,开始以为很难,自己用VB6写了 
    一个Active Dll在PHP4中调用,马上成功,比调用javabean方便多了,下面讲一 
    下我的步骤。 下载的版本是从http://www.mm4.de/。 一:用VB6写Activex Dll 代码如下: Option Explicit  Private MyScriptingContext As ScriptingContext  Private MyApplication As Application  Private MyRequest As Request Private MyResponse As Response  Private MyServer As Server  Private MySession As Session Public  Sub OnStartPage(PassedScriptingContext As ScriptingContext)  Set MyScriptingContext = PassedScriptingContext  Set MyApplication = MyScriptingContext.Application  Set MyRequest = MyScriptingContext.Request  Set MyResponse = MyScriptingContext.Response  Set MyServer = MyScriptingContext.Server  Set MySession = MyScriptingContext.Session  End Sub  Public Sub OnEndPage()  Set MyScriptingContext = Nothing Set MyApplication = Nothing  Set MyRequest = Nothing  Set MyResponse = Nothing  Set MyServer = Nothing  Set MySession = Nothing  End Sub  Public Function Test_Number(num) As Variant  If num < 0 Then Get_Number_Attrib = -1  If num > 0 Then Get_Number_Attrib = 1  If num = 0 Then Get_Number_Attrib = 0 End Function  具体方法如下:新建一个VB6工程,ActiveX Dll将工程命名为P_test,类名为c_test 类的文件内容如上。 编译生成p_test.dll文件 二:注册 提示符下运行:regsvr32 p_test.dll 三:编写php文件,test.php4代码如下: <? $b=new COM("p_test.c_test"); $a=$b->Test_Number(-454); echo $a; ?> 运行php4文件将显示-1 可能遇到的问题是,编译工程时通不过,要将 Microsoft Active Server Pages Object Library  引用进来,具体实现“Project->References”找到改库,并勾上 相比之下,PHP4调用com应该比PHP4调用javabean好哦,因为毕竟是Ms系统嘛。大 
    家也可以去自己编写调用数据库的控件,用PHP4调用,从某种程度上,和PHP调用 
    javabean一样,可以说,实现了“隐藏源代码”。 
      

  6.   

    to hotwaters(hotwaters):
      我还是不太明白PHP对COM的支持是如何配置的!
      

  7.   

    PHP4不需要配置就可以支持COM的,问题是你的COM组件需要注册。
      

  8.   

    你先用先用phpinfo()看看你的机器是否打开了COM支持.一般PHP4是打开了COM支持的。
    你再试试下面的(是从Zend找到的脚本,在我机子上OK~~~)。
    <?php
    $word = new COM("word.application") or die("Unable to instanciate Word "); 
    print "Loaded Word, version {$word->Version}\n"; 
    $word->Visible = 1; 
    $word->Documents->Add(); 
    $word->Selection->TypeText("This is a test..."); 
    $word->Documents[1]->SaveAs("Useless test.doc"); 
    $word->Quit(); 
    ?>
      

  9.   

    to hotwaters(hotwaters):
      我的PHP可以支持COM组件,但我有一点不太明白的是:COM组件在WINDOWS 里是如何注册的?
      

  10.   

    二:注册 提示符下运行:regsvr32 p_test.dll 
      

  11.   

    PHP4中使用COM (Windows)--简介作者:Alain M. Samoun       摘录日期:2001年01月22日      简介 
    PHP4内置的COM函数对于在win32环境下编程的人们确实有吸引力。目前关于这方面的文档并不多。这篇文章将用3个例子(MS office 2000, Excel, Adobe Distiller)来解释怎样在PHP4里用COM编程。微软用不同的名称开发COM技术已经有多年了。在这篇文章里OLE, OLE自动化, ActiveX和COM都是一回事:用一段封装的代码来为一个windows应用实现一些函数。PHP4的COM建立与对象的连接(实例化对象)然后用其中的方法和属性。 
    如果你想重新开发这些例子,以下是我的配置: 
    Windows 98 - MS Office 2000 
    Apache 1.3.9 Windows 
    PHP4.02 Dev (08-20-00) Running as CGI PHP4里的COM标记 
    让我们从PHP4里的COM函数开始。要实例化一个控件,需要一个“new”操作符和对象的“OLE标识符”: 
    <?php $instance = new COM("$identifier"); ?> 
    COM是PHP4保留的一个类名称,它把$identifier传给构造函数。 我们现在有了一个实例化的控件,可以用OOP技术很方便的引用它的方法和属性。例如: 
    <?php $instance->[Object]->[method1]->[method2]->..->[property]; ?> 
    就是这么简单! 
    如果不能这样引用的话(有时当属性的名称或值中含有点或括号等特殊字符时会引起PHP语法错误),PHP4 COM还提供了两个函数: 
    <?php 
    bool com_set(class com_object, string property name, string property_value); 
    mixed com_get(class com_object, string property_name); 
    ?> 
    最后,PHP4也支持DCOM,可以建立一个远程计算机上对象的实例。 
    <?php 
    $Instance = new COM(string "Component name", string "remote_server_address"); 
    ?> 
    以上就是所有的函数,没有其它函数需要记住了! 
    注意:PHP可能将来支持在Unix上使用DCOM。 标识符,方法和属性 
    标识符是类似下面的字符串: 
    MS Word: "Word.Application" 或 "Word.Application.9" 
    MS Excel: "Excel.Application" 或 "Excel.Sheet" 
    ADOBE Acrobat: "Exch.application" 或 "PdfDistiller.PdfDistiller" 
    就象最后一个标识符表明的,并不是所有的对象的名称都是显而易见的。如果你没有VBA的文档,你可以查看注册表的HKEY_CLASSES_ROOT文件夹:在扩展名列表的下面你可以看到应用程序的名称,有CLSID子文件夹的就是可用的COM标识符。 
    应用程序应该提供有关COM的方法和属性的文档。例如在Office 2000中,打开程序,用快捷键<ALT+F11>打开VB编辑器然后用<F2>打开对象编辑器。输入一个方法或属性的名称,选择一个成员后选择帮助即可得到该成员的描述。你也可以访问MSDN。一个Excel的例子是:http://msdn.microsoft.com/library/officedev/off2000/xltocobjectmodelapplication.htm 
    译自:http://www.phpbuilder.com/columns/alain20001003.php3
      

  12.   

    介绍几个windows下的COM相关函数作者:不详       本文介绍的函数只能在windows下的PHP中使用。 函数列表: com_load — 创建一个COM组件的引用。 
    com_invoke — 调用一个COM组件的方法。 
    com_propget — 取一个COM组件的属性的值。 
    com_get — 同上,取一个COM组件的属性的值。 
    com_propput — 赋一个值给一个COM组件的属性。 
    com_propset — 同上,赋一个值给一个COM组件的属性。 
    com_set — 同上,赋一个值给一个COM组件的属性。 在www.php.net 下给出了如下实例: 例1: 
    <? $word=new COM("word.application") or die("Cannot start word for you"); 
    print "Loaded word version ($word->Version)n"; 
    $word->visible =1 ; 
    $word->Documents->Add(); 
    $word->Selection->Typetext("Dit is een test"); 
    $word->Documents[1]->SaveAs("burb ofzo.doc"); 
    $word->Quit(); ?> 例2: 
    另外,有人给出了另一个例子,用 Delphi做了一个对象 MyObject (一个方法 ComTophp)。 
    也可以这样用: $Obj = com_load("MyLibraryTest.MyObject"); 
    $result = com_invoke($Obj,"ComTophp","Params 1","Params 2"); 
    echo $result; 上面这个例子我可没试过哦。 例3: 
    <? 
    # example use of ADODB and SQLOLEDB (MS-SQL 7) in PHP 4 
    # Tested on Win2K with PHP 4.02 $conn_obj = new COM("ADODB.Connection") or die("Cannot start ADO"); // replace myserver with your server name define ("OLEDB_CONNECTION_STRING", "Provider=SQLOLEDB; Data Source=myserver; Initial Catalog=Northwind; User ID=sa; Password="); // use SQL Server 7.0 OLE DB Provider $conn_obj->Open(OLEDB_CONNECTION_STRING); $command = "select lastname, firstname, title from employees"; // SQL Statement $rs = $conn_obj->Execute($command); // Recordset 
    $i = 0; $fld0 = $rs->Fields(0); 
    $fld1 = $rs->Fields(1); 
    $fld2 = $rs->Fields(2); while (!$rs->EOF) { 
    $i += 1; 
    print "$fld0->value $fld1->value $fld2->value 
    "; 
    $rs->MoveNext(); 
    } $rs->Close(); ?> 好了,下面就逐个介绍吧。 //****************** 
    com_load (PHP3.0.3 - 3.0.16 only) string com_load (string module name [, string server name]) 创建一个COM组件新的引用,并返回它,如果失败,返回 false 。 参数分别是模块名和服务器名。 //******************** 
    com_invoke (PHP3.0.3 - 3.0.16 only, PHP4 ) mixed com_invoke (resource com_object, string function_name [, mixed function parameters, ...]) 调用一个COM组件的方法。如果成功,返回function_name的返回值,否则,返回false。 参数分别是:模块引用,方法名,方法所需的参数, //************************* 
    com_propget (PHP3.0.3 - 3.0.16 only, PHP4 ) mixed com_propget (resource com_object, string property) 取COM组件的一个属性的值,本函数是 com_get() 的一个别名。 
    //************************* 
    com_get (PHP3.0.3 - 3.0.16 only, PHP4 ) 
    mixed com_get (resource com_object, string property) 参数分别是:COM引用,属性名。 
    如果错误,返回 false。 //*************************** 
    com_propput (PHP 3.0.3 - 3.0.16 only, PHP4 ) void com_propput (resource com_object, string property, mixed value) 给COM组件的一个属性付值。本函数是 com_set() 的一个别名。 
    //**************************** 
    com_propset (PHP3.0.3 - 3.0.16 only, PHP4 ) void com_propset (resource com_object, string property, mixed value) 这也是com_set()的一个别名。 //**************************** 
    com_set (PHP3.0.3 - 3.0.16 only, PHP4 ) void com_set (resource com_object, string property, mixed value) 给COM组件的一个属性赋值,参数是:组件模块名,属性名,新值。 
    如果错误,返回false,否则返回 true。 
      

  13.   

    请问你们在php中调用COM,OS是MS还是Linux?
    在Linux中也可以调用COM吗?