65.9K
CodeProject 正在变化。 阅读更多。
Home

从 ActiveX 执行 PHP

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.91/5 (4投票s)

2005年5月4日

3分钟阅读

viewsIcon

64902

downloadIcon

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.dllphp5ts.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 代码中的一个错误,因此我建议不要这样做。

运行脚本使用 RunCodeExecute 方法。区别在于,RunCode 希望您的代码作为字符串,而 Execute 希望的是文件名。

对我来说,最酷的功能是能够向 PHP 添加函数、变量和常量。你没看错——向 PHP 添加函数。您可以使用 AddFunction 方法注册您的代码函数。当您的方法从 PHP 内部触发时,您会收到一个 OnFunctionExecute 事件,并且您可以使用 ReturnValue 引用变量将信息返回给 PHP。

在您的应用程序或脚本结束时,您还需要调用 FinalizeControl 方法来释放底层代码中的内存。

负责任的使用

(理解为“为了善而不是恶而使用”)

风险自负。

这是一个非常有用的,同时也是潜在的有害功能。

关于浏览器和此控件的一些要点

  1. ActiveX 控件仅适用于支持它们的浏览器,即 Internet Explorer。
  2. 即使在 IE 中,您也必须专门允许 ActiveX 控件。
  3. 我恳请您永远不要随意启用运行 ActiveX 控件。相反,我建议仅在受信任的站点上允许它们,并且仅在提示设置下允许它们。

结论

我希望您喜欢这段代码,并请原谅控件中一些凌乱的额外属性。我承认,我在这里有点懒。Delphi 要求您选择一个可视控件才能快速制作 ActiveX 控件,因此您会得到一些附带的包袱。如果我有几个请求,我将重新创建该项目,而无需这些额外的东西。我将在 angorasoftware.com 上维护最新版本的链接

© . All rights reserved.