@@ -21,8 +21,7 @@ interface
21
21
22
22
uses
23
23
{ $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,
26
25
PHPTypes;
27
26
type
28
27
TArrayVariant = array of variant;
@@ -218,8 +217,9 @@ function zend_hash_add(ht : {$IFDEF PHP7}Pzend_array{$ELSE}PHashTable{$ENDIF}; a
218
217
219
218
var
220
219
zend_hash_graceful_destroy : procedure(ht: PHashTable); cdecl;
220
+ { $IFNDEF PHP7}
221
221
zend_hash_graceful_reverse_destroy : zend_hash_graceful_reverse_destroy_t;
222
-
222
+ { $ENDIF }
223
223
zend_hash_apply : procedure(ht: PHashTable; apply_func: pointer; TSRMLS_DC: Pointer); cdecl;
224
224
225
225
zend_hash_apply_with_argument : procedure(ht: PHashTable;
@@ -332,8 +332,17 @@ procedure zend_hash_internal_pointer_reset(ht: {$IFDEF PHP7} Pzend_array {$ELSE}
332
332
333
333
zend_register_constant : function(var c: zend_constant; TSRMLS_DC: Pointer): Integer; cdecl;
334
334
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}
337
346
procedure REGISTER_MAIN_LONG_CONSTANT (name : zend_pchar; lval: longint; flags: integer; TSRMLS_DC: Pointer);
338
347
procedure REGISTER_MAIN_DOUBLE_CONSTANT (name : zend_pchar; dval: double; flags: integer; TSRMLS_DC: Pointer);
339
348
procedure 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);
551
560
{ $ELSE}
552
561
zend_indent : procedure; cdecl;
553
562
{ $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}
556
582
function zend_get_parameters_ex (number: integer; var Params: pzval_array): integer;
557
583
function zend_get_parameters_my (number: integer; var Params: pzval_array; TSRMLS_DC: Pointer): integer;
558
-
584
+ { $IFNDEF PHP7 }
559
585
function zend_get_parameters (ht: integer; param_count: integer; Params: array of
560
586
ppzval): integer;
587
+ { $ENDIF}
561
588
562
- var
563
- _zend_get_parameters_array_ex : function(param_count: integer; argument_array:
564
- pppzval; TSRMLS_CC: pointer): integer; cdecl;
565
589
566
590
procedure dispose_pzval_array (Params: pzval_array);
567
591
@@ -869,10 +893,10 @@ function Z_STRVAL(z : Pzval) : zend_ustr;
869
893
function Z_STRUVAL (z : PZval): UTF8String;
870
894
function Z_STRWVAL (z : pzval) : String;
871
895
function 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;
876
900
function Z_VARREC (z: pzval): TVarRec;
877
901
878
902
procedure zend_addref_p (z: pzval); cdecl;
@@ -1306,7 +1330,7 @@ function ZValArrayKeyDel(v: pzval; key: zend_ustr): Boolean; overload;
1306
1330
{ $IFDEF PHP7}
1307
1331
begin
1308
1332
pzs^.len := strlen(zend_pchar(key));
1309
- pzs^.val := zend_pchar(key);
1333
+ pzs^.val := estrdup( zend_pchar(key) );
1310
1334
Result := zend_hash_del_key_or_index(v.value .arr, pzs) = SUCCESS
1311
1335
end ;
1312
1336
{ $ELSE}
@@ -1326,7 +1350,7 @@ function ZValArrayKeyDel(v: pzval; idx: Integer): Boolean; overload;
1326
1350
{ $IFDEF PHP7}
1327
1351
begin
1328
1352
pzs^.len := strlen(zend_pchar(inttostr(idx)));
1329
- pzs^.val := zend_pchar(inttostr(idx));
1353
+ pzs^.val := estrdup( zend_pchar(inttostr(idx) ));
1330
1354
Result := zend_hash_del_key_or_index(v.value .arr, pzs) = SUCCESS
1331
1355
end ;
1332
1356
{ $ELSE}
@@ -2458,6 +2482,9 @@ function LoadZEND(const DllFilename: zend_ustr = PHPWin) : boolean;
2458
2482
zend_register_constant := GetProcAddress(PHPLib, ' zend_register_constant' );
2459
2483
2460
2484
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}
2461
2488
2462
2489
// -- tsrm_shutdown
2463
2490
tsrm_shutdown := GetProcAddress(PHPLib, ' tsrm_shutdown' );
@@ -2725,6 +2752,8 @@ function LoadZEND(const DllFilename: zend_ustr = PHPWin) : boolean;
2725
2752
{ $IFDEF PHP7}
2726
2753
// -- zend_parse_parameters_throw
2727
2754
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' );
2728
2757
{ $ELSE}
2729
2758
// -- zend_indent
2730
2759
zend_indent := GetProcAddress(PHPLib, ' zend_indent' );
@@ -3026,34 +3055,64 @@ function zend_get_parameters_ex(number: integer; var Params: pzval_array): integ
3026
3055
var
3027
3056
i : integer;
3028
3057
begin
3029
- SetLength(Params, number);
3058
+
3030
3059
if number = 0 then
3031
3060
begin
3032
3061
Result := SUCCESS;
3033
3062
Exit;
3034
3063
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);
3035
3071
for i := 0 to number - 1 do
3036
3072
New(Params[i]);
3037
-
3038
3073
Result := zend_get_parameters(number, number, Params);
3074
+ { $ENDIF}
3039
3075
end ;
3040
3076
3041
3077
function zend_get_parameters_my (number: integer; var Params: pzval_array; TSRMLS_DC: Pointer): integer;
3042
3078
var
3043
3079
i : integer;
3044
- p: pppzval;
3080
+
3081
+ p:
3082
+ { $IFDEF PHP7}
3083
+ pzval
3084
+ { $ELSE}
3085
+ pppzval
3086
+ { $ENDIF} ;
3045
3087
begin
3046
- SetLength(Params, number);
3047
3088
if number = 0 then
3048
3089
begin
3049
3090
Result := SUCCESS;
3050
3091
Exit;
3051
3092
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);
3052
3112
for i := 0 to number - 1 do
3053
3113
New(Params[i]);
3054
- { $IFNDEF PHP700 }
3114
+
3055
3115
p := emalloc(number * sizeOf(ppzval));
3056
- { $ENDIF}
3057
3116
Result := _zend_get_parameters_array_ex(number, p, TSRMLS_DC);
3058
3117
3059
3118
for i := 0 to number - 1 do
@@ -3064,8 +3123,9 @@ function zend_get_parameters_my(number: integer; var Params: pzval_array; TSRMLS
3064
3123
end ;
3065
3124
3066
3125
efree(p);
3126
+ { $ENDIF}
3067
3127
end ;
3068
-
3128
+ { $IFNDEF PHP7 }
3069
3129
function zend_get_parameters (ht: integer; param_count: integer; Params: array of ppzval): integer; assembler; register;
3070
3130
asm
3071
3131
push esi
@@ -3092,15 +3152,20 @@ function zend_get_parameters(ht: integer; param_count: integer; Params: array of
3092
3152
loop @toploop2
3093
3153
pop esi
3094
3154
end ;
3095
-
3155
+ { $ENDIF }
3096
3156
procedure dispose_pzval_array (Params: pzval_array);
3097
3157
var
3098
3158
i : integer;
3099
3159
begin
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}
3100
3165
if Length(Params)>0 then
3101
-
3102
3166
for i := 0 to High(Params) do
3103
3167
FreeMem(Params[i]);
3168
+ { $ENDIF}
3104
3169
Params := nil ;
3105
3170
end ;
3106
3171
@@ -3302,6 +3367,8 @@ procedure CheckZendErrors;
3302
3367
if @zend_html_puts = nil then raise EPHP4DelphiException.Create(' zend_html_puts' );
3303
3368
{ $IFDEF PHP7}
3304
3369
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' );
3305
3372
{ $ELSE}
3306
3373
if @zend_indent = nil then raise EPHP4DelphiException.Create(' zend_indent' );
3307
3374
{ $ENDIF}
@@ -3418,7 +3485,7 @@ function zend_unregister_functions(functions : {$IFDEF PHP7}P_zend_function_entr
3418
3485
break;
3419
3486
{ $IFDEF PHP7}
3420
3487
pzs^.len := strlen(ptr.fname);
3421
- pzs^.val := ptr.fname;
3488
+ pzs^.val := estrdup( ptr.fname) ;
3422
3489
zend_hash_del_key_or_index(function_table, pzs);
3423
3490
{ $ELSE}
3424
3491
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;
3614
3681
end ;
3615
3682
3616
3683
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) )
3618
3685
else
3619
3686
case { $IFDEF PHP7} z.u1.v._type{ $ELSE} z._type{ $ENDIF} of
3620
3687
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
3766
3833
Result := { $IFDEF PHP7} z.value .arr { $ELSE} z.value .ht{ $ENDIF} ;
3767
3834
end ;
3768
3835
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 } ;
3770
3837
begin
3771
- Result := z.value .obj.handle;
3838
+ Result := { $IFDEF PHP7 } z.value .obj.handlers { $ELSE } z. value .obj. handle{ $ENDIF } ;
3772
3839
end ;
3773
3840
3774
3841
function 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{
3824
3891
begin
3825
3892
{ $IFDEF PHP7}
3826
3893
pz^.len := strlen(arKey);
3827
- pz^.val := arKey;
3894
+ pz^.val := estrdup( arKey) ;
3828
3895
if Assigned(_zend_hash_add_or_update) then
3829
3896
Result := _zend_hash_add_or_update(ht, pz, pData, flag, ' ' , 0 ).u2.fe_iter_idx
3830
3897
{ $ELSE}
0 commit comments