Development of PHP extension with C

Source: Internet
Author: User
Tags zts
Function: the integer in php is a signed number, and its internal implementation is actually long, not unsignedlong. For 32-bit machines, the maximum integer that php can represent is 2 ^ 31-1, generally, the numbers larger than 2 ^ 31-1 and smaller than 2 ^ 32 can only be represented by strings. For mixedint_ext (stringin ),

Function: the integer in php is a signed number, and its internal implementation is actually long, not unsigned long. For 32-bit machines, the maximum integer that php can represent is 2 ^ 31-1, generally, the numbers larger than 2 ^ 31-1 and smaller than 2 ^ 32 can only be represented by strings. For mixed int_ext (string in), if the string in

Function: the integer in php is a signed number, and its internal implementation is actually long, not unsigned long. For 32-bit machines, the maximum integer that php can represent is 2 ^ 31-1, generally, the numbers larger than 2 ^ 31-1 and smaller than 2 ^ 32 can only be represented by strings. For mixed int_ext (string in), if the integer in the string is less than 2 ^ 31-1, an integer is returned. If it is greater than, a string is returned.

Development extension steps are as follows :( first download php source code, download here is the php-5.3.14)

1. Create an extension skeleton

cd php-5.3.14/ext./ext_skel --extname=int_ext

2. Modify compilation Parameters

cd php-5.3.14/ext/int_extvi config.m4
Remove PHP_ARG_ENABLE (int_ext, whether to enable int_ext support and
[-- Enable-int_ext Enable int_ext support]) The dnl before the two rows is changed:
1.    dnl Otherwise use enable:  2.    PHP_ARG_ENABLE(int_ext, whether to enable int_ext support,  3.    dnl Make sure that the comment is aligned:  4.    [  --enable-int_ext           Enable int_ext support])

3. Write C code

Cd php-5.3.14/ext/int_extvi php_int_ext.h # add a line of PHP_FUNCTION (int_int_ext_compiled) in PHP_FUNCTION (confirm_int_ext_compiled );
Cd php-5.3.14/ext/int_extvi int_ext.c # Add PHP_FE (int_ext, NULL) after PHP_FE (confirm_int_ext_compiled, NULL) to: 1. zend_function_entry int_ext_functions [] = {2. PHP_FE (confirm_int_ext_compiled, NULL)/* For testing, remove later. */3. PHP_FE (int_ext, NULL)/* For testing, remove later. */4. {NULL, NULL, NULL}/* Must be the last line in int_ext_functions [] */5 .};

Core code:

PHP_FUNCTION(int_ext){    char * str = NULL;    int str_len;    int argc = ZEND_NUM_ARGS();    if(zend_parse_parameters(argc TSRMLS_CC,"s",&str,&str_len) == FAILURE)        return ;    char * result;    int result_length = str_len;    result = (char *) emalloc(result_length + 1);    memcpy(result,str,result_length);    unsigned long result_num = strtoul(result, NULL, 10);    int sizeoflong  sizeof(long);    unsigned long max_long = 1 << (sizeoflong * 8 -1);    if(result_num < max_long)    {        RETURN_LONG(result_num);    }    else    {         RESULT_STRINGL(result, result_length, 0);     }}

4. Compile

cd php-5.3.14/ext/int_ext/usr/local/php/bin/pphpize./configure --with-php-config=/usr/local/php/bin/php-configmake make install
A so file will be generated:/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/int_ext.so

Modify php. ini to add extended extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613 /"

[Int_ext]

Extension = int_ext.so

5. Test

$a = int_ext("12345678900");var_dump($a);$a = int_ext("123456789");var_dump($a);

Result output:

string(11) "12345678900"int(123456789)

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.