@@ -21,8 +21,7 @@ interface
2121
2222uses
2323 { $IFNDEF FPC} Windows{ $ELSE} LCLType,LCLIntf,dynlibs,libc{ $ENDIF} , SysUtils,
24- { $IFDEF PHP7} hzend_types, { $ENDIF}
25- ZendTypes, Variants,
24+ { $IFDEF PHP7} hzend_types, { $ElSE} ZendTypes, { $ENDIF} Variants,
2625 PHPTypes;
2726type
2827TArrayVariant = array of variant;
@@ -218,8 +217,9 @@ function zend_hash_add(ht : {$IFDEF PHP7}Pzend_array{$ELSE}PHashTable{$ENDIF}; a
218217
219218var
220219 zend_hash_graceful_destroy : procedure(ht: PHashTable); cdecl;
220+ { $IFNDEF PHP7}
221221 zend_hash_graceful_reverse_destroy : zend_hash_graceful_reverse_destroy_t;
222-
222+ { $ENDIF }
223223 zend_hash_apply : procedure(ht: PHashTable; apply_func: pointer; TSRMLS_DC: Pointer); cdecl;
224224
225225 zend_hash_apply_with_argument : procedure(ht: PHashTable;
@@ -332,8 +332,17 @@ procedure zend_hash_internal_pointer_reset(ht: {$IFDEF PHP7} Pzend_array {$ELSE}
332332
333333 zend_register_constant : function(var c: zend_constant; TSRMLS_DC: Pointer): Integer; cdecl;
334334
335- zend_register_auto_global : function(name : zend_pchar; name_len: uint; callback: Pointer; TSRMLS_DC: Pointer): Integer; cdecl;
336-
335+ zend_register_auto_global :
336+ { $IFDEF PHP700}
337+ function(name :Pzend_string; jit:zend_bool; auto_global_callback:Pointer):longint; cdecl;
338+ { $ELSE}
339+ { $IFDEF PHP5}
340+ function(name : zend_pchar; name_len: uint; jit:boolean; callback: Pointer; TSRMLS_DC: Pointer): Integer; cdecl;
341+ zend_activate_auto_globals: procedure(TSRMLS_C: Pointer); cdecl;
342+ { $ELSE}
343+ function(name : zend_pchar; name_len: uint; callback: Pointer; TSRMLS_DC: Pointer): Integer; cdecl;
344+ { $ENDIF}
345+ { $ENDIF}
337346procedure REGISTER_MAIN_LONG_CONSTANT (name : zend_pchar; lval: longint; flags: integer; TSRMLS_DC: Pointer);
338347procedure REGISTER_MAIN_DOUBLE_CONSTANT (name : zend_pchar; dval: double; flags: integer; TSRMLS_DC: Pointer);
339348procedure REGISTER_MAIN_STRING_CONSTANT (name : zend_pchar; str: zend_pchar; flags: integer; TSRMLS_DC: Pointer);
@@ -551,17 +560,32 @@ procedure convert_to_string(op: pzval);
551560 { $ELSE}
552561 zend_indent : procedure; cdecl;
553562 { $ENDIF}
554- ZendGetParameters : function: integer; cdecl;
555- zend_get_params_ex : function(param_count : Integer; Args : { $IFNDEF PHP700} ppzval { $ELSE} pzval{ $ENDIF} ) :integer; cdecl varargs;
563+ ZendGetParameters :
564+ { $IFDEF PHP7}
565+ function(ht:longint; param_count:longint):longint; cdecl varargs;
566+ { $ELSE}
567+ function: integer; cdecl;
568+ { $ENDIF}
569+ zend_get_params_ex :
570+ { $IFDEF PHP7}
571+ function(param_count:longint):longint; cdecl varargs;
572+ { $ELSE}
573+ function(param_count : Integer; Args : ppzval) :integer; cdecl varargs;
574+ { $ENDIF}
575+ { $IFDEF PHP7}
576+ ZvalGetArgs: function(Count: Integer; Args: ppzval): Integer;cdecl varargs;
577+ _zend_get_parameters_array_ex:function(param_count:longint; argument_array:Pzval):longint; cdecl;
578+ { $ELSE}
579+ _zend_get_parameters_array_ex : function(param_count: integer; argument_array:
580+ pppzval; TSRMLS_CC: pointer): integer; cdecl;
581+ { $ENDIF}
556582function zend_get_parameters_ex (number: integer; var Params: pzval_array): integer;
557583function zend_get_parameters_my (number: integer; var Params: pzval_array; TSRMLS_DC: Pointer): integer;
558-
584+ { $IFNDEF PHP7 }
559585function zend_get_parameters (ht: integer; param_count: integer; Params: array of
560586ppzval): integer;
587+ { $ENDIF}
561588
562- var
563- _zend_get_parameters_array_ex : function(param_count: integer; argument_array:
564- pppzval; TSRMLS_CC: pointer): integer; cdecl;
565589
566590procedure dispose_pzval_array (Params: pzval_array);
567591
@@ -869,10 +893,10 @@ function Z_STRVAL(z : Pzval) : zend_ustr;
869893function Z_STRUVAL (z : PZval): UTF8String;
870894function Z_STRWVAL (z : pzval) : String;
871895function Z_STRLEN (z : Pzval) : longint;
872- function Z_ARRVAL (z : Pzval ) : { $IFDEF PHP7 } Pzend_array { $ELSE } PHashTable{ $ENDIF } ;
873- function Z_OBJ_HANDLE (z :Pzval) : zend_object_handle;
874- function Z_OBJ_HT (z : Pzval) : { $IFDEF PHP7} hzend_types. P_zend_object_handlers{ $ELSE} pzend_object_handlers{ $ENDIF} ;
875- function Z_OBJPROP (z : Pzval) : { $IFDEF PHP7 } hzend_types. PHashTable{ $ELSE } PHashTable { $ENDIF } ;
896+ function Z_ARRVAL (z : Pzval ) : PHashTable;
897+ function Z_OBJ_HANDLE (z :Pzval) : { $IFDEF PHP7 } P_zend_object_handlers { $ELSE } zend_object_handle{ $ENDIF } ;
898+ function Z_OBJ_HT (z : Pzval) : { $IFDEF PHP7} P_zend_object_handlers{ $ELSE} pzend_object_handlers{ $ENDIF} ;
899+ function Z_OBJPROP (z : Pzval) : PHashTable;
876900function Z_VARREC (z: pzval): TVarRec;
877901
878902 procedure zend_addref_p (z: pzval); cdecl;
@@ -1306,7 +1330,7 @@ function ZValArrayKeyDel(v: pzval; key: zend_ustr): Boolean; overload;
13061330 { $IFDEF PHP7}
13071331 begin
13081332 pzs^.len := strlen(zend_pchar(key));
1309- pzs^.val := zend_pchar(key);
1333+ pzs^.val := estrdup( zend_pchar(key) );
13101334 Result := zend_hash_del_key_or_index(v.value .arr, pzs) = SUCCESS
13111335 end ;
13121336 { $ELSE}
@@ -1326,7 +1350,7 @@ function ZValArrayKeyDel(v: pzval; idx: Integer): Boolean; overload;
13261350 { $IFDEF PHP7}
13271351 begin
13281352 pzs^.len := strlen(zend_pchar(inttostr(idx)));
1329- pzs^.val := zend_pchar(inttostr(idx));
1353+ pzs^.val := estrdup( zend_pchar(inttostr(idx) ));
13301354 Result := zend_hash_del_key_or_index(v.value .arr, pzs) = SUCCESS
13311355 end ;
13321356 { $ELSE}
@@ -2458,6 +2482,9 @@ function LoadZEND(const DllFilename: zend_ustr = PHPWin) : boolean;
24582482 zend_register_constant := GetProcAddress(PHPLib, ' zend_register_constant' );
24592483
24602484 zend_register_auto_global := GetProcAddress(PHPLib, ' zend_register_auto_global' );
2485+ { $IFDEF PHP5}
2486+ zend_activate_auto_globals := GetProcAddress(PHPLib, ' zend_activate_auto_globals' );
2487+ { $ENDIF}
24612488
24622489 // -- tsrm_shutdown
24632490 tsrm_shutdown := GetProcAddress(PHPLib, ' tsrm_shutdown' );
@@ -2725,6 +2752,8 @@ function LoadZEND(const DllFilename: zend_ustr = PHPWin) : boolean;
27252752 { $IFDEF PHP7}
27262753 // -- zend_parse_parameters_throw
27272754 zend_parse_parameters_throw := GetProcAddress(PHPLib, ' zend_parse_parameters_throw' );
2755+ ZvalGetArgs := GetProcAddress(PHPLib, ' zend_get_parameters_ex' );
2756+ _zend_get_parameters_array_ex := GetProcAddress(PHPLib, ' _zend_get_parameters_array_ex' );
27282757 { $ELSE}
27292758 // -- zend_indent
27302759 zend_indent := GetProcAddress(PHPLib, ' zend_indent' );
@@ -3026,34 +3055,64 @@ function zend_get_parameters_ex(number: integer; var Params: pzval_array): integ
30263055var
30273056 i : integer;
30283057begin
3029- SetLength(Params, number);
3058+
30303059 if number = 0 then
30313060 begin
30323061 Result := SUCCESS;
30333062 Exit;
30343063 end ;
3064+ { $IFDEF PHP7}
3065+ Params.value .arr.nNumOfElements := number;
3066+ for i := 0 to number - 1 do
3067+ zend_hash_index_add_empty_element(Params.value .arr, i);
3068+ Result := ZvalGetArgs(number, @Params);
3069+ { $ELSE}
3070+ SetLength(Params, number);
30353071 for i := 0 to number - 1 do
30363072 New(Params[i]);
3037-
30383073 Result := zend_get_parameters(number, number, Params);
3074+ { $ENDIF}
30393075end ;
30403076
30413077function zend_get_parameters_my (number: integer; var Params: pzval_array; TSRMLS_DC: Pointer): integer;
30423078var
30433079 i : integer;
3044- p: pppzval;
3080+
3081+ p:
3082+ { $IFDEF PHP7}
3083+ pzval
3084+ { $ELSE}
3085+ pppzval
3086+ { $ENDIF} ;
30453087begin
3046- SetLength(Params, number);
30473088 if number = 0 then
30483089 begin
30493090 Result := SUCCESS;
30503091 Exit;
30513092 end ;
3093+ { $IFDEF PHP7}
3094+ Params.value .arr.nNumOfElements := number;
3095+ for i := 0 to number - 1 do
3096+ zend_hash_index_add_empty_element(Params.value .arr, i);
3097+
3098+ p := emalloc(number * sizeOf(zval));
3099+ Result := _zend_get_parameters_array_ex(number, p);
3100+
3101+ for i := 0 to number - 1 do
3102+ begin
3103+ _zend_hash_update_ind(Params.value .arr, i, p, ' ' , 0 );
3104+ if i <> number then
3105+ inc(integer(p), sizeof(zval));
3106+ end ;
3107+
3108+ efree(p);
3109+ _zend_get_parameters_array_ex(number, p);
3110+ { $ELSE}
3111+ SetLength(Params, number);
30523112 for i := 0 to number - 1 do
30533113 New(Params[i]);
3054- { $IFNDEF PHP700 }
3114+
30553115 p := emalloc(number * sizeOf(ppzval));
3056- { $ENDIF}
30573116 Result := _zend_get_parameters_array_ex(number, p, TSRMLS_DC);
30583117
30593118 for i := 0 to number - 1 do
@@ -3064,8 +3123,9 @@ function zend_get_parameters_my(number: integer; var Params: pzval_array; TSRMLS
30643123 end ;
30653124
30663125 efree(p);
3126+ { $ENDIF}
30673127end ;
3068-
3128+ { $IFNDEF PHP7 }
30693129function zend_get_parameters (ht: integer; param_count: integer; Params: array of ppzval): integer; assembler; register;
30703130asm
30713131 push esi
@@ -3092,15 +3152,20 @@ function zend_get_parameters(ht: integer; param_count: integer; Params: array of
30923152 loop @toploop2
30933153 pop esi
30943154end ;
3095-
3155+ { $ENDIF }
30963156procedure dispose_pzval_array (Params: pzval_array);
30973157var
30983158 i : integer;
30993159begin
3160+ { $IFDEF PHP7}
3161+ if Params.value .arr.nNumOfElements>0 then
3162+ for i := 0 to Params.value .arr.nNumOfElements-1 do
3163+ Freemem(zend_hash_index_findZval(Params,i));
3164+ { $ELSE}
31003165 if Length(Params)>0 then
3101-
31023166 for i := 0 to High(Params) do
31033167 FreeMem(Params[i]);
3168+ { $ENDIF}
31043169 Params := nil ;
31053170end ;
31063171
@@ -3302,6 +3367,8 @@ procedure CheckZendErrors;
33023367 if @zend_html_puts = nil then raise EPHP4DelphiException.Create(' zend_html_puts' );
33033368 { $IFDEF PHP7}
33043369 if @zend_parse_parameters_throw = nil then EPHP4DelphiException.Create(' zend_parse_parameters_throw' );
3370+ if @ZvalGetArgs = nil then EPHP4DelphiException.Create(' ZvalGetArgs' );
3371+ if @_zend_get_parameters_array_ex = nil then EPHP4DelphiException.Create(' _zend_get_parameters_array_ex' );
33053372 { $ELSE}
33063373 if @zend_indent = nil then raise EPHP4DelphiException.Create(' zend_indent' );
33073374 { $ENDIF}
@@ -3418,7 +3485,7 @@ function zend_unregister_functions(functions : {$IFDEF PHP7}P_zend_function_entr
34183485 break;
34193486 { $IFDEF PHP7}
34203487 pzs^.len := strlen(ptr.fname);
3421- pzs^.val := ptr.fname;
3488+ pzs^.val := estrdup( ptr.fname) ;
34223489 zend_hash_del_key_or_index(function_table, pzs);
34233490 { $ELSE}
34243491 zend_hash_del_key_or_index(function_table, ptr.fname, strlen(ptr.fname) +1 , 0 , HASH_DEL_KEY);
@@ -3614,7 +3681,7 @@ function Z_BVAL(z : pzval) : boolean;
36143681 end ;
36153682
36163683 if { $IFDEF PHP7} z.u1.v._type{ $ELSE} z._type{ $ENDIF} = IS_BOOL then
3617- Result := zend_bool(z.value .lval)
3684+ Result := boolean( zend_bool(z.value .lval) )
36183685 else
36193686 case { $IFDEF PHP7} z.u1.v._type{ $ELSE} z._type{ $ENDIF} of
36203687 IS_DOUBLE: if Trunc(z.value .dval) = 0 then Result := false else Result := true;
@@ -3766,9 +3833,9 @@ function Z_ARRVAL(z : pzval ) : {$IFDEF PHP7}Pzend_array{$ELSE}PHashTable{$ENDIF
37663833 Result := { $IFDEF PHP7} z.value .arr { $ELSE} z.value .ht{ $ENDIF} ;
37673834end ;
37683835
3769- function Z_OBJ_HANDLE (z :pzval) : zend_object_handle;
3836+ function Z_OBJ_HANDLE (z :pzval) : { $IFDEF PHP7 } P_zend_object_handlers { $ELSE } zend_object_handle{ $ENDIF } ;
37703837begin
3771- Result := z.value .obj.handle;
3838+ Result := { $IFDEF PHP7 } z.value .obj.handlers { $ELSE } z. value .obj. handle{ $ENDIF } ;
37723839end ;
37733840
37743841function Z_OBJ_HT (z : pzval) : { $IFDEF PHP7} hzend_types.P_zend_object_handlers{ $ELSE} pzend_object_handlers{ $ENDIF} ;
@@ -3824,7 +3891,7 @@ function zend_hash_add_or_update(ht : {$IFDEF PHP7}Pzend_array{$ELSE}PHashTable{
38243891begin
38253892 { $IFDEF PHP7}
38263893 pz^.len := strlen(arKey);
3827- pz^.val := arKey;
3894+ pz^.val := estrdup( arKey) ;
38283895 if Assigned(_zend_hash_add_or_update) then
38293896 Result := _zend_hash_add_or_update(ht, pz, pData, flag, ' ' , 0 ).u2.fe_iter_idx
38303897 { $ELSE}
0 commit comments