![]() |
PHP Extension in Delphi
Hallo zusammen,
ich versuche zur Zeit herauszufinden wie man mit Delphi Extensions für PHP schreibt. Bisher weis ich nur, dass man dazu eine .dll erstellen muss... Das Beste zum Thema war bisher eine Anleitung für Visual C++ ![]() Dann habe ich ein Toolkit (PHP4Delphi) gefunden, dass bei der Erstellung hilft, aber dass erscheint mir viel zu aufwendig, falls ich nur eine kleine Funtion benötige. Hat jemand Tips oder vielleicht sogar Codeschnipsel? wäre für jede Hilfe dankbar. |
Re: PHP Extension in Delphi
ich denke es gibt eine komponente namens phpExt. einfach mal googeln... vielleicht hab ich die auch noch wo rumligen, müsste ich mal suchen!
|
Re: PHP Extension in Delphi
Du meinst wohl PHP4Delphi. Das ganze funktioniert bestens, hab für unser Intranet bereits die eine oder andere PHP Extension entwickelt.
![]() Gruß, Marcel |
Re: PHP Extension in Delphi
Zitat:
|
Re: PHP Extension in Delphi
Das hab ich ja auch gefunden, aber bei einem kleinen Testprojekt, welches gerade mal "Hallo" zurück gibt, kam eine 400kb große .dll heraus :(
Da muss es doch einen etwas "sparsameren" Weg geben, oder? Mein nächstes Problem ist, dass ich noch nicht herausgefunden habe, wie ich mit PHP auf die Extension zugreife... Die Funktion dl('phpDll.dll'); schmeisst mir eine Fehlermeldung entgegen: Warning: dl() [function.dl]: Not supported in multithreaded Web servers - use extension=phpDll.dll in your php.ini in d:\daten\phpsource\testdll.php on line 2 und den Hinweis dieser Medung folgend, hab ich den Eintrag in der php.ini vorgenommen, aber auch dies ohne Erfolg... |
Re: PHP Extension in Delphi
Wenn du PHP als Webserver-Modul laufen lässt, musst du den Webserver nach dem Ändern der php.ini neustarten.
|
Re: PHP Extension in Delphi
Ich weiss nicht so recht: soll das eine ISAPI-dll werden? Da könnte ich helfen, ich weiss nur nicht was das mit PHP zu tun hat... und meine ISAPI-dlls werden im besten Falle ~45 KB groß, ohne großen Inhalt noch, versteht sich.
|
Re: PHP Extension in Delphi
ISAPI-dlls sind Webserver Module, wir reden hier aber von PHP Extensions.
|
Re: PHP Extension in Delphi
Ja ich kenn mich mit PHP nicht aus. Dann vergesst was ich geschrieben habe einfach *g*
|
Re: PHP Extension in Delphi
Das liegt wahrscheinlich an den Units, die du eingebunden hast. PHP-Extensions sind AFAIK "normale" DLLs, also brauchst du relativ wenig Zusatzbibliotheken (außer String-Routinen, Dateihandling etc.).
|
Re: PHP Extension in Delphi
@ Sniper: Ja habe den Webserver restartet
@ Jörn: Sniper hatte da völlig recht, keine ISAPI-dll ;) @ Chewie: Ich hab da garnix eingebunden, das hat alles das php4Delphi Toolkit gemacht Hab nun mal ein Beispiel mit der ZendAPI direkt gemacht, das wird ca 67kb groß :) Leider kann ich das ganze immernoch nicht mit PHP laden, hab in der php.ini 2 Einträge gemacht: extension_dir = "D:\entwicklung\php\ext" und extension=phpDll.dll danach den Apache restartet, aber geht scheinbar nix hier mal der php code:
Code:
und in Delphi hab ich
$module = 'extname';
if (extension_loaded($module)) { $str = "module loaded"; } else { $str = "Module $module is not compiled into PHP"; }
Code:
das ist alles aus der php4Delphi.pdf, die bei dem Toolkit dabei war
ModuleEntry.Name := 'extname';
edit: evtl noch wichtig, ich verwende PHP 5.0.2 |
Re: PHP Extension in Delphi
so, nun scheint es zu funzen :)
hab das Extension-Verzeichnis in den PATH eingetragen und die php.ini vom PHP-Verzeichnis ins Apache-Verzeichnis kopiert. falls noch jemand Tip&Tricks zum Thema hatte, immer her damit, ansonsten bin ich erstmal glücklich :D danke an alle Beteiligten ^^ |
Re: PHP Extension in Delphi
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:
PHP-Version: 5.1.6
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. Das Thema ist ja schon etwas älter, ich hoffe mir kann trotzdem geholfen werden. Verzweifelte Grüsse Thorsten |
Re: PHP Extension in Delphi
Hat keiner ne Idee?
|
Re: PHP Extension in Delphi
Sollte ich die Hoffnung aufgeben, hier dochnoch Hilfe zu bekommen?
|
DP-Maintenance
Dieses Thema wurde von "alcaeus" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Auch wenn das Thema schon aelter ist, es passt doch besser in eine Delphi-Sparte ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz