Einzelnen Beitrag anzeigen

omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#13

Re: PHP Extension in Delphi

  Alt 19. Sep 2006, 12:59
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
  Mit Zitat antworten Zitat