从 ActiveX 执行 PHP






3.91/5 (4投票s)
2005年5月4日
3分钟阅读

64902

893
无需安装 PHP 即可执行 PHP。
引言
通常,在 .NET 中运行 PHP 脚本涉及到向操作系统执行 shell 命令并将响应传递回来。借助 Serge Perevoznyk 的 PHP4Delphi,Delphi 开发人员能够利用 Zend (PHP) 引擎,而无需诉诸 shell,同时获得一些卓越的功能,如用户自定义函数、变量、常量和错误事件。PHPX 是一个 ActiveX 控件,用于封装此功能。我因为一个项目需要它,所以我想与大家分享。
需要
- PHPXControl.ocx - PHP4Delphi 库的 ActiveX 封装器。必须使用 regsvr32 在您的操作系统中注册此文件(在命令行中,键入 "regsvr32 phpxcontrol.ocx")。
- php4Delphi.dll - Serge Perevoznyk 的库,用于解释与 Zend 引擎的信息获取和设置(包含在 ZIP 中)。
- php4ts.dll 或 php5ts.dll - PHP Zend 引擎,不包含在此 ZIP 中。此文件和整个 PHP 引擎软件包可从 PHP 站点免费获得,但您只需要 php*ts.dll。
ZIP 文件包含另一个 JavaScript 和一个 C# 示例。
JavaScript 示例
(当然,ActiveX 控件也可以在 C++、C# 和 VB/VB.NET 中使用。)
// Create the activex control
var php = new ActiveXObject("PHPXControl.PHPX");
// set the directory that php5ts.dll is located in
php.DLLFolder = "c:\\phpx\\";
// run the PHP code
var result = php.RunCode('print "Hello World!";');
// show the result
window.alert(result);
// clean up the object
php.FinalizeControl();
使用控件
实例化控件后,设置 DLLFolder 属性。如果未设置此属性,您会收到错误,提示脚本引擎无法启动。一般来说,我建议您将上面列出的组件放在同一个目录中,以便于使用。多次创建控件会暴露底层 Delphi 代码中的一个错误,因此我建议不要这样做。
运行脚本使用 RunCode
或 Execute
方法。区别在于,RunCode
希望您的代码作为字符串,而 Execute
希望的是文件名。
对我来说,最酷的功能是能够向 PHP 添加函数、变量和常量。你没看错——向 PHP 添加函数。您可以使用 AddFunction
方法注册您的代码函数。当您的方法从 PHP 内部触发时,您会收到一个 OnFunctionExecute
事件,并且您可以使用 ReturnValue
引用变量将信息返回给 PHP。
在您的应用程序或脚本结束时,您还需要调用 FinalizeControl
方法来释放底层代码中的内存。
负责任的使用
(理解为“为了善而不是恶而使用”)
风险自负。
这是一个非常有用的,同时也是潜在的有害功能。
关于浏览器和此控件的一些要点
- ActiveX 控件仅适用于支持它们的浏览器,即 Internet Explorer。
- 即使在 IE 中,您也必须专门允许 ActiveX 控件。
- 我恳请您永远不要随意启用运行 ActiveX 控件。相反,我建议仅在受信任的站点上允许它们,并且仅在提示设置下允许它们。
结论
我希望您喜欢这段代码,并请原谅控件中一些凌乱的额外属性。我承认,我在这里有点懒。Delphi 要求您选择一个可视控件才能快速制作 ActiveX 控件,因此您会得到一些附带的包袱。如果我有几个请求,我将重新创建该项目,而无需这些额外的东西。我将在 angorasoftware.com 上维护最新版本的链接