Hilfe....
Ich versuche verzweifelt eine PHP Extension zu erstellen.
Irgendwie klappt das aber nicht. Ich kann zwar die
Dll erstellen und auch den Apache ohne Fehler starten. Die Extension wird mir dann aber nicht angezeigt (phpinfo) bzw.
extension_loaded geht auch nicht.
Was mach ich falsch?
Mein
Dll-Code sieht so aus...
Delphi-Quellcode:
library php_mydll;
uses
SysUtils, Windows, zendTypes, ZENDAPI, phpTypes, PHPAPI;
{$R *.res}
function rinit (_type : integer;
module_number : integer;
TSRMLS_DC : pointer) : integer; cdecl;
begin
Result := SUCCESS;
end;
function rshutdown (_type : integer;
module_number : integer;
TSRMLS_DC : pointer) : integer; cdecl;
begin
Result := SUCCESS;
end;
procedure php_info_module(zend_module : Pzend_module_entry;
TSRMLS_DC : pointer); cdecl;
begin
php_info_print_table_start();
php_info_print_table_row(2, PChar('extname support'), PChar('enabled'));
php_info_print_table_end();
end;
function minit (_type : integer;
module_number : integer;
TSRMLS_DC : pointer) : integer; cdecl;
begin
RESULT := SUCCESS;
end;
function mshutdown (_type : integer;
module_number : integer;
TSRMLS_DC : pointer) : integer; cdecl;
begin
RESULT := SUCCESS;
end;
procedure confirm_extname_compiled (ht : integer;
return_value : pzval;
this_ptr : pzval;
return_value_used : integer;
TSRMLS_DC : pointer); cdecl;
var arg : PChar;
str : string;
param : pzval_array;
begin
if ( not (zend_get_parameters_ex(ht, Param) = SUCCESS )) then
begin
zend_wrong_param_count(TSRMLS_DC);
Exit;
end;
arg := param[0]^.value.str.val;
str := Format(
'Congratulations! ' +
'You have successfully modified ext/%.78s/config.m4. ' +
'Module %.78s is now compiled into PHP.', ['extname', arg]
);
ZVAL_STRING(return_value, PChar(str), true);
dispose_pzval_array(param);
end;
function get_module : Pzend_module_entry; cdecl;
var moduleEntry : Tzend_module_entry;
module_entry_table : array[0..0] of zend_function_entry;
begin
if not PHPLoaded then
LoadPHP;
ModuleEntry.size := sizeof(Tzend_module_entry);
ModuleEntry.zend_api := ZEND_MODULE_API_NO;
ModuleEntry.zts := USING_ZTS;
ModuleEntry.Name := 'extname';
ModuleEntry.version := '0.0';
ModuleEntry.module_startup_func := @minit;
ModuleEntry.module_shutdown_func := @mshutdown;
ModuleEntry.request_startup_func := @rinit;
ModuleEntry.request_shutdown_func := @rshutdown;
ModuleEntry.info_func := @php_info_module;
Module_entry_table[0].fname := 'confirm_extname_compiled';
Module_entry_table[0].handler := @confirm_extname_compiled;
Module_entry_table[0].arg_info:=nil;
Module_entry_table[0].num_args:=0;
Module_entry_table[0].flags:=0;
ModuleEntry.functions := @module_entry_table[0];
ModuleEntry._type := MODULE_PERSISTENT;
Result := @ModuleEntry;
end;
exports
get_module;
end.
PHP-Version: 5.1.6
Das Thema ist ja schon etwas älter, ich hoffe mir kann trotzdem geholfen werden.
Verzweifelte Grüsse
Thorsten