phpbar.de logo

Mailinglisten-Archive

[php] =?iso-8859-1?Q?RE:_=5Bphp=5D_RE:_=5Bphp=5D_Script_an_Kunden_weitergeben_-?= =?iso-8859-1?Q?_Mi=DFbrauch_verhindernerhindern?= =?iso-8859-1?Q?_Mi=DFbrauch_verhindernerhindern?=

[php] =?iso-8859-1?Q?RE:_=5Bphp=5D_RE:_=5Bphp=5D_Script_an_Kunden_weitergeben_-?= =?iso-8859-1?Q?_Mi=DFbrauch_verhindernerhindern?= =?iso-8859-1?Q?_Mi=DFbrauch_verhindernerhindern?=

Matthias Winkelmann winkelmann_(at)_someon.com
Tue, 5 Dec 2000 12:31:33 +0100


Hallo!

Also, erstmal legt man in /ext ein unterverzeichniss seiner Wahl (hier:
test) an. Darin erstellt man die Datei test.c mit folgendem Inhalt:

#include "php.h"
ZEND_FUNCTION(first_module);
zend_function_entry firstmod_functions[] =
{
ZEND_FE(first_module, NULL)
{NULL, NULL, NULL}
};
zend_module_entry firstmod_module_entry =
{
"First Module",
firstmod_functions,
NULL,NULL,NULL,NULL,NULL,
STANDARD_MODULE_PROPERTIES
};
#if COMPILE_DL
DLEXPORT zend_module_entry *get_module(void)
{return(&firstmod_module_entry); }
#endif
ZEND_FUNCTION(first_module)
{

zval retval;
zval *new_string;
char *string_contents = "echo 'Hier ist mein String'";
MAKE_STD_ZVAL(new_string);
new_string->type = IS_STRING;
new_string->value.str.len = strlen(string_contents);
new_string->value.str.val = estrdup(string_contents);

zend_eval_string("function test()  { echo 'test'; }", NULL);
RETURN_BOOL(1);
}

Wobei function test... natürlich jeder beliebige php code sein kann. Ich
weiß auch nicht was man in der Datei davon noch weglassen kann (den
string_contents sicher), aber ich habe recht lange rumprobiert weil ich
keine Ahnung von C habe und so klappte es dann am Ende.

Kompilieren kann man das dann mit

cc -fpic -DCOMPILE_DL=1 -I. -I.. -I../Zend -c -o test/test.lo test/test.c
cc -shared -L/usr/local/lib -rdynamic -o test/test.so test/test.lo

Dann steht test.so als Modul zur Verfügung und kann mit dl("test.so")
eingebunden werden.
Dann noch schnell first_module(); aufrufen und schon steht die Funktion
test(); zur Verfügung.
Natürlich könnte man noch mit if usw. unterscheidungen machen und jeweils
anderen Code ausführen. Auch könnte man später Funktionen ganz in C
implementieren was vielleicht auch der Performance zugute kommt.

Hoffe das ist einigermaßen verständlich,

Matthias

P.S.: Die Idee ist mir auf dem php-Kongress gekommen und den Code habe ich
aus dem allseits bekannten php4 Buch und mit Hilfe von Zeev so
zusammengestückelt.


> -----Original Message-----
> From: php-admin_(at)_php-center.de [mailto:php-admin_(at)_php-center.de]On Behalf
> Of Ron Opitz
> Sent: Tuesday, December 05, 2000 12:14 PM
> To: php_(at)_php-center.de
> Subject: Re: [php] RE: [php] Script an Kunden weitergeben - Mißbrauch
> verhindernerhindern
>
>
> Hallo Matthias,
>
> Deine Art den PHP-Code einzubetten hört sich sehr interessant an.
> Ich hätte Interesse daran. Hast Du dazu schon eine Doku oder
> ähnliches? Was sind die Voraussetzungen?
>
> Gruss Ron
>



php::bar PHP Wiki   -   Listenarchive