55#include <zend_language_parser.h>
74#ifdef HAVE_ARPA_INET_H
75# include <arpa/inet.h>
92#ifdef HAVE_SYS_LOADAVG_H
93# include <sys/loadavg.h>
101# define INADDR_NONE ((zend_ulong) -1)
110PHPAPI int basic_globals_id;
120#if __has_feature(memory_sanitizer)
121# include <sanitizer/msan_interface.h>
133 char *previous_value;
139static void user_shutdown_function_dtor(
zval *
zv);
165static void php_putenv_destructor(
zval *
zv)
169 if (pe->previous_value) {
175 SetEnvironmentVariable(
ZSTR_VAL(pe->key),
"bugbug");
177 putenv(pe->previous_value);
179 efree(pe->previous_value);
184# elif defined(PHP_WIN32)
194 && (*env)[
ZSTR_LEN(pe->key)] ==
'=') {
209 free(pe->putenv_string);
210 zend_string_release(pe->key);
220 basic_globals_p->
umask = -1;
259#define BASIC_MINIT_SUBMODULE(module) \
260 if (PHP_MINIT(module)(INIT_FUNC_ARGS_PASSTHRU) != SUCCESS) {\
264#define BASIC_RINIT_SUBMODULE(module) \
265 PHP_RINIT(module)(INIT_FUNC_ARGS_PASSTHRU);
267#define BASIC_MINFO_SUBMODULE(module) \
268 PHP_MINFO(module)(ZEND_MODULE_INFO_FUNC_ARGS_PASSTHRU);
270#define BASIC_RSHUTDOWN_SUBMODULE(module) \
271 PHP_RSHUTDOWN(module)(SHUTDOWN_FUNC_ARGS_PASSTHRU);
273#define BASIC_MSHUTDOWN_SUBMODULE(module) \
274 PHP_MSHUTDOWN(module)(SHUTDOWN_FUNC_ARGS_PASSTHRU);
279 ts_allocate_id(&basic_globals_id,
sizeof(
php_basic_globals), (ts_allocate_ctor) basic_globals_ctor, (ts_allocate_dtor) basic_globals_dtor);
311#ifdef ZEND_INTRIN_SSE4_2_FUNC_PTR
315#ifdef ZEND_INTRIN_SSE4_2_PCLMUL_FUNC_PTR
319#if defined(ZEND_INTRIN_AVX2_FUNC_PTR) || defined(ZEND_INTRIN_SSSE3_FUNC_PTR)
332#ifdef PHP_CAN_SUPPORT_PROC_OPEN
355 ts_free_id(basic_globals_id);
357 ts_free_id(php_win32_core_globals_id);
390 BG(serialize_lock) = 0;
397 BG(locale_changed) = 0;
431 if (
BG(strtok_string)) {
432 zend_string_release(
BG(strtok_string));
447 if (
BG(locale_changed)) {
451 if (
BG(ctype_string)) {
471 if (
BG(user_tick_functions)) {
473 efree(
BG(user_tick_functions));
474 BG(user_tick_functions) =
NULL;
538 if (address_len == 16) {
542 if (address_len != 4) {
569 if (
strchr(address,
':')) {
573 if (!
strchr(address,
'.')) {
610 struct in_addr myaddr;
620 myaddr.s_addr = htonl(ip);
645 DWORD size = GetEnvironmentVariableW(keyw, &dummybuf, 0);
646 if (GetLastError() == ERROR_ENVVAR_NOT_FOUND) {
658 wchar_t *valw =
emalloc((
size + 1) *
sizeof(
wchar_t));
659 size = GetEnvironmentVariableW(keyw, valw,
size);
745 if (setting_len == 0 || setting[0] ==
'=') {
751 if ((
p =
strchr(setting,
'='))) {
752 pe.key = zend_string_init(setting,
p - setting, 0);
757 pe.key = zend_string_init(setting, setting_len, 0);
764 pe.previous_value =
NULL;
767 && (*env)[
ZSTR_LEN(pe.key)] ==
'=') {
770 pe.previous_value =
estrdup(*env);
772 pe.previous_value = *env;
782 if (!
p ||
putenv(pe.putenv_string) == 0) {
785 if (
putenv(pe.putenv_string) == 0) {
787 wchar_t *keyw, *valw =
NULL;
794 if (!keyw || !valw &&
value) {
796 free(pe.putenv_string);
797 zend_string_release(pe.key);
803 error_code = SetEnvironmentVariableW(keyw, valw);
812 && _wputenv_s(keyw, valw ? valw : L
"") == 0
817 zend_hash_add_mem(&
BG(putenv_ht), pe.key, &pe,
sizeof(putenv_entry));
831 free(pe.putenv_string);
832 zend_string_release(pe.key);
845static void free_argv(
char **argv,
int argc)
850 for (i = 0; i < argc; i++) {
862static void free_longopts(
opt_struct *longopts)
867 for (
p = longopts;
p &&
p->opt_char !=
'-';
p++) {
868 if (
p->opt_name !=
NULL) {
869 efree((
char *)(
p->opt_name));
881 unsigned int i,
count = 0;
882 unsigned int opts_len = (
unsigned int)
strlen(opts);
884 for (i = 0; i < opts_len; i++) {
885 if ((opts[i] >= 48 && opts[i] <= 57) ||
886 (opts[i] >= 65 && opts[i] <= 90) ||
887 (opts[i] >= 97 && opts[i] <= 122)
896 while ( (*opts >= 48 && *opts <= 57) ||
897 (*opts >= 65 && *opts <= 90) ||
898 (*opts >= 97 && *opts <= 122)
920 char opt[2] = {
'\0' };
923 size_t options_len = 0,
len;
924 char *php_optarg =
NULL;
928 size_t optname_len = 0;
960 argv = (
char **)
safe_emalloc(
sizeof(
char *), (argc + 1), 0);
965 zend_string *arg_str = zval_get_tmp_string(entry, &tmp_arg_str);
969 zend_tmp_string_release(tmp_arg_str);
999 zend_string *arg_str = zval_get_tmp_string(entry, &tmp_arg_str);
1015 zend_tmp_string_release(tmp_arg_str);
1034 while ((o =
php_getopt(argc, argv, opts, &php_optarg, &php_optind, 0, 1)) != -1) {
1051 if (php_optarg !=
NULL) {
1059 optname_len =
strlen(optname);
1060 if (!(optname_len > 1 && optname[0] ==
'0') && is_numeric_string(optname, optname_len,
NULL,
NULL, 0) ==
IS_LONG) {
1062 int optname_int = atoi(optname);
1091 free_longopts(orig_opts);
1093 free_argv(argv, argc);
1139 usleep((
unsigned int)num);
1144#ifdef HAVE_NANOSLEEP
1165 php_req.tv_sec = (time_t)
tv_sec;
1166 php_req.tv_nsec = (long)
tv_nsec;
1169 }
else if (
errno == EINTR) {
1174 }
else if (
errno == EINVAL) {
1175 zend_value_error(
"Nanoseconds was not in the range 0 to 999 999 999 or seconds was negative");
1189 uint64_t current_ns, target_ns, diff_ns;
1190 const uint64_t ns_per_sec = 1000000000;
1191 const double top_target_sec = (double)(UINT64_MAX / ns_per_sec);
1201 if (
UNEXPECTED(!(target_secs >= 0 && target_secs <= top_target_sec))) {
1206 target_ns = (uint64_t) (target_secs * ns_per_sec);
1207 current_ns = ((uint64_t) tm.tv_sec) * ns_per_sec + ((uint64_t) tm.tv_usec) * 1000;
1208 if (target_ns < current_ns) {
1213 diff_ns = target_ns - current_ns;
1214 php_req.tv_sec = (time_t) (diff_ns / ns_per_sec);
1215 php_req.tv_nsec = (long) (diff_ns % ns_per_sec);
1218 if (
errno == EINTR) {
1219 php_req.tv_sec = php_rem.tv_sec;
1220 php_req.tv_nsec = php_rem.tv_nsec;
1240#define ZVAL_SET_INI_STR(zv, val) do { \
1241 if (ZSTR_IS_INTERNED(val)) { \
1242 ZVAL_INTERNED_STR(zv, val); \
1243 } else if (ZSTR_LEN(val) == 0) { \
1244 ZVAL_EMPTY_STRING(zv); \
1245 } else if (ZSTR_LEN(val) == 1) { \
1246 ZVAL_CHAR(zv, ZSTR_VAL(val)[0]); \
1247 } else if (!(GC_FLAGS(val) & GC_PERSISTENT)) { \
1248 ZVAL_NEW_STR(zv, zend_string_copy(val)); \
1250 ZVAL_NEW_STR(zv, zend_string_init(ZSTR_VAL(val), ZSTR_LEN(val), 0)); \
1265 add_index_zval(
retval, h, &str_zv);
1331 char *message, *opt =
NULL, *headers =
NULL;
1332 size_t message_len, opt_len = 0, headers_len = 0;
1366 if (!
php_mail(opt,
"PHP error_log message", message, headers,
NULL)) {
1382 if (nbytes != message_len) {
1408 if (
PG(last_error_message)) {
1432 if (
PG(last_error_message)) {
1433 PG(last_error_type) = 0;
1434 PG(last_error_lineno) = 0;
1436 zend_string_release(
PG(last_error_message));
1437 PG(last_error_message) =
NULL;
1439 if (
PG(last_error_file)) {
1440 zend_string_release(
PG(last_error_file));
1441 PG(last_error_file) =
NULL;
1464 zend_unwrap_reference(&
retval);
1490 zend_unwrap_reference(&
retval);
1519 instanceof_function(called_scope, fci_cache.
calling_scope)) {
1525 zend_unwrap_reference(&
retval);
1552 instanceof_function(called_scope, fci_cache.
calling_scope)) {
1558 zend_unwrap_reference(&
retval);
1577 zend_object_release(fci_cache->
object);
1581void user_shutdown_function_dtor(
zval *
zv)
1586 fci_release(&shutdown_function_entry->
fci, &shutdown_function_entry->
fci_cache);
1587 efree(shutdown_function_entry);
1594 fci_release(&tick_function_entry->
fci, &tick_function_entry->
fci_cache);
1598static int user_shutdown_function_call(
zval *
zv)
1633static void run_user_tick_functions(
int tick_count,
void *
arg)
1656 zend_throw_error(
NULL,
"Registered tick function cannot be unregistered while it is being executed");
1665 if (
BG(user_shutdown_function_names)) {
1675 if (
BG(user_shutdown_function_names))
1679 BG(user_shutdown_function_names) =
NULL;
1683 BG(user_shutdown_function_names) =
NULL;
1693 uint32_t param_count = 0;
1710 if (!
BG(user_shutdown_function_names)) {
1715 zend_hash_str_update_mem(
BG(user_shutdown_function_names), function_name, function_len, shutdown_function_entry,
sizeof(
php_shutdown_function_entry));
1722 if (
BG(user_shutdown_function_names)) {
1732 if (!
BG(user_shutdown_function_names)) {
1832 char *hicompiled_string_description;
1853 efree(hicompiled_string_description);
1882 zend_string_release(errstr);
1909 char *extname =
NULL;
1910 size_t extname_len = 0, module_number = 0;
1930 module_number =
module->module_number;
1937 if (module_number != 0 && ini_entry->
module_number != module_number) {
1946 add_assoc_str(&option,
"global_value", zend_string_copy(ini_entry->
orig_value));
1947 }
else if (ini_entry->
value) {
1948 add_assoc_str(&option,
"global_value", zend_string_copy(ini_entry->
value));
1950 add_assoc_null(&option,
"global_value");
1953 if (ini_entry->
value) {
1954 add_assoc_str(&option,
"local_value", zend_string_copy(ini_entry->
value));
1956 add_assoc_null(&option,
"local_value");
1959 add_assoc_long(&option,
"access", ini_entry->
modifiable);
1963 if (ini_entry->
value) {
1977static int php_ini_check_path(
char *option_name,
size_t option_len,
char *new_option_name,
size_t new_option_len)
1979 if (option_len + 1 != new_option_len) {
1983 return !
strncmp(option_name, new_option_name, option_len);
2013 zend_string *new_value_str = zval_get_tmp_string(new_value, &new_value_tmp_str);
2015#define _CHECK_PATH(var, var_len, ini) php_ini_check_path(var, var_len, ini, sizeof(ini))
2017 if (
PG(open_basedir)) {
2026 zend_tmp_string_release(new_value_tmp_str);
2037 zend_tmp_string_release(new_value_tmp_str);
2065 old_value =
zend_ini_string(
"include_path",
sizeof(
"include_path") - 1, 0);
2143 bool arg_is_null = 1;
2163#ifdef HAVE_GETSERVBYNAME
2170 struct servent *serv;
2181 if (proto_len == 0) {
2206#ifdef HAVE_GETSERVBYPORT
2213 struct servent *serv;
2227#if __has_feature(memory_sanitizer)
2228 __msan_unpoison_string(serv->s_name);
2235#ifdef HAVE_GETPROTOBYNAME
2241 struct protoent *ent;
2258#ifdef HAVE_GETPROTOBYNUMBER
2263 struct protoent *ent;
2285 uint32_t param_count = 0;
2295 if (!
BG(user_tick_functions)) {
2318 if (!
BG(user_tick_functions)) {
2336 if (!
SG(rfc1867_uploaded_files)) {
2340 if (zend_hash_str_exists(
SG(rfc1867_uploaded_files), path, path_len)) {
2351 char *path, *new_path;
2352 size_t path_len, new_path_len;
2353 bool successful = 0;
2356 int oldmask;
int ret;
2364 if (!
SG(rfc1867_uploaded_files)) {
2368 if (!zend_hash_str_exists(
SG(rfc1867_uploaded_files), path, path_len)) {
2379 oldmask =
umask(077);
2406 switch (callback_type) {
2470 active_arr = &
BG(active_ini_file_section);
2475 php_simple_ini_parser_cb(
arg1,
arg2,
arg3, callback_type, active_arr);
2484 bool process_sections = 0;
2502 if (process_sections) {
2526 bool process_sections = 0;
2542 if (process_sections) {
2551 memcpy(
string, str, str_len);
2578#ifdef HAVE_GETLOADAVG
2586 if (getloadavg(load, 3) == -1) {
SAPI_API sapi_module_struct sapi_module
SAPI_API int sapi_flush(void)
SAPI_API char * sapi_getenv(const char *name, size_t name_len)
PHPAPI zend_class_entry * assertion_error_ce
#define _CHECK_PATH(var, var_len, ini)
#define BASIC_MINIT_SUBMODULE(module)
PHPAPI bool remove_user_shutdown_function(const char *function_name, size_t function_len)
PHPAPI bool append_user_shutdown_function(php_shutdown_function_entry *shutdown_function_entry)
struct _user_tick_function_entry user_tick_function_entry
PHPAPI void php_call_shutdown_functions(void)
#define BASIC_RSHUTDOWN_SUBMODULE(module)
zend_module_entry basic_functions_module
struct yy_buffer_state * YY_BUFFER_STATE
PHPAPI php_basic_globals basic_globals
#define BASIC_RINIT_SUBMODULE(module)
ZEND_API void php_get_highlight_struct(zend_syntax_highlighter_ini *syntax_highlighter_ini)
PHPAPI zend_string * php_getenv(const char *str, size_t str_len)
register_basic_functions_symbols(module_number)
PHPAPI double php_get_nan(void)
#define BASIC_MINFO_SUBMODULE(module)
PHPAPI int _php_error_log(int opt_err, const char *message, const char *opt, const char *headers)
PHPAPI int _php_error_log_ex(int opt_err, const char *message, size_t message_len, const char *opt, const char *headers)
PHPAPI double php_get_inf(void)
PHP_RINIT filestat(INIT_FUNC_ARGS_PASSTHRU)
PHPAPI bool register_user_shutdown_function(const char *function_name, size_t function_len, php_shutdown_function_entry *shutdown_function_entry)
php_register_incomplete_class_handlers()
#define BASIC_MSHUTDOWN_SUBMODULE(module)
PHPAPI void php_free_shutdown_functions(void)
php_info_print_table_end()
php_unregister_url_stream_wrapper("php")
#define ZVAL_SET_INI_STR(zv, val)
php_register_url_stream_wrapper("php", &php_stream_php_wrapper)
struct _php_shutdown_function_entry php_shutdown_function_entry
struct _php_basic_globals php_basic_globals
proc_open(array|string $command, array $descriptor_spec, &$pipes, ?string $cwd=null, ?array $env_vars=null, ?array $options=null)
ini_set(string $option, string|int|float|bool|null $value)
getprotobynumber(int $protocol)
call_user_func_array(callable $callback, array $args)
register_shutdown_function(callable $callback, mixed ... $args)
call_user_func(callable $callback, mixed ... $args)
ignore_user_abort(?bool $enable=null)
usleep(int $microseconds)
getenv(?string $name=null, bool $local_only=false)
pack(string $format, mixed ... $values)
is_uploaded_file(string $filename)
parse_ini_string(string $ini_string, bool $process_sections=false, int $scanner_mode=INI_SCANNER_NORMAL)
putenv(string $assignment)
file(string $filename, int $flags=0, $context=null)
setlocale(int $category, $locales,... $rest)
crypt(#[\SensitiveParameter] string $string, string $salt)
register_tick_function(callable $callback, mixed ... $args)
mail(string $to, string $subject, string $message, array|string $additional_headers=[], string $additional_params="")
forward_static_call(callable $callback, mixed ... $args)
getservbyname(string $service, string $protocol)
forward_static_call_array(callable $callback, array $args)
syslog(int $priority, string $message)
time_nanosleep(int $seconds, int $nanoseconds)
getopt(string $short_options, array $long_options=[], &$rest_index=null)
gettimeofday(bool $as_float=false)
dir(string $directory, $context=null)
getprotobyname(string $protocol)
set_include_path(string $include_path)
ini_parse_quantity(string $shorthand)
error_log(string $message, int $message_type=0, ?string $destination=null, ?string $additional_headers=null)
getservbyport(int $port, string $protocol)
php_strip_whitespace(string $filename)
move_uploaded_file(string $from, string $to)
count(Countable|array $value, int $mode=COUNT_NORMAL)
time_sleep_until(float $timestamp)
print_r(mixed $value, bool $return=false)
assert(mixed $assertion, Throwable|string|null $description=null)
unregister_tick_function(callable $callback)
parse_ini_file(string $filename, bool $process_sections=false, int $scanner_mode=INI_SCANNER_NORMAL)
ini_restore(string $option)
get_cfg_var(string $option)
strchr(string $haystack, string $needle, bool $before_needle=false)
ini_get_all(?string $extension=null, bool $details=true)
#define php_win32_cp_any_to_w(in)
#define PHP_WIN32_CP_IGNORE_LEN_P
#define php_win32_cp_w_to_any(in)
dl(string $extension_filename)
memset(ptr, 0, type->size)
PHPAPI zend_result php_copy_file_ex(const char *src, const char *dest, int src_flags)
PHPAPI int php_check_open_basedir(const char *path)
void unsetenv(const char *name)
PHPAPI const php_stream_wrapper php_stream_ftp_wrapper
int find_hash(uint32_t *mask, uint32_t count)
PHPAPI int php_getopt(int argc, char *const *argv, const opt_struct opts[], char **optarg, int *optind, int show_err, int arg_start)
void php_win32_core_globals_ctor(void *vg)
php_win32_core_globals the_php_win32_core_globals
void php_win32_core_globals_dtor(void *vg)
hash(string $algo, string $data, bool $binary=false, array $options=[])
foreach($dp as $el) foreach( $dp as $el) if( $pass2< 2) echo ""
PHPAPI const php_stream_wrapper php_stream_http_wrapper
PHPAPI bool php_mail(const char *to, const char *subject, const char *message, const char *headers, const char *extra_cmd)
PHPAPI ZEND_COLD void php_error_docref(const char *docref, int type, const char *format,...)
PHPAPI ZEND_COLD void php_log_err_with_severity(const char *log_message, int syslog_type_int)
PHPAPI char * php_get_current_user(void)
inet_ntop(AF_INET, addr, addr_str, sizeof(addr_str))
PHPAPI zend_result php_output_discard(void)
PHPAPI zend_result php_output_end(void)
PHPAPI zend_result php_output_start_default(void)
PHPAPI zend_result php_output_get_contents(zval *p)
php_info_print_table_start()
#define PHP_MSHUTDOWN_FUNCTION
#define PHP_MINIT_FUNCTION
#define PHP_CONNECTION_ABORTED
#define PHP_MINFO_FUNCTION
#define PHP_RINIT_FUNCTION
#define PHP_RSHUTDOWN_FUNCTION
unsigned const char * pos
PHPAPI const php_stream_wrapper php_stream_php_wrapper
#define PHP_GETOPT_INVALID_ARG
struct _opt_struct opt_struct
#define TRACK_VARS_SERVER
PHPAPI HashTable * php_ini_get_configuration_hash(void)
PHPAPI zval * cfg_get_entry_ex(zend_string *name)
#define PHP_INI_STAGE_RUNTIME
PHP_JSON_API size_t int options
php_json_error_code error_code
PHPAPI const php_stream_wrapper php_stream_rfc2397_wrapper
unsigned char key[REFLECTION_KEY_LEN]
#define PHP_STANDARD_VERSION
PHPAPI const php_stream_wrapper php_glob_stream_wrapper
PHPAPI php_stream_wrapper php_plain_files_wrapper
struct _php_stream php_stream
#define php_stream_close(stream)
#define STREAM_DISABLE_OPEN_BASEDIR
PHPAPI zend_result php_register_url_stream_wrapper(const char *protocol, const php_stream_wrapper *wrapper)
#define php_stream_open_wrapper(path, mode, options, opened)
#define php_stream_write(stream, buf, count)
PHPAPI void php_add_tick_function(void(*func)(int, void *), void *arg)
PHPAPI void(* php_load_environment_variables)(zval *array_ptr)
struct _php_win32_core_globals php_win32_core_globals
#define zend_hash_str_add(...)
HashTable url_adapt_session_hosts_ht
url_adapt_state_ex_t url_adapt_output_ex
HashTable url_adapt_output_hosts_ht
url_adapt_state_ex_t url_adapt_session_ex
zend_fcall_info_cache fci_cache
zend_fcall_info_cache fci_cache
zend_class_entry * calling_scope
zend_class_entry * called_scope
PHPAPI int nanosleep(const struct timespec *rqtp, struct timespec *rmtp)
ZEND_API char * zend_make_compiled_string_description(const char *name)
ZEND_API zend_string * zend_print_zval_r_to_str(zval *expr, int indent)
ZEND_API void zend_print_zval_r(zval *expr, int indent)
ZEND_API ZEND_COLD void zend_throw_error(zend_class_entry *exception_ce, const char *format,...)
ZEND_API ZEND_COLD void zend_value_error(const char *format,...)
ZEND_API ZEND_COLD void zend_error(int type, const char *format,...)
ZEND_API zend_result array_set_zval_key(HashTable *ht, zval *key, zval *value)
ZEND_API HashTable module_registry
ZEND_API void add_index_double(zval *arg, zend_ulong index, double d)
ZEND_API void zend_fcall_info_args_clear(zend_fcall_info *fci, bool free_mem)
ZEND_API zend_result zend_parse_parameters(uint32_t num_args, const char *type_spec,...)
ZEND_API void add_assoc_zval_ex(zval *arg, const char *key, size_t key_len, zval *value)
ZEND_API ZEND_COLD void zend_argument_must_not_be_empty_error(uint32_t arg_num)
ZEND_API void add_assoc_long_ex(zval *arg, const char *key, size_t key_len, zend_long n)
ZEND_API ZEND_COLD void zend_argument_value_error(uint32_t arg_num, const char *format,...)
ZEND_API void zend_fcall_info_argp(zend_fcall_info *fci, uint32_t argc, zval *argv)
ZEND_API ZEND_COLD void zend_argument_type_error(uint32_t arg_num, const char *format,...)
#define Z_PARAM_FUNC(dest_fci, dest_fcc)
#define Z_PARAM_PATH_STR(dest)
ZEND_API const zend_fcall_info empty_fcall_info
ZEND_API const zend_fcall_info_cache empty_fcall_info_cache
struct _zend_fcall_info_cache zend_fcall_info_cache
#define Z_PARAM_PATH_OR_NULL(dest, dest_len)
#define RETURN_STRINGL(s, l)
#define ZEND_PARSE_PARAMETERS_END()
#define ZEND_PARSE_PARAMETERS_NONE()
#define ZVAL_STRING(z, s)
#define Z_PARAM_STRING(dest, dest_len)
#define Z_PARAM_STR(dest)
#define Z_PARAM_STRING_OR_NULL(dest, dest_len)
#define ZEND_PARSE_PARAMETERS_START(min_num_args, max_num_args)
#define Z_PARAM_BOOL_OR_NULL(dest, is_null)
#define ZEND_TRY_ASSIGN_REF_LONG(zv, lval)
#define Z_PARAM_LONG(dest)
#define Z_PARAM_VARIADIC(spec, dest, dest_num)
struct _zend_fcall_info zend_fcall_info
#define Z_PARAM_ARRAY_HT(dest)
#define Z_PARAM_DOUBLE(dest)
#define Z_PARAM_BOOL(dest)
#define RETURN_EMPTY_STRING()
#define Z_PARAM_PATH(dest, dest_len)
#define Z_PARAM_ARRAY(dest)
#define Z_PARAM_ZVAL(dest)
ZEND_API zend_result zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache)
#define Z_PARAM_VARIADIC_WITH_NAMED(dest, dest_num, dest_named)
ZEND_API char *ZEND_FASTCALL zend_strndup(const char *s, size_t length)
#define safe_erealloc(ptr, nmemb, size, offset)
#define FREE_HASHTABLE(ht)
#define erealloc(ptr, size)
#define safe_emalloc(nmemb, size, offset)
#define ALLOC_HASHTABLE(ht)
error_reporting(?int $error_level=null)
strncmp(string $string1, string $string2, int $length)
zend_string_release_ex(func->internal_function.function_name, 0)
ZEND_API bool zend_is_auto_global(zend_string *name)
#define ZEND_FETCH_CLASS_EXCEPTION
ZEND_API void zend_destroy_file_handle(zend_file_handle *file_handle)
ZEND_API zend_result open_file_for_scanning(zend_file_handle *file_handle)
ZEND_API zval * zend_get_constant_ex(zend_string *cname, zend_class_entry *scope, uint32_t flags)
ZEND_API zend_class_entry * zend_ce_error
ZEND_API zend_class_entry * zend_get_called_scope(zend_execute_data *ex)
ZEND_API zend_class_entry * zend_get_executed_scope(void)
ZEND_API zend_result ZEND_FASTCALL zval_update_constant_ex(zval *pp, zend_class_entry *scope)
struct _zend_ini_entry zend_ini_entry
ZEND_API void ZEND_FASTCALL zend_hash_destroy(HashTable *ht)
ZEND_API void ZEND_FASTCALL zend_hash_apply(HashTable *ht, apply_func_t apply_func)
ZEND_API zval *ZEND_FASTCALL zend_hash_str_find(const HashTable *ht, const char *str, size_t len)
ZEND_API zval *ZEND_FASTCALL zend_hash_next_index_insert(HashTable *ht, zval *pData)
ZEND_API zval *ZEND_FASTCALL zend_hash_index_add_new(HashTable *ht, zend_ulong h, zval *pData)
ZEND_API zval *ZEND_FASTCALL zend_hash_add_new(HashTable *ht, zend_string *key, zval *pData)
ZEND_API zval *ZEND_FASTCALL zend_hash_index_update(HashTable *ht, zend_ulong h, zval *pData)
ZEND_API void ZEND_FASTCALL zend_array_destroy(HashTable *ht)
ZEND_API zval *ZEND_FASTCALL zend_hash_update(HashTable *ht, zend_string *key, zval *pData)
ZEND_API zend_result ZEND_FASTCALL zend_hash_del(HashTable *ht, zend_string *key)
ZEND_API zend_result ZEND_FASTCALL zend_hash_str_del(HashTable *ht, const char *str, size_t len)
ZEND_API zval *ZEND_FASTCALL zend_hash_find(const HashTable *ht, zend_string *key)
ZEND_API zval *ZEND_FASTCALL zend_hash_index_find(const HashTable *ht, zend_ulong h)
#define zend_hash_init(ht, nSize, pHashFunction, pDestructor, persistent)
#define ZEND_HASH_FOREACH_KEY_VAL(ht, _h, _key, _val)
#define ZEND_HASH_MAP_FOREACH_STR_KEY_PTR(ht, _key, _ptr)
#define ZEND_HASH_FOREACH_END()
#define ZEND_HASH_FOREACH_VAL(ht, _val)
ZEND_API void zend_strip(void)
ZEND_API zend_result highlight_file(const char *filename, zend_syntax_highlighter_ini *syntax_highlighter_ini)
zend_syntax_highlighter_ini syntax_highlighter_ini
struct _zend_syntax_highlighter_ini zend_syntax_highlighter_ini
ZEND_API void highlight_string(zend_string *str, zend_syntax_highlighter_ini *syntax_highlighter_ini, const char *str_name)
ZEND_API zend_result zend_alter_ini_entry_ex(zend_string *name, zend_string *new_value, int modify_type, int stage, bool force_change)
ZEND_API zend_result zend_alter_ini_entry_chars(zend_string *name, const char *value, size_t value_length, int modify_type, int stage)
ZEND_API zend_string * zend_ini_get_value(zend_string *name)
ZEND_API zend_result zend_restore_ini_entry(zend_string *name, int stage)
ZEND_API char * zend_ini_string(const char *name, size_t name_length, int orig)
ZEND_API zend_long zend_ini_parse_quantity(zend_string *value, zend_string **errstr)
ZEND_API void zend_ini_sort_entries(void)
ZEND_API zend_result zend_parse_ini_file(zend_file_handle *fh, bool unbuffered_errors, int scanner_mode, zend_ini_parser_cb_t ini_parser_cb, void *arg)
#define ZEND_INI_PARSER_ENTRY
void(* zend_ini_parser_cb_t)(zval *arg1, zval *arg2, zval *arg3, int callback_type, void *arg)
#define ZEND_INI_PARSER_POP_ENTRY
ZEND_API zend_result zend_parse_ini_string(const char *str, bool unbuffered_errors, int scanner_mode, zend_ini_parser_cb_t ini_parser_cb, void *arg)
#define ZEND_INI_PARSER_SECTION
struct _zend_file_handle zend_file_handle
#define ZEND_INI_SCANNER_NORMAL
ZEND_API void zend_save_lexical_state(zend_lex_state *lex_state)
struct _zend_lex_state zend_lex_state
ZEND_API void zend_restore_lexical_state(zend_lex_state *lex_state)
ZEND_API void zend_llist_destroy(zend_llist *l)
ZEND_API void zend_llist_del_element(zend_llist *l, void *element, int(*compare)(void *element1, void *element2))
ZEND_API void zend_llist_add_element(zend_llist *l, const void *element)
ZEND_API void zend_llist_init(zend_llist *l, size_t size, llist_dtor_func_t dtor, unsigned char persistent)
ZEND_API void zend_llist_apply(zend_llist *l, llist_apply_func_t func)
void(* llist_dtor_func_t)(void *)
void(* llist_apply_func_t)(void *)
struct _zend_llist zend_llist
#define ZEND_STRTOUL(s0, s1, base)
struct _zend_string zend_string
#define SHUTDOWN_FUNC_ARGS_PASSTHRU
#define INIT_FUNC_ARGS_PASSTHRU
#define ZEND_MOD_OPTIONAL(name)
struct _zend_module_dep zend_module_dep
struct _zend_module_entry zend_module_entry
#define STANDARD_MODULE_PROPERTIES
#define STANDARD_MODULE_HEADER_EX
ZEND_API int ZEND_FASTCALL zend_compare_arrays(zval *a1, zval *a2)
ZEND_API void ZEND_FASTCALL convert_to_array(zval *op)
ZEND_API int ZEND_FASTCALL zend_binary_zval_strcmp(zval *s1, zval *s2)
ZEND_API void zend_reset_lc_ctype_locale(void)
ZEND_API void zend_update_current_locale(void)
ZEND_API int ZEND_FASTCALL zend_compare_objects(zval *o1, zval *o2)
#define UNEXPECTED(condition)
struct _zend_class_entry zend_class_entry
ZEND_API void zend_stream_init_filename_ex(zend_file_handle *handle, zend_string *filename)
#define ZSTR_INIT_LITERAL(s, persistent)
#define zend_string_equals_literal(str, literal)
#define ZSTR_EMPTY_ALLOC()
#define zend_string_equals_literal_ci(str, c)
#define Z_TRY_ADDREF_P(pz)
#define Z_STRVAL_P(zval_p)
#define Z_ARRVAL_P(zval_p)
#define ZVAL_STR_COPY(z, s)
struct _zend_array HashTable
#define ZVAL_COPY_OR_DUP(z, v)
#define Z_STRLEN_P(zval_p)
ZEND_RESULT_CODE zend_result
#define ZVAL_COPY_VALUE(z, v)
ZEND_API void zval_ptr_dtor(zval *zval_ptr)
#define VCWD_RENAME(oldname, newname)
#define VCWD_UNLINK(path)
#define VCWD_CHMOD(path, mode)