Explicación detallada de cómo escribir extensiones PHP en lenguaje C
1. Primero descargue el paquete de código fuente PHP. Suponga que el directorio del paquete de código fuente es: /software/php-5.2.13
1. Supongamos que el directorio del paquete de código fuente es: /software/php-5.2.13
#> cd /software/php-5.2.13/ext
2. para desarrollar una extensión llamada caleng_module. Contiene dos funciones: a-procesar la suma de dos números enteros y b-procesar la salida repetida de cadenas
1. el archivo es def. Supongamos que es: caleng_module.def
int a(int x, int y)
string b(string str, int n)
2. Generado extendiendo el esqueleto El directorio de extensión caleng_module se creará automáticamente en el directorio ext
#> ./ext_skel --extname=caleng_module --proto=caleng_module.def
3. Modifique el archivo de configuración: # > vim /software/php-5.2.13/ext/caleng_module/config.m4, elimine la etiqueta de comentario "dnl" de la siguiente línea y modifíquela de la siguiente manera:
PHP_ARG_ENABLE(misfunciones, si habilitar la compatibilidad con misfunciones,
Asegúrese de que el comentario esté alineado:
[? --enable-myfunctions? Habilitar la compatibilidad con misfunciones])
4. Mejorar las funciones a y b: #> vim /software/php-5.2.13/ext/caleng_module/caleng_module.c
PHP_FUNCTION(a)
{
int x, y, z;
int argc = ZEND_NUM_ARGS();
if (zend_parse_parameters(argc TSRMLS_CC, "ll", &x, &y ) == FALLO)
return;
z = x + y;
RETURN_LONG(z);
}
PHP_FUNCTION(b)
{
char *str = NULL;
int argc = ZEND_NUM_ARGS();
int str_len;
long n;
char *result;
char *ptr;
int result_length
if (zend_parse_parameters(argc TSRMLS_CC , "sl", &str, &str_len, &n) == FALLO)
return;
result_length = str_len * n;
resultado = (char *) emalloc(result_length + 1);
ptr = resultado;
while (n-
-) {
memcpy(ptr, str, str_len);
ptr += str_len;
}
*ptr = ' \0';
RETURN_STRINGL(resultado, result_length, 0);
}
3. Compile e instale, asumiendo que el directorio de instalación de php es: /usr/ localhost/webserver/php#>?cd?/software/php-5.2.13/ext/caleng_module
#>?/usr/localhost/webserver/php/bin/phpize
#>?./configure?--with-php-config=/usr/localhost/webserver/php/bin/php-config
#>?make
#> ?make?install
El archivo caleng_module.so ahora se generará en el directorio /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613
Agregue el archivo de configuración php.ini:?extension=caleng_module.so.
Hazlo