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)