📄 basic_functions.c
字号:
{ if (BG(sm_allowed_env_vars)) { free(BG(sm_allowed_env_vars)); } BG(sm_allowed_env_vars) = zend_strndup(new_value, new_value_length); return SUCCESS;}PHP_INI_BEGIN() PHP_INI_ENTRY_EX("safe_mode_protected_env_vars", SAFE_MODE_PROTECTED_ENV_VARS, PHP_INI_SYSTEM, OnUpdateSafeModeProtectedEnvVars, NULL) PHP_INI_ENTRY_EX("safe_mode_allowed_env_vars", SAFE_MODE_ALLOWED_ENV_VARS, PHP_INI_SYSTEM, OnUpdateSafeModeAllowedEnvVars, NULL)PHP_INI_END()zend_module_entry basic_functions_module = { STANDARD_MODULE_HEADER, "standard", /* extension name */ basic_functions, /* function list */ PHP_MINIT(basic), /* process startup */ PHP_MSHUTDOWN(basic), /* process shutdown */ PHP_RINIT(basic), /* request startup */ PHP_RSHUTDOWN(basic), /* request shutdown */ PHP_MINFO(basic), /* extension info */ PHP_VERSION, /* extension version */ STANDARD_MODULE_PROPERTIES};#if defined(HAVE_PUTENV)static void php_putenv_destructor(putenv_entry *pe){ if (pe->previous_value) {#if _MSC_VER /* VS.Net has a bug in putenv() when setting a variable that * is already set; if the SetEnvironmentVariable() API call * fails, the Crt will double free() a string. * We try to avoid this by setting our own value first */ SetEnvironmentVariable(pe->key, "bugbug");#endif putenv(pe->previous_value); } else {# if HAVE_UNSETENV unsetenv(pe->key);# elif defined(PHP_WIN32) SetEnvironmentVariable(pe->key, NULL);# else char **env; for (env = environ; env != NULL && *env != NULL; env++) { if (!strncmp(*env, pe->key, pe->key_len) && (*env)[pe->key_len] == '=') { /* found it */ *env = ""; break; } }# endif }#ifdef HAVE_TZSET /* don't forget to reset the various libc globals that * we might have changed by an earlier call to tzset(). */ if (!strncmp(pe->key, "TZ", pe->key_len)) { tzset(); }#endif efree(pe->putenv_string); efree(pe->key);}#endifstatic void basic_globals_ctor(php_basic_globals *basic_globals_p TSRMLS_DC){ BG(rand_is_seeded) = 0; BG(mt_rand_is_seeded) = 0; BG(next) = NULL; BG(left) = -1; BG(user_tick_functions) = NULL; BG(aggregation_table) = NULL; zend_hash_init(&BG(sm_protected_env_vars), 5, NULL, NULL, 1); BG(sm_allowed_env_vars) = NULL; memset(&BG(url_adapt_state), 0, sizeof(BG(url_adapt_state))); memset(&BG(url_adapt_state_ex), 0, sizeof(BG(url_adapt_state_ex))); BG(incomplete_class) = php_create_incomplete_class(TSRMLS_C);}static void basic_globals_dtor(php_basic_globals *basic_globals_p TSRMLS_DC){ zend_hash_destroy(&BG(sm_protected_env_vars)); if (BG(sm_allowed_env_vars)) { free(BG(sm_allowed_env_vars)); } if (BG(url_adapt_state_ex).tags) { zend_hash_destroy(BG(url_adapt_state_ex).tags); free(BG(url_adapt_state_ex).tags); }}#define PHP_DOUBLE_INFINITY_HIGH 0x7ff00000#define PHP_DOUBLE_QUIET_NAN_HIGH 0xfff80000PHPAPI double php_get_nan(void){#if HAVE_HUGE_VAL_NAN return HUGE_VAL + -HUGE_VAL;#elif defined(__i386__) || defined(_X86_) || defined(ALPHA) || defined(_ALPHA) || defined(__alpha) double val = 0.0; ((php_uint32*)&val)[1] = PHP_DOUBLE_QUIET_NAN_HIGH; ((php_uint32*)&val)[0] = 0; return val;#elif HAVE_ATOF_ACCEPTS_NAN return atof("NAN");#else return 0.0/0.0;#endif}PHPAPI double php_get_inf(void){#if HAVE_HUGE_VAL_INF return HUGE_VAL;#elif defined(__i386__) || defined(_X86_) || defined(ALPHA) || defined(_ALPHA) || defined(__alpha) double val = 0.0; ((php_uint32*)&val)[1] = PHP_DOUBLE_INFINITY_HIGH; ((php_uint32*)&val)[0] = 0; return val;#elif HAVE_ATOF_ACCEPTS_INF return atof("INF");#else return 1.0/0.0;#endif}PHP_MINIT_FUNCTION(basic){#ifdef ZTS ts_allocate_id(&basic_globals_id, sizeof(php_basic_globals), (ts_allocate_ctor) basic_globals_ctor, (ts_allocate_dtor) basic_globals_dtor);#ifdef PHP_WIN32 ts_allocate_id(&php_win32_core_globals_id, sizeof(php_win32_core_globals), (ts_allocate_ctor)php_win32_core_globals_ctor, NULL);#endif#else basic_globals_ctor(&basic_globals TSRMLS_CC);#ifdef PHP_WIN32 php_win32_core_globals_ctor(&php_win32_core_globals TSRMLS_CC);#endif#endif REGISTER_LONG_CONSTANT("CONNECTION_ABORTED", PHP_CONNECTION_ABORTED, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CONNECTION_NORMAL", PHP_CONNECTION_NORMAL, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CONNECTION_TIMEOUT", PHP_CONNECTION_TIMEOUT, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("INI_USER", ZEND_INI_USER, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("INI_PERDIR", ZEND_INI_PERDIR, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("INI_SYSTEM", ZEND_INI_SYSTEM, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("INI_ALL", ZEND_INI_ALL, CONST_CS | CONST_PERSISTENT);#define REGISTER_MATH_CONSTANT(x) REGISTER_DOUBLE_CONSTANT(#x, x, CONST_CS | CONST_PERSISTENT) REGISTER_MATH_CONSTANT(M_E); REGISTER_MATH_CONSTANT(M_LOG2E); REGISTER_MATH_CONSTANT(M_LOG10E); REGISTER_MATH_CONSTANT(M_LN2); REGISTER_MATH_CONSTANT(M_LN10); REGISTER_MATH_CONSTANT(M_PI); REGISTER_MATH_CONSTANT(M_PI_2); REGISTER_MATH_CONSTANT(M_PI_4); REGISTER_MATH_CONSTANT(M_1_PI); REGISTER_MATH_CONSTANT(M_2_PI); REGISTER_MATH_CONSTANT(M_2_SQRTPI); REGISTER_MATH_CONSTANT(M_SQRT2); REGISTER_MATH_CONSTANT(M_SQRT1_2); REGISTER_DOUBLE_CONSTANT("INF", php_get_inf(), CONST_CS | CONST_PERSISTENT); REGISTER_DOUBLE_CONSTANT("NAN", php_get_nan(), CONST_CS | CONST_PERSISTENT);#if ENABLE_TEST_CLASS test_class_startup();#endif REGISTER_INI_ENTRIES(); register_phpinfo_constants(INIT_FUNC_ARGS_PASSTHRU); register_html_constants(INIT_FUNC_ARGS_PASSTHRU); register_string_constants(INIT_FUNC_ARGS_PASSTHRU); PHP_MINIT(regex) (INIT_FUNC_ARGS_PASSTHRU); PHP_MINIT(file) (INIT_FUNC_ARGS_PASSTHRU); PHP_MINIT(pack) (INIT_FUNC_ARGS_PASSTHRU); PHP_MINIT(browscap) (INIT_FUNC_ARGS_PASSTHRU); PHP_MINIT(string_filters) (INIT_FUNC_ARGS_PASSTHRU);#if defined(HAVE_LOCALECONV) && defined(ZTS) PHP_MINIT(localeconv) (INIT_FUNC_ARGS_PASSTHRU);#endif#if defined(HAVE_NL_LANGINFO) PHP_MINIT(nl_langinfo) (INIT_FUNC_ARGS_PASSTHRU);#endif#if HAVE_CRYPT PHP_MINIT(crypt) (INIT_FUNC_ARGS_PASSTHRU);#endif PHP_MINIT(lcg) (INIT_FUNC_ARGS_PASSTHRU); PHP_MINIT(dir) (INIT_FUNC_ARGS_PASSTHRU); PHP_MINIT(syslog) (INIT_FUNC_ARGS_PASSTHRU); PHP_MINIT(array) (INIT_FUNC_ARGS_PASSTHRU); PHP_MINIT(assert) (INIT_FUNC_ARGS_PASSTHRU); PHP_MINIT(url_scanner_ex) (INIT_FUNC_ARGS_PASSTHRU); PHP_MINIT(proc_open) (INIT_FUNC_ARGS_PASSTHRU); PHP_MINIT(user_streams) (INIT_FUNC_ARGS_PASSTHRU); PHP_MINIT(imagetypes) (INIT_FUNC_ARGS_PASSTHRU); php_register_url_stream_wrapper("php", &php_stream_php_wrapper TSRMLS_CC);#ifndef PHP_CURL_URL_WRAPPERS php_register_url_stream_wrapper("http", &php_stream_http_wrapper TSRMLS_CC); php_register_url_stream_wrapper("ftp", &php_stream_ftp_wrapper TSRMLS_CC);# ifdef HAVE_OPENSSL_EXT php_register_url_stream_wrapper("https", &php_stream_http_wrapper TSRMLS_CC); php_register_url_stream_wrapper("ftps", &php_stream_ftp_wrapper TSRMLS_CC);# endif#endif return SUCCESS;}PHP_MSHUTDOWN_FUNCTION(basic){#ifdef ZTS ts_free_id(basic_globals_id);#ifdef PHP_WIN32 ts_free_id(php_win32_core_globals_id);#endif#else basic_globals_dtor(&basic_globals TSRMLS_CC);#endif php_unregister_url_stream_wrapper("php" TSRMLS_CC);#ifndef PHP_CURL_URL_WRAPPERS php_unregister_url_stream_wrapper("http" TSRMLS_CC); php_unregister_url_stream_wrapper("ftp" TSRMLS_CC);# ifdef HAVE_OPENSSL_EXT php_unregister_url_stream_wrapper("https" TSRMLS_CC); php_unregister_url_stream_wrapper("ftps" TSRMLS_CC);# endif#endif UNREGISTER_INI_ENTRIES(); PHP_MSHUTDOWN(regex) (SHUTDOWN_FUNC_ARGS_PASSTHRU); PHP_MSHUTDOWN(browscap) (SHUTDOWN_FUNC_ARGS_PASSTHRU); PHP_MSHUTDOWN(array) (SHUTDOWN_FUNC_ARGS_PASSTHRU); PHP_MSHUTDOWN(assert) (SHUTDOWN_FUNC_ARGS_PASSTHRU); PHP_MSHUTDOWN(url_scanner_ex) (SHUTDOWN_FUNC_ARGS_PASSTHRU); PHP_MSHUTDOWN(file) (SHUTDOWN_FUNC_ARGS_PASSTHRU); PHP_MSHUTDOWN(string_filters) (SHUTDOWN_FUNC_ARGS_PASSTHRU);#if defined(HAVE_LOCALECONV) && defined(ZTS) PHP_MSHUTDOWN(localeconv) (SHUTDOWN_FUNC_ARGS_PASSTHRU);#endif return SUCCESS;}PHP_RINIT_FUNCTION(basic){ memset(BG(strtok_table), 0, 256); BG(strtok_string) = NULL; BG(strtok_zval) = NULL; BG(locale_string) = NULL; BG(user_compare_func_name) = NULL; BG(array_walk_func_name) = NULL;#ifdef HAVE_MMAP BG(mmap_file) = NULL;#endif BG(page_uid) = -1; BG(page_gid) = -1; BG(page_inode) = -1; BG(page_mtime) = -1;#ifdef HAVE_PUTENV if (zend_hash_init(&BG(putenv_ht), 1, NULL, (void (*)(void *)) php_putenv_destructor, 0) == FAILURE) { return FAILURE; }#endif BG(user_shutdown_function_names) = NULL; PHP_RINIT(lcg) (INIT_FUNC_ARGS_PASSTHRU); PHP_RINIT(filestat) (INIT_FUNC_ARGS_PASSTHRU); PHP_RINIT(syslog) (INIT_FUNC_ARGS_PASSTHRU); PHP_RINIT(dir) (INIT_FUNC_ARGS_PASSTHRU); PHP_RINIT(url_scanner_ex) (INIT_FUNC_ARGS_PASSTHRU); /* Reset magic_quotes_runtime */ PG(magic_quotes_runtime) = INI_BOOL("magic_quotes_runtime"); /* Default to global wrappers only */ FG(stream_wrappers) = NULL; return SUCCESS;}PHP_RSHUTDOWN_FUNCTION(basic){ if (BG(strtok_zval)) { zval_ptr_dtor(&BG(strtok_zval)); } BG(strtok_string) = NULL; BG(strtok_zval) = NULL;#ifdef HAVE_PUTENV zend_hash_destroy(&BG(putenv_ht));#endif /* Check if locale was changed and change it back to the value in startup environment */ if (BG(locale_string) != NULL) { setlocale(LC_ALL, "C"); setlocale(LC_CTYPE, ""); } STR_FREE(BG(locale_string)); BG(locale_string) = NULL; /* FG(stream_wrappers) are destroyed during php_request_shutdown() */ PHP_RSHUTDOWN(fsock) (SHUTDOWN_FUNC_ARGS_PASSTHRU); PHP_RSHUTDOWN(filestat) (SHUTDOWN_FUNC_ARGS_PASSTHRU); PHP_RSHUTDOWN(syslog) (SHUTDOWN_FUNC_ARGS_PASSTHRU); PHP_RSHUTDOWN(assert) (SHUTDOWN_FUNC_ARGS_PASSTHRU); PHP_RSHUTDOWN(url_scanner_ex) (SHUTDOWN_FUNC_ARGS_PASSTHRU); PHP_RSHUTDOWN(streams) (SHUTDOWN_FUNC_ARGS_PASSTHRU); if (BG(user_tick_functions)) { zend_llist_destroy(BG(user_tick_functions)); efree(BG(user_tick_functions)); BG(user_tick_functions) = NULL; } if (BG(aggregation_table)) { zend_hash_destroy(BG(aggregation_table)); efree(BG(aggregation_table)); BG(aggregation_table) = NULL; } #ifdef HAVE_MMAP if (BG(mmap_file)) { munmap(BG(mmap_file), BG(mmap_len)); }#endif return SUCCESS;}PHP_MINFO_FUNCTION(basic){ php_info_print_table_start(); PHP_MINFO(regex) (ZEND_MODULE_INFO_FUNC_ARGS_PASSTHRU); PHP_MINFO(dl) (ZEND_MODULE_INFO_FUNC_ARGS_PASSTHRU); PHP_MINFO(mail) (ZEND_MODULE_INFO_FUNC_ARGS_PASSTHRU); php_info_print_table_end(); PHP_MINFO(assert) (ZEND_MODULE_INFO_FUNC_ARGS_PASSTHRU);}/* {{{ proto mixed constant(string const_name) Given the name of a constant this function will return the constants associated value */PHP_FUNCTION(constant){ zval **const_name; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &const_name) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(const_name); if (!zend_get_constant(Z_STRVAL_PP(const_name), Z_STRLEN_PP(const_name), return_value TSRMLS_CC)) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't find constant %s", Z_STRVAL_PP(const_name)); RETURN_NULL(); }}/* }}} *//* {{{ proto int ip2long(string ip_address) Converts a string containing an (IPv4) Internet Protocol dotted address into a proper address */PHP_FUNCTION(ip2long){ zval **str; unsigned long int ip; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &str) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(str); if (Z_STRLEN_PP(str) == 0 || (ip = inet_addr(Z_STRVAL_PP(str))) == INADDR_NONE) { RETURN_LONG(-1); } RETURN_LONG(ntohl(ip));}/* }}} *//* {{{ proto string long2ip(int proper_address) Converts an (IPv4) Internet network address into a string in Internet standard dotted format */PHP_FUNCTION(long2ip){ zval **num; unsigned long n; struct in_addr myaddr; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(num); n = strtoul(Z_STRVAL_PP(num), NULL, 0); myaddr.s_addr = htonl(n); RETURN_STRING(inet_ntoa(myaddr), 1);}/* }}} *//******************** * System Functions * ********************//* {{{ proto string getenv(string varname) Get the value of an environment variable */PHP_FUNCTION(getenv){ char *ptr, *str; int str_len; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &str_len) == FAILURE) { RETURN_FALSE; } ptr = sapi_getenv(str, str_len TSRMLS_CC); if (! ptr) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -