标签: php4delphi

使用zend(多维数组)交换数据

我在我的应用程序中嵌入PHP(在Delphi 2010中编写),使用PHP4Delphi组件与php5ts.dll连接.我想我的程序充当PHP(sapi模块?)的扩展,因为它注册了一些可以在PHP脚本中使用的函数和常量......无论如何,在使用简单数据类型时效果很好,但是当我尝试使用多维数组时作为返回值我得到错误

Access violation at address 01CD3C35 in module 'php5ts.dll'. Read of address 0231E608.
堆栈列表
(000A2C35){php5ts.dll} [01CD3C35] destroy_op_array + $35
(004C4D61){myApp.exe } [008C5D61] php4delphi.TPHPEngine.ShutdownEngine (Line 1497, "php4delphi.pas" + 17) + $7

php4delphi.pas中的第1497行是调用的 tsrm_shutdown();

对我来说,它看起来像垃圾收集器在脚本结束时崩溃,所以我怀疑我没有正确地将数据发送回引擎...因此我的问题是如何将多维数组发送回PHP?
我正在使用的模式是

var subArray: pzval;  
_array_init(return_value, nil, 0);  
for x := 0 to Data.Count-1 do begin  
   subArray := MAKE_STD_ZVAL;  
   _array_init(subArray, nil, 0);  
   // populate subarray with data, including other subarrays
   ...
   // add subarray to the main array
   add_index_zval(return_value, x, subArray);
end;
Run Code Online (Sandbox Code Playgroud)

我是否必须"注册"我创建的子阵列?我必须增加或减少refcount或设置is_ref?IOW,如何设置子数组的return_value和zvals? …

delphi php-extension delphi-2010 php-internals php4delphi

22
推荐指数
1
解决办法
1156
查看次数

使用Delphi 2010和php4Delphi编写PHP扩展

首先这是关于php4Delphi而不是RadPHP(以前的Delphi For PHP).

运用

  • Delphi 2010
  • PHP 5.3.6(VC9,NTS)
  • php4Delphi 7.2(用VC9指令编译)
  • Windows Server 2008 R2
  • IIS 7

当试图在IIS/PHP服务器上运行php4Delphi delphi_math.dll示例扩展时,我在C:\ Windows\Temp\php-errors.log文件中看到以下错误.

[15-Jun-2011 17:58:42] PHP警告:PHP启动:无法加载动态库'C:\ Program Files(x86)\ PHP\ext\delphi_math.dll' - 动态链接库(DLL)初始化例行失败.在第0行的未知中

我已经解决了PHP的初始问题,没有找到我的扩展,因此它不是路径样式问题.

我认为php4Delphi 7.2可能不支持最新的PHP 5.3.6.有谁有这个配置为他们工作?

php delphi iis-7 php-extension php4delphi

5
推荐指数
1
解决办法
2641
查看次数