好象默认就支持的,我写过一个COM的,没有配置,直接使用的
解决方案 »
- echo $cont_start变量...为什么页面打印不出信息呢???
- 关于php+mysql网站上传.csv文件的问题
- 如何把字符传转化成数组 再比对 求帮助
- 我也请教正则表达式
- php獲取域用戶信息
- 如何通过PHP来发家致富~~~~~~~~~~~~~~~(YY)
- post textarea图文信息到后台,但是后台无法提取到图片数组,求解????
- 问个问题。。。
- 大侠们看看这个条件的语句怎么查询??在线等待!!
- 包含环境变量的文件被zend加密后,执行的时候输出是空白
- 在PHP中用new com()来调用COM对象,可为什么COM返回的汉字是乱码?
- 表单提交时Submit按钮可不可以赋变量?
看一下,4.04以上的版本应该都是默认支持的,不过一般没什么必要的话不要用com,万一服务器换成了unix平台怎么办?真要用的话不如用java beans
我直接调用word或excel的application,好像就不行,它提示找不到库文件。to wingoffire(wingoffire):
我也是这样想的,但对JAVA beans 的配置我也不会,可否告诉我详细配置????
〈转载〉
作者/来源:东方一蛇/网易广州
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一样,可以说,实现了“隐藏源代码”。
我还是不太明白PHP对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();
?>
我的PHP可以支持COM组件,但我有一点不太明白的是:COM组件在WINDOWS 里是如何注册的?
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
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。
在Linux中也可以调用COM吗?