1 /*
2 +----------------------------------------------------------------------+
3 | PHP Version 7 |
4 +----------------------------------------------------------------------+
5 | Copyright (c) 1997-2018 The PHP Group |
6 +----------------------------------------------------------------------+
7 | This source file is subject to version 3.01 of the PHP license, |
8 | that is bundled with this package in the file LICENSE, and is |
9 | available through the world-wide-web at the following url: |
10 | http://www.php.net/license/3_01.txt |
11 | If you did not receive a copy of the PHP license and are unable to |
12 | obtain it through the world-wide-web, please send a note to |
13 | license@php.net so we can mail you a copy immediately. |
14 +----------------------------------------------------------------------+
15 | Authors: Andi Gutmans <andi@zend.com> |
16 | Zeev Suraski <zeev@zend.com> |
17 +----------------------------------------------------------------------+
18 */
19
20 /* $Id$ */
21
22 #include "php.h"
23 #include "php_streams.h"
24 #include "php_main.h"
25 #include "php_globals.h"
26 #include "php_variables.h"
27 #include "php_ini.h"
28 #include "php_standard.h"
29 #include "php_math.h"
30 #include "php_http.h"
31 #include "php_incomplete_class.h"
32 #include "php_getopt.h"
33 #include "ext/standard/info.h"
34 #include "ext/session/php_session.h"
35 #include "zend_operators.h"
36 #include "ext/standard/php_dns.h"
37 #include "ext/standard/php_uuencode.h"
38 #include "ext/standard/php_mt_rand.h"
39
40 #ifdef PHP_WIN32
41 #include "win32/php_win32_globals.h"
42 #include "win32/time.h"
43 #endif
44
45 typedef struct yy_buffer_state *YY_BUFFER_STATE;
46
47 #include "zend.h"
48 #include "zend_ini_scanner.h"
49 #include "zend_language_scanner.h"
50 #include <zend_language_parser.h>
51
52 #include <stdarg.h>
53 #include <stdlib.h>
54 #include <math.h>
55 #include <time.h>
56 #include <stdio.h>
57
58 #ifndef PHP_WIN32
59 #include <sys/types.h>
60 #include <sys/stat.h>
61 #endif
62
63 #ifdef NETWARE
64 #include <netinet/in.h>
65 #endif
66
67 #ifndef PHP_WIN32
68 # include <netdb.h>
69 #else
70 #include "win32/inet.h"
71 #endif
72
73 #if HAVE_ARPA_INET_H
74 # include <arpa/inet.h>
75 #endif
76
77 #if HAVE_UNISTD_H
78 # include <unistd.h>
79 #endif
80
81 #if HAVE_STRING_H
82 # include <string.h>
83 #else
84 # include <strings.h>
85 #endif
86
87 #if HAVE_LOCALE_H
88 # include <locale.h>
89 #endif
90
91 #if HAVE_SYS_MMAN_H
92 # include <sys/mman.h>
93 #endif
94
95 #if HAVE_SYS_LOADAVG_H
96 # include <sys/loadavg.h>
97 #endif
98
99 #ifdef PHP_WIN32
100 # include "win32/unistd.h"
101 #endif
102
103 #ifndef INADDR_NONE
104 #define INADDR_NONE ((zend_ulong) -1)
105 #endif
106
107 #include "zend_globals.h"
108 #include "php_globals.h"
109 #include "SAPI.h"
110 #include "php_ticks.h"
111
112 #ifdef ZTS
113 PHPAPI int basic_globals_id;
114 #else
115 PHPAPI php_basic_globals basic_globals;
116 #endif
117
118 #include "php_fopen_wrappers.h"
119 #include "streamsfuncs.h"
120
121 static zend_class_entry *incomplete_class_entry = NULL;
122
123 typedef struct _user_tick_function_entry {
124 zval *arguments;
125 int arg_count;
126 int calling;
127 } user_tick_function_entry;
128
129 /* some prototypes for local functions */
130 static void user_shutdown_function_dtor(zval *zv);
131 static void user_tick_function_dtor(user_tick_function_entry *tick_function_entry);
132
133 static HashTable basic_submodules;
134
135 #undef sprintf
136
137 /* {{{ arginfo */
138 /* {{{ main/main.c */
139 ZEND_BEGIN_ARG_INFO(arginfo_set_time_limit, 0)
140 ZEND_ARG_INFO(0, seconds)
141 ZEND_END_ARG_INFO()
142 /* }}} */
143
144 /* {{{ main/sapi.c */
145 ZEND_BEGIN_ARG_INFO(arginfo_header_register_callback, 0)
146 ZEND_ARG_INFO(0, callback)
147 ZEND_END_ARG_INFO()
148 /* }}} */
149
150 /* {{{ main/output.c */
151 ZEND_BEGIN_ARG_INFO_EX(arginfo_ob_start, 0, 0, 0)
152 ZEND_ARG_INFO(0, user_function)
153 ZEND_ARG_INFO(0, chunk_size)
154 ZEND_ARG_INFO(0, flags)
155 ZEND_END_ARG_INFO()
156
157 ZEND_BEGIN_ARG_INFO(arginfo_ob_flush, 0)
158 ZEND_END_ARG_INFO()
159
160 ZEND_BEGIN_ARG_INFO(arginfo_ob_clean, 0)
161 ZEND_END_ARG_INFO()
162
163 ZEND_BEGIN_ARG_INFO(arginfo_ob_end_flush, 0)
164 ZEND_END_ARG_INFO()
165
166 ZEND_BEGIN_ARG_INFO(arginfo_ob_end_clean, 0)
167 ZEND_END_ARG_INFO()
168
169 ZEND_BEGIN_ARG_INFO(arginfo_ob_get_flush, 0)
170 ZEND_END_ARG_INFO()
171
172 ZEND_BEGIN_ARG_INFO(arginfo_ob_get_clean, 0)
173 ZEND_END_ARG_INFO()
174
175 ZEND_BEGIN_ARG_INFO(arginfo_ob_get_contents, 0)
176 ZEND_END_ARG_INFO()
177
178 ZEND_BEGIN_ARG_INFO(arginfo_ob_get_level, 0)
179 ZEND_END_ARG_INFO()
180
181 ZEND_BEGIN_ARG_INFO(arginfo_ob_get_length, 0)
182 ZEND_END_ARG_INFO()
183
184 ZEND_BEGIN_ARG_INFO(arginfo_ob_list_handlers, 0)
185 ZEND_END_ARG_INFO()
186
187 ZEND_BEGIN_ARG_INFO_EX(arginfo_ob_get_status, 0, 0, 0)
188 ZEND_ARG_INFO(0, full_status)
189 ZEND_END_ARG_INFO()
190
191 ZEND_BEGIN_ARG_INFO_EX(arginfo_ob_implicit_flush, 0, 0, 0)
192 ZEND_ARG_INFO(0, flag)
193 ZEND_END_ARG_INFO()
194
195 ZEND_BEGIN_ARG_INFO(arginfo_output_reset_rewrite_vars, 0)
196 ZEND_END_ARG_INFO()
197
198 ZEND_BEGIN_ARG_INFO(arginfo_output_add_rewrite_var, 0)
199 ZEND_ARG_INFO(0, name)
200 ZEND_ARG_INFO(0, value)
201 ZEND_END_ARG_INFO()
202 /* }}} */
203 /* {{{ main/streams/userspace.c */
204 ZEND_BEGIN_ARG_INFO_EX(arginfo_stream_wrapper_register, 0, 0, 2)
205 ZEND_ARG_INFO(0, protocol)
206 ZEND_ARG_INFO(0, classname)
207 ZEND_ARG_INFO(0, flags)
208 ZEND_END_ARG_INFO()
209
210 ZEND_BEGIN_ARG_INFO(arginfo_stream_wrapper_unregister, 0)
211 ZEND_ARG_INFO(0, protocol)
212 ZEND_END_ARG_INFO()
213
214 ZEND_BEGIN_ARG_INFO(arginfo_stream_wrapper_restore, 0)
215 ZEND_ARG_INFO(0, protocol)
216 ZEND_END_ARG_INFO()
217 /* }}} */
218 /* {{{ array.c */
219 ZEND_BEGIN_ARG_INFO_EX(arginfo_krsort, 0, 0, 1)
220 ZEND_ARG_INFO(1, arg) /* ARRAY_INFO(1, arg, 0) */
221 ZEND_ARG_INFO(0, sort_flags)
222 ZEND_END_ARG_INFO()
223
224 ZEND_BEGIN_ARG_INFO_EX(arginfo_ksort, 0, 0, 1)
225 ZEND_ARG_INFO(1, arg) /* ARRAY_INFO(1, arg, 0) */
226 ZEND_ARG_INFO(0, sort_flags)
227 ZEND_END_ARG_INFO()
228
229 ZEND_BEGIN_ARG_INFO_EX(arginfo_count, 0, 0, 1)
230 ZEND_ARG_INFO(0, var)
231 ZEND_ARG_INFO(0, mode)
232 ZEND_END_ARG_INFO()
233
234 ZEND_BEGIN_ARG_INFO(arginfo_natsort, 0)
235 ZEND_ARG_INFO(1, arg) /* ARRAY_INFO(1, arg, 0) */
236 ZEND_END_ARG_INFO()
237
238 ZEND_BEGIN_ARG_INFO(arginfo_natcasesort, 0)
239 ZEND_ARG_INFO(1, arg) /* ARRAY_INFO(1, arg, 0) */
240 ZEND_END_ARG_INFO()
241
242 ZEND_BEGIN_ARG_INFO_EX(arginfo_asort, 0, 0, 1)
243 ZEND_ARG_INFO(1, arg) /* ARRAY_INFO(1, arg, 0) */
244 ZEND_ARG_INFO(0, sort_flags)
245 ZEND_END_ARG_INFO()
246
247 ZEND_BEGIN_ARG_INFO_EX(arginfo_arsort, 0, 0, 1)
248 ZEND_ARG_INFO(1, arg) /* ARRAY_INFO(1, arg, 0) */
249 ZEND_ARG_INFO(0, sort_flags)
250 ZEND_END_ARG_INFO()
251
252 ZEND_BEGIN_ARG_INFO_EX(arginfo_sort, 0, 0, 1)
253 ZEND_ARG_INFO(1, arg) /* ARRAY_INFO(1, arg, 0) */
254 ZEND_ARG_INFO(0, sort_flags)
255 ZEND_END_ARG_INFO()
256
257 ZEND_BEGIN_ARG_INFO_EX(arginfo_rsort, 0, 0, 1)
258 ZEND_ARG_INFO(1, arg) /* ARRAY_INFO(1, arg, 0) */
259 ZEND_ARG_INFO(0, sort_flags)
260 ZEND_END_ARG_INFO()
261
262 ZEND_BEGIN_ARG_INFO(arginfo_usort, 0)
263 ZEND_ARG_INFO(1, arg) /* ARRAY_INFO(1, arg, 0) */
264 ZEND_ARG_INFO(0, cmp_function)
265 ZEND_END_ARG_INFO()
266
267 ZEND_BEGIN_ARG_INFO(arginfo_uasort, 0)
268 ZEND_ARG_INFO(1, arg) /* ARRAY_INFO(1, arg, 0) */
269 ZEND_ARG_INFO(0, cmp_function)
270 ZEND_END_ARG_INFO()
271
272 ZEND_BEGIN_ARG_INFO(arginfo_uksort, 0)
273 ZEND_ARG_INFO(1, arg) /* ARRAY_INFO(1, arg, 0) */
274 ZEND_ARG_INFO(0, cmp_function)
275 ZEND_END_ARG_INFO()
276
277 ZEND_BEGIN_ARG_INFO(arginfo_end, 0)
278 ZEND_ARG_INFO(1, arg)
279 ZEND_END_ARG_INFO()
280
281 ZEND_BEGIN_ARG_INFO(arginfo_prev, 0)
282 ZEND_ARG_INFO(1, arg)
283 ZEND_END_ARG_INFO()
284
285 ZEND_BEGIN_ARG_INFO(arginfo_next, 0)
286 ZEND_ARG_INFO(1, arg)
287 ZEND_END_ARG_INFO()
288
289 ZEND_BEGIN_ARG_INFO(arginfo_reset, 0)
290 ZEND_ARG_INFO(1, arg)
291 ZEND_END_ARG_INFO()
292
293 ZEND_BEGIN_ARG_INFO(arginfo_current, 0)
294 ZEND_ARG_INFO(0, arg)
295 ZEND_END_ARG_INFO()
296
297 ZEND_BEGIN_ARG_INFO(arginfo_key, 0)
298 ZEND_ARG_INFO(0, arg)
299 ZEND_END_ARG_INFO()
300
301 ZEND_BEGIN_ARG_INFO_EX(arginfo_min, 0, 0, 1)
302 ZEND_ARG_VARIADIC_INFO(0, args)
303 ZEND_END_ARG_INFO()
304
305 ZEND_BEGIN_ARG_INFO_EX(arginfo_max, 0, 0, 1)
306 ZEND_ARG_VARIADIC_INFO(0, args)
307 ZEND_END_ARG_INFO()
308
309 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_walk, 0, 0, 2)
310 ZEND_ARG_INFO(1, input) /* ARRAY_INFO(1, arg, 0) */
311 ZEND_ARG_INFO(0, funcname)
312 ZEND_ARG_INFO(0, userdata)
313 ZEND_END_ARG_INFO()
314
315 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_walk_recursive, 0, 0, 2)
316 ZEND_ARG_INFO(1, input) /* ARRAY_INFO(1, arg, 0) */
317 ZEND_ARG_INFO(0, funcname)
318 ZEND_ARG_INFO(0, userdata)
319 ZEND_END_ARG_INFO()
320
321 ZEND_BEGIN_ARG_INFO_EX(arginfo_in_array, 0, 0, 2)
322 ZEND_ARG_INFO(0, needle)
323 ZEND_ARG_INFO(0, haystack) /* ARRAY_INFO(0, haystack, 0) */
324 ZEND_ARG_INFO(0, strict)
325 ZEND_END_ARG_INFO()
326
327 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_search, 0, 0, 2)
328 ZEND_ARG_INFO(0, needle)
329 ZEND_ARG_INFO(0, haystack) /* ARRAY_INFO(0, haystack, 0) */
330 ZEND_ARG_INFO(0, strict)
331 ZEND_END_ARG_INFO()
332
333 ZEND_BEGIN_ARG_INFO_EX(arginfo_extract, 0, 0, 1)
334 ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, arg) /* ARRAY_INFO(0, arg, 0) */
335 ZEND_ARG_INFO(0, extract_type)
336 ZEND_ARG_INFO(0, prefix)
337 ZEND_END_ARG_INFO()
338
339 ZEND_BEGIN_ARG_INFO_EX(arginfo_compact, 0, 0, 1)
340 ZEND_ARG_VARIADIC_INFO(0, var_names)
341 ZEND_END_ARG_INFO()
342
343 ZEND_BEGIN_ARG_INFO(arginfo_array_fill, 0)
344 ZEND_ARG_INFO(0, start_key)
345 ZEND_ARG_INFO(0, num)
346 ZEND_ARG_INFO(0, val)
347 ZEND_END_ARG_INFO()
348
349 ZEND_BEGIN_ARG_INFO(arginfo_array_fill_keys, 0)
350 ZEND_ARG_INFO(0, keys) /* ARRAY_INFO(0, keys, 0) */
351 ZEND_ARG_INFO(0, val)
352 ZEND_END_ARG_INFO()
353
354 ZEND_BEGIN_ARG_INFO_EX(arginfo_range, 0, 0, 2)
355 ZEND_ARG_INFO(0, low)
356 ZEND_ARG_INFO(0, high)
357 ZEND_ARG_INFO(0, step)
358 ZEND_END_ARG_INFO()
359
360 ZEND_BEGIN_ARG_INFO(arginfo_shuffle, 0)
361 ZEND_ARG_INFO(1, arg) /* ARRAY_INFO(1, arg, 0) */
362 ZEND_END_ARG_INFO()
363
364 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_push, 0, 0, 2)
365 ZEND_ARG_INFO(1, stack) /* ARRAY_INFO(1, stack, 0) */
366 ZEND_ARG_VARIADIC_INFO(0, vars)
367 ZEND_END_ARG_INFO()
368
369 ZEND_BEGIN_ARG_INFO(arginfo_array_pop, 0)
370 ZEND_ARG_INFO(1, stack) /* ARRAY_INFO(1, stack, 0) */
371 ZEND_END_ARG_INFO()
372
373 ZEND_BEGIN_ARG_INFO(arginfo_array_shift, 0)
374 ZEND_ARG_INFO(1, stack) /* ARRAY_INFO(1, stack, 0) */
375 ZEND_END_ARG_INFO()
376
377 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_unshift, 0, 0, 2)
378 ZEND_ARG_INFO(1, stack) /* ARRAY_INFO(1, stack, 0) */
379 ZEND_ARG_VARIADIC_INFO(0, vars)
380 ZEND_END_ARG_INFO()
381
382 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_splice, 0, 0, 2)
383 ZEND_ARG_INFO(1, arg) /* ARRAY_INFO(1, arg, 0) */
384 ZEND_ARG_INFO(0, offset)
385 ZEND_ARG_INFO(0, length)
386 ZEND_ARG_INFO(0, replacement) /* ARRAY_INFO(0, arg, 1) */
387 ZEND_END_ARG_INFO()
388
389 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_slice, 0, 0, 2)
390 ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(1, arg, 0) */
391 ZEND_ARG_INFO(0, offset)
392 ZEND_ARG_INFO(0, length)
393 ZEND_ARG_INFO(0, preserve_keys)
394 ZEND_END_ARG_INFO()
395
396 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_merge, 0, 0, 1)
397 ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg, 0) */
398 ZEND_ARG_VARIADIC_INFO(0, arrays)
399 ZEND_END_ARG_INFO()
400
401 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_merge_recursive, 0, 0, 1)
402 ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg, 0) */
403 ZEND_ARG_VARIADIC_INFO(0, arrays)
404 ZEND_END_ARG_INFO()
405
406 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_replace, 0, 0, 1)
407 ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg, 0) */
408 ZEND_ARG_VARIADIC_INFO(0, arrays)
409 ZEND_END_ARG_INFO()
410
411 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_replace_recursive, 0, 0, 1)
412 ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg, 0) */
413 ZEND_ARG_VARIADIC_INFO(0, arrays)
414 ZEND_END_ARG_INFO()
415
416 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_keys, 0, 0, 1)
417 ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
418 ZEND_ARG_INFO(0, search_value)
419 ZEND_ARG_INFO(0, strict)
420 ZEND_END_ARG_INFO()
421
422 ZEND_BEGIN_ARG_INFO(arginfo_array_values, 0)
423 ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
424 ZEND_END_ARG_INFO()
425
426 ZEND_BEGIN_ARG_INFO(arginfo_array_count_values, 0)
427 ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
428 ZEND_END_ARG_INFO()
429
430 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_column, 0, 0, 2)
431 ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
432 ZEND_ARG_INFO(0, column_key)
433 ZEND_ARG_INFO(0, index_key)
434 ZEND_END_ARG_INFO()
435
436 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_reverse, 0, 0, 1)
437 ZEND_ARG_INFO(0, input) /* ARRAY_INFO(0, arg, 0) */
438 ZEND_ARG_INFO(0, preserve_keys)
439 ZEND_END_ARG_INFO()
440
441 ZEND_BEGIN_ARG_INFO(arginfo_array_pad, 0)
442 ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
443 ZEND_ARG_INFO(0, pad_size)
444 ZEND_ARG_INFO(0, pad_value)
445 ZEND_END_ARG_INFO()
446
447 ZEND_BEGIN_ARG_INFO(arginfo_array_flip, 0)
448 ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
449 ZEND_END_ARG_INFO()
450
451 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_change_key_case, 0, 0, 1)
452 ZEND_ARG_INFO(0, input) /* ARRAY_INFO(0, arg, 0) */
453 ZEND_ARG_INFO(0, case)
454 ZEND_END_ARG_INFO()
455
456 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_unique, 0, 0, 1)
457 ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
458 ZEND_ARG_INFO(0, flags)
459 ZEND_END_ARG_INFO()
460
461 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_intersect_key, 0, 0, 2)
462 ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
463 ZEND_ARG_VARIADIC_INFO(0, arrays)
464 ZEND_END_ARG_INFO()
465
466 ZEND_BEGIN_ARG_INFO(arginfo_array_intersect_ukey, 0)
467 ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
468 ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg2, 0) */
469 ZEND_ARG_INFO(0, callback_key_compare_func)
470 ZEND_END_ARG_INFO()
471
472 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_intersect, 0, 0, 2)
473 ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
474 ZEND_ARG_VARIADIC_INFO(0, arrays)
475 ZEND_END_ARG_INFO()
476
477 ZEND_BEGIN_ARG_INFO(arginfo_array_uintersect, 0)
478 ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
479 ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg2, 0) */
480 ZEND_ARG_INFO(0, callback_data_compare_func)
481 ZEND_END_ARG_INFO()
482
483 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_intersect_assoc, 0, 0, 2)
484 ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
485 ZEND_ARG_VARIADIC_INFO(0, arrays)
486 ZEND_END_ARG_INFO()
487
488 ZEND_BEGIN_ARG_INFO(arginfo_array_uintersect_assoc, 0)
489 ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
490 ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg2, 0) */
491 ZEND_ARG_INFO(0, callback_data_compare_func)
492 ZEND_END_ARG_INFO()
493
494 ZEND_BEGIN_ARG_INFO(arginfo_array_intersect_uassoc, 0)
495 ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
496 ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg2, 0) */
497 ZEND_ARG_INFO(0, callback_key_compare_func)
498 ZEND_END_ARG_INFO()
499
500 ZEND_BEGIN_ARG_INFO(arginfo_array_uintersect_uassoc, 0)
501 ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
502 ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg2, 0) */
503 ZEND_ARG_INFO(0, callback_data_compare_func)
504 ZEND_ARG_INFO(0, callback_key_compare_func)
505 ZEND_END_ARG_INFO()
506
507 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_diff_key, 0, 0, 2)
508 ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
509 ZEND_ARG_VARIADIC_INFO(0, arrays)
510 ZEND_END_ARG_INFO()
511
512 ZEND_BEGIN_ARG_INFO(arginfo_array_diff_ukey, 0)
513 ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
514 ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg2, 0) */
515 ZEND_ARG_INFO(0, callback_key_comp_func)
516 ZEND_END_ARG_INFO()
517
518 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_diff, 0, 0, 2)
519 ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
520 ZEND_ARG_VARIADIC_INFO(0, arrays)
521 ZEND_END_ARG_INFO()
522
523 ZEND_BEGIN_ARG_INFO(arginfo_array_udiff, 0)
524 ZEND_ARG_INFO(0, arr1)
525 ZEND_ARG_INFO(0, arr2)
526 ZEND_ARG_INFO(0, callback_data_comp_func)
527 ZEND_END_ARG_INFO()
528
529 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_diff_assoc, 0, 0, 2)
530 ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
531 ZEND_ARG_VARIADIC_INFO(0, arrays)
532 ZEND_END_ARG_INFO()
533
534 ZEND_BEGIN_ARG_INFO(arginfo_array_diff_uassoc, 0)
535 ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
536 ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg2, 0) */
537 ZEND_ARG_INFO(0, callback_data_comp_func)
538 ZEND_END_ARG_INFO()
539
540 ZEND_BEGIN_ARG_INFO(arginfo_array_udiff_assoc, 0)
541 ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
542 ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg2, 0) */
543 ZEND_ARG_INFO(0, callback_key_comp_func)
544 ZEND_END_ARG_INFO()
545
546 ZEND_BEGIN_ARG_INFO(arginfo_array_udiff_uassoc, 0)
547 ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
548 ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg2, 0) */
549 ZEND_ARG_INFO(0, callback_data_comp_func)
550 ZEND_ARG_INFO(0, callback_key_comp_func)
551 ZEND_END_ARG_INFO()
552
553 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_multisort, 0, 0, 1)
554 ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, arr1) /* ARRAY_INFO(0, arg1, 0) */
555 ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, sort_order)
556 ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, sort_flags)
557 ZEND_ARG_VARIADIC_INFO(ZEND_SEND_PREFER_REF, arr2)
558 ZEND_END_ARG_INFO()
559
560 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_rand, 0, 0, 1)
561 ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
562 ZEND_ARG_INFO(0, num_req)
563 ZEND_END_ARG_INFO()
564
565 ZEND_BEGIN_ARG_INFO(arginfo_array_sum, 0)
566 ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
567 ZEND_END_ARG_INFO()
568
569 ZEND_BEGIN_ARG_INFO(arginfo_array_product, 0)
570 ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
571 ZEND_END_ARG_INFO()
572
573 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_reduce, 0, 0, 2)
574 ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
575 ZEND_ARG_INFO(0, callback)
576 ZEND_ARG_INFO(0, initial)
577 ZEND_END_ARG_INFO()
578
579 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_filter, 0, 0, 1)
580 ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
581 ZEND_ARG_INFO(0, callback)
582 ZEND_ARG_INFO(0, use_keys)
583 ZEND_END_ARG_INFO()
584
585 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_map, 0, 0, 2)
586 ZEND_ARG_INFO(0, callback)
587 ZEND_ARG_VARIADIC_INFO(0, arrays)
588 ZEND_END_ARG_INFO()
589
590 ZEND_BEGIN_ARG_INFO(arginfo_array_key_exists, 0)
591 ZEND_ARG_INFO(0, key)
592 ZEND_ARG_INFO(0, search)
593 ZEND_END_ARG_INFO()
594
595 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_chunk, 0, 0, 2)
596 ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
597 ZEND_ARG_INFO(0, size)
598 ZEND_ARG_INFO(0, preserve_keys)
599 ZEND_END_ARG_INFO()
600
601 ZEND_BEGIN_ARG_INFO(arginfo_array_combine, 0)
602 ZEND_ARG_INFO(0, keys) /* ARRAY_INFO(0, keys, 0) */
603 ZEND_ARG_INFO(0, values) /* ARRAY_INFO(0, values, 0) */
604 ZEND_END_ARG_INFO()
605 /* }}} */
606 /* {{{ basic_functions.c */
607 ZEND_BEGIN_ARG_INFO(arginfo_get_magic_quotes_gpc, 0)
608 ZEND_END_ARG_INFO()
609
610 ZEND_BEGIN_ARG_INFO(arginfo_get_magic_quotes_runtime, 0)
611 ZEND_END_ARG_INFO()
612
613 ZEND_BEGIN_ARG_INFO(arginfo_constant, 0)
614 ZEND_ARG_INFO(0, const_name)
615 ZEND_END_ARG_INFO()
616
617 #ifdef HAVE_INET_NTOP
618 ZEND_BEGIN_ARG_INFO(arginfo_inet_ntop, 0)
619 ZEND_ARG_INFO(0, in_addr)
620 ZEND_END_ARG_INFO()
621 #endif
622
623 #ifdef HAVE_INET_PTON
624 ZEND_BEGIN_ARG_INFO(arginfo_inet_pton, 0)
625 ZEND_ARG_INFO(0, ip_address)
626 ZEND_END_ARG_INFO()
627 #endif
628
629 ZEND_BEGIN_ARG_INFO(arginfo_ip2long, 0)
630 ZEND_ARG_INFO(0, ip_address)
631 ZEND_END_ARG_INFO()
632
633 ZEND_BEGIN_ARG_INFO(arginfo_long2ip, 0)
634 ZEND_ARG_INFO(0, proper_address)
635 ZEND_END_ARG_INFO()
636
637 ZEND_BEGIN_ARG_INFO_EX(arginfo_getenv, 0, 0, 0)
638 ZEND_ARG_INFO(0, varname)
639 ZEND_ARG_INFO(0, local_only)
640 ZEND_END_ARG_INFO()
641
642 #ifdef HAVE_PUTENV
643 ZEND_BEGIN_ARG_INFO(arginfo_putenv, 0)
644 ZEND_ARG_INFO(0, setting)
645 ZEND_END_ARG_INFO()
646 #endif
647
648 ZEND_BEGIN_ARG_INFO_EX(arginfo_getopt, 0, 0, 1)
649 ZEND_ARG_INFO(0, options)
650 ZEND_ARG_INFO(0, opts) /* ARRAY_INFO(0, opts, 1) */
651 ZEND_ARG_INFO(1, optind)
652 ZEND_END_ARG_INFO()
653
654 ZEND_BEGIN_ARG_INFO(arginfo_flush, 0)
655 ZEND_END_ARG_INFO()
656
657 ZEND_BEGIN_ARG_INFO(arginfo_sleep, 0)
658 ZEND_ARG_INFO(0, seconds)
659 ZEND_END_ARG_INFO()
660
661 ZEND_BEGIN_ARG_INFO(arginfo_usleep, 0)
662 ZEND_ARG_INFO(0, micro_seconds)
663 ZEND_END_ARG_INFO()
664
665 #if HAVE_NANOSLEEP
666 ZEND_BEGIN_ARG_INFO(arginfo_time_nanosleep, 0)
667 ZEND_ARG_INFO(0, seconds)
668 ZEND_ARG_INFO(0, nanoseconds)
669 ZEND_END_ARG_INFO()
670
671 ZEND_BEGIN_ARG_INFO(arginfo_time_sleep_until, 0)
672 ZEND_ARG_INFO(0, timestamp)
673 ZEND_END_ARG_INFO()
674 #endif
675
676 ZEND_BEGIN_ARG_INFO(arginfo_get_current_user, 0)
677 ZEND_END_ARG_INFO()
678
679 ZEND_BEGIN_ARG_INFO(arginfo_get_cfg_var, 0)
680 ZEND_ARG_INFO(0, option_name)
681 ZEND_END_ARG_INFO()
682
683 ZEND_BEGIN_ARG_INFO_EX(arginfo_error_log, 0, 0, 1)
684 ZEND_ARG_INFO(0, message)
685 ZEND_ARG_INFO(0, message_type)
686 ZEND_ARG_INFO(0, destination)
687 ZEND_ARG_INFO(0, extra_headers)
688 ZEND_END_ARG_INFO()
689
690 ZEND_BEGIN_ARG_INFO_EX(arginfo_error_get_last, 0, 0, 0)
691 ZEND_END_ARG_INFO()
692
693 ZEND_BEGIN_ARG_INFO_EX(arginfo_error_clear_last, 0, 0, 0)
694 ZEND_END_ARG_INFO()
695
696 ZEND_BEGIN_ARG_INFO_EX(arginfo_call_user_func, 0, 0, 1)
697 ZEND_ARG_INFO(0, function_name)
698 ZEND_ARG_VARIADIC_INFO(0, parameters)
699 ZEND_END_ARG_INFO()
700
701 ZEND_BEGIN_ARG_INFO_EX(arginfo_call_user_func_array, 0, 0, 2)
702 ZEND_ARG_INFO(0, function_name)
703 ZEND_ARG_INFO(0, parameters) /* ARRAY_INFO(0, parameters, 1) */
704 ZEND_END_ARG_INFO()
705
706 ZEND_BEGIN_ARG_INFO_EX(arginfo_forward_static_call, 0, 0, 1)
707 ZEND_ARG_INFO(0, function_name)
708 ZEND_ARG_VARIADIC_INFO(0, parameters)
709 ZEND_END_ARG_INFO()
710
711 ZEND_BEGIN_ARG_INFO_EX(arginfo_forward_static_call_array, 0, 0, 2)
712 ZEND_ARG_INFO(0, function_name)
713 ZEND_ARG_INFO(0, parameters) /* ARRAY_INFO(0, parameters, 1) */
714 ZEND_END_ARG_INFO()
715
716 ZEND_BEGIN_ARG_INFO_EX(arginfo_register_shutdown_function, 0, 0, 1)
717 ZEND_ARG_INFO(0, function_name)
718 ZEND_ARG_VARIADIC_INFO(0, parameters)
719 ZEND_END_ARG_INFO()
720
721 ZEND_BEGIN_ARG_INFO_EX(arginfo_highlight_file, 0, 0, 1)
722 ZEND_ARG_INFO(0, file_name)
723 ZEND_ARG_INFO(0, return)
724 ZEND_END_ARG_INFO()
725
726 ZEND_BEGIN_ARG_INFO(arginfo_php_strip_whitespace, 0)
727 ZEND_ARG_INFO(0, file_name)
728 ZEND_END_ARG_INFO()
729
730 ZEND_BEGIN_ARG_INFO_EX(arginfo_highlight_string, 0, 0, 1)
731 ZEND_ARG_INFO(0, string)
732 ZEND_ARG_INFO(0, return)
733 ZEND_END_ARG_INFO()
734
735 ZEND_BEGIN_ARG_INFO(arginfo_ini_get, 0)
736 ZEND_ARG_INFO(0, varname)
737 ZEND_END_ARG_INFO()
738
739 ZEND_BEGIN_ARG_INFO_EX(arginfo_ini_get_all, 0, 0, 0)
740 ZEND_ARG_INFO(0, extension)
741 ZEND_ARG_INFO(0, details)
742 ZEND_END_ARG_INFO()
743
744 ZEND_BEGIN_ARG_INFO(arginfo_ini_set, 0)
745 ZEND_ARG_INFO(0, varname)
746 ZEND_ARG_INFO(0, newvalue)
747 ZEND_END_ARG_INFO()
748
749 ZEND_BEGIN_ARG_INFO(arginfo_ini_restore, 0)
750 ZEND_ARG_INFO(0, varname)
751 ZEND_END_ARG_INFO()
752
753 ZEND_BEGIN_ARG_INFO(arginfo_set_include_path, 0)
754 ZEND_ARG_INFO(0, new_include_path)
755 ZEND_END_ARG_INFO()
756
757 ZEND_BEGIN_ARG_INFO(arginfo_get_include_path, 0)
758 ZEND_END_ARG_INFO()
759
760 ZEND_BEGIN_ARG_INFO(arginfo_restore_include_path, 0)
761 ZEND_END_ARG_INFO()
762
763 ZEND_BEGIN_ARG_INFO_EX(arginfo_print_r, 0, 0, 1)
764 ZEND_ARG_INFO(0, var)
765 ZEND_ARG_INFO(0, return)
766 ZEND_END_ARG_INFO()
767
768 ZEND_BEGIN_ARG_INFO(arginfo_connection_aborted, 0)
769 ZEND_END_ARG_INFO()
770
771 ZEND_BEGIN_ARG_INFO(arginfo_connection_status, 0)
772 ZEND_END_ARG_INFO()
773
774 ZEND_BEGIN_ARG_INFO_EX(arginfo_ignore_user_abort, 0, 0, 0)
775 ZEND_ARG_INFO(0, value)
776 ZEND_END_ARG_INFO()
777
778 #if HAVE_GETSERVBYNAME
779 ZEND_BEGIN_ARG_INFO(arginfo_getservbyname, 0)
780 ZEND_ARG_INFO(0, service)
781 ZEND_ARG_INFO(0, protocol)
782 ZEND_END_ARG_INFO()
783 #endif
784
785 #if HAVE_GETSERVBYPORT
786 ZEND_BEGIN_ARG_INFO(arginfo_getservbyport, 0)
787 ZEND_ARG_INFO(0, port)
788 ZEND_ARG_INFO(0, protocol)
789 ZEND_END_ARG_INFO()
790 #endif
791
792 #if HAVE_GETPROTOBYNAME
793 ZEND_BEGIN_ARG_INFO(arginfo_getprotobyname, 0)
794 ZEND_ARG_INFO(0, name)
795 ZEND_END_ARG_INFO()
796 #endif
797
798 #if HAVE_GETPROTOBYNUMBER
799 ZEND_BEGIN_ARG_INFO(arginfo_getprotobynumber, 0)
800 ZEND_ARG_INFO(0, proto)
801 ZEND_END_ARG_INFO()
802 #endif
803
804 ZEND_BEGIN_ARG_INFO_EX(arginfo_register_tick_function, 0, 0, 1)
805 ZEND_ARG_INFO(0, function_name)
806 ZEND_ARG_VARIADIC_INFO(0, parameters)
807 ZEND_END_ARG_INFO()
808
809 ZEND_BEGIN_ARG_INFO(arginfo_unregister_tick_function, 0)
810 ZEND_ARG_INFO(0, function_name)
811 ZEND_END_ARG_INFO()
812
813 ZEND_BEGIN_ARG_INFO(arginfo_is_uploaded_file, 0)
814 ZEND_ARG_INFO(0, path)
815 ZEND_END_ARG_INFO()
816
817 ZEND_BEGIN_ARG_INFO(arginfo_move_uploaded_file, 0)
818 ZEND_ARG_INFO(0, path)
819 ZEND_ARG_INFO(0, new_path)
820 ZEND_END_ARG_INFO()
821
822 ZEND_BEGIN_ARG_INFO_EX(arginfo_parse_ini_file, 0, 0, 1)
823 ZEND_ARG_INFO(0, filename)
824 ZEND_ARG_INFO(0, process_sections)
825 ZEND_ARG_INFO(0, scanner_mode)
826 ZEND_END_ARG_INFO()
827
828 ZEND_BEGIN_ARG_INFO_EX(arginfo_parse_ini_string, 0, 0, 1)
829 ZEND_ARG_INFO(0, ini_string)
830 ZEND_ARG_INFO(0, process_sections)
831 ZEND_ARG_INFO(0, scanner_mode)
832 ZEND_END_ARG_INFO()
833
834 #if ZEND_DEBUG
835 ZEND_BEGIN_ARG_INFO(arginfo_config_get_hash, 0)
836 ZEND_END_ARG_INFO()
837 #endif
838
839 #ifdef HAVE_GETLOADAVG
840 ZEND_BEGIN_ARG_INFO(arginfo_sys_getloadavg, 0)
841 ZEND_END_ARG_INFO()
842 #endif
843 /* }}} */
844 /* {{{ assert.c */
845 ZEND_BEGIN_ARG_INFO_EX(arginfo_assert, 0, 0, 1)
846 ZEND_ARG_INFO(0, assertion)
847 ZEND_ARG_INFO(0, description)
848 ZEND_END_ARG_INFO()
849
850 ZEND_BEGIN_ARG_INFO_EX(arginfo_assert_options, 0, 0, 1)
851 ZEND_ARG_INFO(0, what)
852 ZEND_ARG_INFO(0, value)
853 ZEND_END_ARG_INFO()
854 /* }}} */
855 /* {{{ base64.c */
856 ZEND_BEGIN_ARG_INFO(arginfo_base64_encode, 0)
857 ZEND_ARG_INFO(0, str)
858 ZEND_END_ARG_INFO()
859
860 ZEND_BEGIN_ARG_INFO_EX(arginfo_base64_decode, 0, 0, 1)
861 ZEND_ARG_INFO(0, str)
862 ZEND_ARG_INFO(0, strict)
863 ZEND_END_ARG_INFO()
864
865 /* }}} */
866 /* {{{ browscap.c */
867 ZEND_BEGIN_ARG_INFO_EX(arginfo_get_browser, 0, 0, 0)
868 ZEND_ARG_INFO(0, browser_name)
869 ZEND_ARG_INFO(0, return_array)
870 ZEND_END_ARG_INFO()
871 /* }}} */
872 /* {{{ crc32.c */
873 ZEND_BEGIN_ARG_INFO(arginfo_crc32, 0)
874 ZEND_ARG_INFO(0, str)
875 ZEND_END_ARG_INFO()
876
877 /* }}} */
878 /* {{{ crypt.c */
879 ZEND_BEGIN_ARG_INFO_EX(arginfo_crypt, 0, 0, 1)
880 ZEND_ARG_INFO(0, str)
881 ZEND_ARG_INFO(0, salt)
882 ZEND_END_ARG_INFO()
883 /* }}} */
884 /* {{{ cyr_convert.c */
885 ZEND_BEGIN_ARG_INFO(arginfo_convert_cyr_string, 0)
886 ZEND_ARG_INFO(0, str)
887 ZEND_ARG_INFO(0, from)
888 ZEND_ARG_INFO(0, to)
889 ZEND_END_ARG_INFO()
890
891 /* }}} */
892 /* {{{ datetime.c */
893 #if HAVE_STRPTIME
894 ZEND_BEGIN_ARG_INFO(arginfo_strptime, 0)
895 ZEND_ARG_INFO(0, timestamp)
896 ZEND_ARG_INFO(0, format)
897 ZEND_END_ARG_INFO()
898 #endif
899 /* }}} */
900 /* {{{ dir.c */
901 ZEND_BEGIN_ARG_INFO_EX(arginfo_opendir, 0, 0, 1)
902 ZEND_ARG_INFO(0, path)
903 ZEND_ARG_INFO(0, context)
904 ZEND_END_ARG_INFO()
905
906 ZEND_BEGIN_ARG_INFO_EX(arginfo_dir, 0, 0, 1)
907 ZEND_ARG_INFO(0, directory)
908 ZEND_ARG_INFO(0, context)
909 ZEND_END_ARG_INFO()
910
911 ZEND_BEGIN_ARG_INFO_EX(arginfo_closedir, 0, 0, 0)
912 ZEND_ARG_INFO(0, dir_handle)
913 ZEND_END_ARG_INFO()
914
915 #if defined(HAVE_CHROOT) && !defined(ZTS) && ENABLE_CHROOT_FUNC
916 ZEND_BEGIN_ARG_INFO(arginfo_chroot, 0)
917 ZEND_ARG_INFO(0, directory)
918 ZEND_END_ARG_INFO()
919 #endif
920
921 ZEND_BEGIN_ARG_INFO(arginfo_chdir, 0)
922 ZEND_ARG_INFO(0, directory)
923 ZEND_END_ARG_INFO()
924
925 ZEND_BEGIN_ARG_INFO(arginfo_getcwd, 0)
926 ZEND_END_ARG_INFO()
927
928 ZEND_BEGIN_ARG_INFO_EX(arginfo_rewinddir, 0, 0, 0)
929 ZEND_ARG_INFO(0, dir_handle)
930 ZEND_END_ARG_INFO()
931
932 ZEND_BEGIN_ARG_INFO_EX(arginfo_readdir, 0, 0, 0)
933 ZEND_ARG_INFO(0, dir_handle)
934 ZEND_END_ARG_INFO()
935
936 #ifdef HAVE_GLOB
937 ZEND_BEGIN_ARG_INFO_EX(arginfo_glob, 0, 0, 1)
938 ZEND_ARG_INFO(0, pattern)
939 ZEND_ARG_INFO(0, flags)
940 ZEND_END_ARG_INFO()
941 #endif
942
943 ZEND_BEGIN_ARG_INFO_EX(arginfo_scandir, 0, 0, 1)
944 ZEND_ARG_INFO(0, dir)
945 ZEND_ARG_INFO(0, sorting_order)
946 ZEND_ARG_INFO(0, context)
947 ZEND_END_ARG_INFO()
948 /* }}} */
949 /* {{{ dns.c */
950 ZEND_BEGIN_ARG_INFO(arginfo_gethostbyaddr, 0)
951 ZEND_ARG_INFO(0, ip_address)
952 ZEND_END_ARG_INFO()
953
954 ZEND_BEGIN_ARG_INFO(arginfo_gethostbyname, 0)
955 ZEND_ARG_INFO(0, hostname)
956 ZEND_END_ARG_INFO()
957
958 ZEND_BEGIN_ARG_INFO(arginfo_gethostbynamel, 0)
959 ZEND_ARG_INFO(0, hostname)
960 ZEND_END_ARG_INFO()
961
962 #ifdef HAVE_GETHOSTNAME
963 ZEND_BEGIN_ARG_INFO(arginfo_gethostname, 0)
964 ZEND_END_ARG_INFO()
965 #endif
966
967 #if defined(PHP_WIN32) || (HAVE_DNS_SEARCH_FUNC && !(defined(__BEOS__) || defined(NETWARE)))
968 ZEND_BEGIN_ARG_INFO_EX(arginfo_dns_check_record, 0, 0, 1)
969 ZEND_ARG_INFO(0, host)
970 ZEND_ARG_INFO(0, type)
971 ZEND_END_ARG_INFO()
972
973 # if defined(PHP_WIN32) || HAVE_FULL_DNS_FUNCS
974 ZEND_BEGIN_ARG_INFO_EX(arginfo_dns_get_record, 0, 0, 1)
975 ZEND_ARG_INFO(0, hostname)
976 ZEND_ARG_INFO(0, type)
977 ZEND_ARG_ARRAY_INFO(1, authns, 1)
978 ZEND_ARG_ARRAY_INFO(1, addtl, 1)
979 ZEND_ARG_INFO(0, raw)
980 ZEND_END_ARG_INFO()
981
982 ZEND_BEGIN_ARG_INFO_EX(arginfo_dns_get_mx, 0, 0, 2)
983 ZEND_ARG_INFO(0, hostname)
984 ZEND_ARG_INFO(1, mxhosts) /* ARRAY_INFO(1, mxhosts, 1) */
985 ZEND_ARG_INFO(1, weight) /* ARRAY_INFO(1, weight, 1) */
986 ZEND_END_ARG_INFO()
987 # endif
988
989 #endif /* defined(PHP_WIN32) || (HAVE_DNS_SEARCH_FUNC && !(defined(__BEOS__) || defined(NETWARE))) */
990 /* }}} */
991
992 /* {{{ exec.c */
993 ZEND_BEGIN_ARG_INFO_EX(arginfo_exec, 0, 0, 1)
994 ZEND_ARG_INFO(0, command)
995 ZEND_ARG_INFO(1, output) /* ARRAY_INFO(1, output, 1) */
996 ZEND_ARG_INFO(1, return_value)
997 ZEND_END_ARG_INFO()
998
999 ZEND_BEGIN_ARG_INFO_EX(arginfo_system, 0, 0, 1)
1000 ZEND_ARG_INFO(0, command)
1001 ZEND_ARG_INFO(1, return_value)
1002 ZEND_END_ARG_INFO()
1003
1004 ZEND_BEGIN_ARG_INFO_EX(arginfo_passthru, 0, 0, 1)
1005 ZEND_ARG_INFO(0, command)
1006 ZEND_ARG_INFO(1, return_value)
1007 ZEND_END_ARG_INFO()
1008
1009 ZEND_BEGIN_ARG_INFO(arginfo_escapeshellcmd, 0)
1010 ZEND_ARG_INFO(0, command)
1011 ZEND_END_ARG_INFO()
1012
1013 ZEND_BEGIN_ARG_INFO(arginfo_escapeshellarg, 0)
1014 ZEND_ARG_INFO(0, arg)
1015 ZEND_END_ARG_INFO()
1016
1017 ZEND_BEGIN_ARG_INFO(arginfo_shell_exec, 0)
1018 ZEND_ARG_INFO(0, cmd)
1019 ZEND_END_ARG_INFO()
1020
1021 #ifdef HAVE_NICE
1022 ZEND_BEGIN_ARG_INFO(arginfo_proc_nice, 0)
1023 ZEND_ARG_INFO(0, priority)
1024 ZEND_END_ARG_INFO()
1025 #endif
1026 /* }}} */
1027 /* {{{ file.c */
1028 ZEND_BEGIN_ARG_INFO_EX(arginfo_flock, 0, 0, 2)
1029 ZEND_ARG_INFO(0, fp)
1030 ZEND_ARG_INFO(0, operation)
1031 ZEND_ARG_INFO(1, wouldblock)
1032 ZEND_END_ARG_INFO()
1033
1034 ZEND_BEGIN_ARG_INFO_EX(arginfo_get_meta_tags, 0, 0, 1)
1035 ZEND_ARG_INFO(0, filename)
1036 ZEND_ARG_INFO(0, use_include_path)
1037 ZEND_END_ARG_INFO()
1038
1039 ZEND_BEGIN_ARG_INFO_EX(arginfo_file_get_contents, 0, 0, 1)
1040 ZEND_ARG_INFO(0, filename)
1041 ZEND_ARG_INFO(0, flags)
1042 ZEND_ARG_INFO(0, context)
1043 ZEND_ARG_INFO(0, offset)
1044 ZEND_ARG_INFO(0, maxlen)
1045 ZEND_END_ARG_INFO()
1046
1047 ZEND_BEGIN_ARG_INFO_EX(arginfo_file_put_contents, 0, 0, 2)
1048 ZEND_ARG_INFO(0, filename)
1049 ZEND_ARG_INFO(0, data)
1050 ZEND_ARG_INFO(0, flags)
1051 ZEND_ARG_INFO(0, context)
1052 ZEND_END_ARG_INFO()
1053
1054 ZEND_BEGIN_ARG_INFO_EX(arginfo_file, 0, 0, 1)
1055 ZEND_ARG_INFO(0, filename)
1056 ZEND_ARG_INFO(0, flags)
1057 ZEND_ARG_INFO(0, context)
1058 ZEND_END_ARG_INFO()
1059
1060 ZEND_BEGIN_ARG_INFO(arginfo_tempnam, 0)
1061 ZEND_ARG_INFO(0, dir)
1062 ZEND_ARG_INFO(0, prefix)
1063 ZEND_END_ARG_INFO()
1064
1065 ZEND_BEGIN_ARG_INFO(arginfo_tmpfile, 0)
1066 ZEND_END_ARG_INFO()
1067
1068 ZEND_BEGIN_ARG_INFO_EX(arginfo_fopen, 0, 0, 2)
1069 ZEND_ARG_INFO(0, filename)
1070 ZEND_ARG_INFO(0, mode)
1071 ZEND_ARG_INFO(0, use_include_path)
1072 ZEND_ARG_INFO(0, context)
1073 ZEND_END_ARG_INFO()
1074
1075 ZEND_BEGIN_ARG_INFO(arginfo_fclose, 0)
1076 ZEND_ARG_INFO(0, fp)
1077 ZEND_END_ARG_INFO()
1078
1079 ZEND_BEGIN_ARG_INFO(arginfo_popen, 0)
1080 ZEND_ARG_INFO(0, command)
1081 ZEND_ARG_INFO(0, mode)
1082 ZEND_END_ARG_INFO()
1083
1084 ZEND_BEGIN_ARG_INFO(arginfo_pclose, 0)
1085 ZEND_ARG_INFO(0, fp)
1086 ZEND_END_ARG_INFO()
1087
1088 ZEND_BEGIN_ARG_INFO(arginfo_feof, 0)
1089 ZEND_ARG_INFO(0, fp)
1090 ZEND_END_ARG_INFO()
1091
1092 ZEND_BEGIN_ARG_INFO_EX(arginfo_fgets, 0, 0, 1)
1093 ZEND_ARG_INFO(0, fp)
1094 ZEND_ARG_INFO(0, length)
1095 ZEND_END_ARG_INFO()
1096
1097 ZEND_BEGIN_ARG_INFO(arginfo_fgetc, 0)
1098 ZEND_ARG_INFO(0, fp)
1099 ZEND_END_ARG_INFO()
1100
1101 ZEND_BEGIN_ARG_INFO_EX(arginfo_fgetss, 0, 0, 1)
1102 ZEND_ARG_INFO(0, fp)
1103 ZEND_ARG_INFO(0, length)
1104 ZEND_ARG_INFO(0, allowable_tags)
1105 ZEND_END_ARG_INFO()
1106
1107 ZEND_BEGIN_ARG_INFO_EX(arginfo_fscanf, 0, 0, 2)
1108 ZEND_ARG_INFO(0, stream)
1109 ZEND_ARG_INFO(0, format)
1110 ZEND_ARG_VARIADIC_INFO(1, vars)
1111 ZEND_END_ARG_INFO()
1112
1113 ZEND_BEGIN_ARG_INFO_EX(arginfo_fwrite, 0, 0, 2)
1114 ZEND_ARG_INFO(0, fp)
1115 ZEND_ARG_INFO(0, str)
1116 ZEND_ARG_INFO(0, length)
1117 ZEND_END_ARG_INFO()
1118
1119 ZEND_BEGIN_ARG_INFO(arginfo_fflush, 0)
1120 ZEND_ARG_INFO(0, fp)
1121 ZEND_END_ARG_INFO()
1122
1123 ZEND_BEGIN_ARG_INFO(arginfo_rewind, 0)
1124 ZEND_ARG_INFO(0, fp)
1125 ZEND_END_ARG_INFO()
1126
1127 ZEND_BEGIN_ARG_INFO(arginfo_ftell, 0)
1128 ZEND_ARG_INFO(0, fp)
1129 ZEND_END_ARG_INFO()
1130
1131 ZEND_BEGIN_ARG_INFO_EX(arginfo_fseek, 0, 0, 2)
1132 ZEND_ARG_INFO(0, fp)
1133 ZEND_ARG_INFO(0, offset)
1134 ZEND_ARG_INFO(0, whence)
1135 ZEND_END_ARG_INFO()
1136
1137 ZEND_BEGIN_ARG_INFO_EX(arginfo_mkdir, 0, 0, 1)
1138 ZEND_ARG_INFO(0, pathname)
1139 ZEND_ARG_INFO(0, mode)
1140 ZEND_ARG_INFO(0, recursive)
1141 ZEND_ARG_INFO(0, context)
1142 ZEND_END_ARG_INFO()
1143
1144 ZEND_BEGIN_ARG_INFO_EX(arginfo_rmdir, 0, 0, 1)
1145 ZEND_ARG_INFO(0, dirname)
1146 ZEND_ARG_INFO(0, context)
1147 ZEND_END_ARG_INFO()
1148
1149 ZEND_BEGIN_ARG_INFO_EX(arginfo_readfile, 0, 0, 1)
1150 ZEND_ARG_INFO(0, filename)
1151 ZEND_ARG_INFO(0, flags)
1152 ZEND_ARG_INFO(0, context)
1153 ZEND_END_ARG_INFO()
1154
1155 ZEND_BEGIN_ARG_INFO_EX(arginfo_umask, 0, 0, 0)
1156 ZEND_ARG_INFO(0, mask)
1157 ZEND_END_ARG_INFO()
1158
1159 ZEND_BEGIN_ARG_INFO(arginfo_fpassthru, 0)
1160 ZEND_ARG_INFO(0, fp)
1161 ZEND_END_ARG_INFO()
1162
1163 ZEND_BEGIN_ARG_INFO_EX(arginfo_rename, 0, 0, 2)
1164 ZEND_ARG_INFO(0, old_name)
1165 ZEND_ARG_INFO(0, new_name)
1166 ZEND_ARG_INFO(0, context)
1167 ZEND_END_ARG_INFO()
1168
1169 ZEND_BEGIN_ARG_INFO_EX(arginfo_unlink, 0, 0, 1)
1170 ZEND_ARG_INFO(0, filename)
1171 ZEND_ARG_INFO(0, context)
1172 ZEND_END_ARG_INFO()
1173
1174 ZEND_BEGIN_ARG_INFO(arginfo_ftruncate, 0)
1175 ZEND_ARG_INFO(0, fp)
1176 ZEND_ARG_INFO(0, size)
1177 ZEND_END_ARG_INFO()
1178
1179 ZEND_BEGIN_ARG_INFO(arginfo_fstat, 0)
1180 ZEND_ARG_INFO(0, fp)
1181 ZEND_END_ARG_INFO()
1182 ZEND_BEGIN_ARG_INFO_EX(arginfo_copy, 0, 0, 2)
1183 ZEND_ARG_INFO(0, source_file)
1184 ZEND_ARG_INFO(0, destination_file)
1185 ZEND_ARG_INFO(0, context)
1186 ZEND_END_ARG_INFO()
1187
1188 ZEND_BEGIN_ARG_INFO(arginfo_fread, 0)
1189 ZEND_ARG_INFO(0, fp)
1190 ZEND_ARG_INFO(0, length)
1191 ZEND_END_ARG_INFO()
1192
1193 ZEND_BEGIN_ARG_INFO_EX(arginfo_fputcsv, 0, 0, 2)
1194 ZEND_ARG_INFO(0, fp)
1195 ZEND_ARG_INFO(0, fields) /* ARRAY_INFO(0, fields, 1) */
1196 ZEND_ARG_INFO(0, delimiter)
1197 ZEND_ARG_INFO(0, enclosure)
1198 ZEND_ARG_INFO(0, escape_char)
1199 ZEND_END_ARG_INFO()
1200
1201 ZEND_BEGIN_ARG_INFO_EX(arginfo_fgetcsv, 0, 0, 1)
1202 ZEND_ARG_INFO(0, fp)
1203 ZEND_ARG_INFO(0, length)
1204 ZEND_ARG_INFO(0, delimiter)
1205 ZEND_ARG_INFO(0, enclosure)
1206 ZEND_ARG_INFO(0, escape)
1207 ZEND_END_ARG_INFO()
1208
1209 #if (!defined(__BEOS__) && !defined(NETWARE) && HAVE_REALPATH) || defined(ZTS)
1210 ZEND_BEGIN_ARG_INFO(arginfo_realpath, 0)
1211 ZEND_ARG_INFO(0, path)
1212 ZEND_END_ARG_INFO()
1213 #endif
1214
1215 #ifdef HAVE_FNMATCH
1216 ZEND_BEGIN_ARG_INFO_EX(arginfo_fnmatch, 0, 0, 2)
1217 ZEND_ARG_INFO(0, pattern)
1218 ZEND_ARG_INFO(0, filename)
1219 ZEND_ARG_INFO(0, flags)
1220 ZEND_END_ARG_INFO()
1221 #endif
1222
1223 ZEND_BEGIN_ARG_INFO(arginfo_sys_get_temp_dir, 0)
1224 ZEND_END_ARG_INFO()
1225 /* }}} */
1226 /* {{{ filestat.c */
1227 ZEND_BEGIN_ARG_INFO(arginfo_disk_total_space, 0)
1228 ZEND_ARG_INFO(0, path)
1229 ZEND_END_ARG_INFO()
1230
1231 ZEND_BEGIN_ARG_INFO(arginfo_disk_free_space, 0)
1232 ZEND_ARG_INFO(0, path)
1233 ZEND_END_ARG_INFO()
1234
1235 #ifndef NETWARE
1236 ZEND_BEGIN_ARG_INFO(arginfo_chgrp, 0)
1237 ZEND_ARG_INFO(0, filename)
1238 ZEND_ARG_INFO(0, group)
1239 ZEND_END_ARG_INFO()
1240
1241 ZEND_BEGIN_ARG_INFO(arginfo_chown, 0)
1242 ZEND_ARG_INFO(0, filename)
1243 ZEND_ARG_INFO(0, user)
1244 ZEND_END_ARG_INFO()
1245 #endif
1246
1247 #if HAVE_LCHOWN
1248 ZEND_BEGIN_ARG_INFO(arginfo_lchgrp, 0)
1249 ZEND_ARG_INFO(0, filename)
1250 ZEND_ARG_INFO(0, group)
1251 ZEND_END_ARG_INFO()
1252
1253 ZEND_BEGIN_ARG_INFO(arginfo_lchown, 0)
1254 ZEND_ARG_INFO(0, filename)
1255 ZEND_ARG_INFO(0, user)
1256 ZEND_END_ARG_INFO()
1257 #endif
1258
1259 ZEND_BEGIN_ARG_INFO(arginfo_chmod, 0)
1260 ZEND_ARG_INFO(0, filename)
1261 ZEND_ARG_INFO(0, mode)
1262 ZEND_END_ARG_INFO()
1263
1264 #if HAVE_UTIME
1265 ZEND_BEGIN_ARG_INFO_EX(arginfo_touch, 0, 0, 1)
1266 ZEND_ARG_INFO(0, filename)
1267 ZEND_ARG_INFO(0, time)
1268 ZEND_ARG_INFO(0, atime)
1269 ZEND_END_ARG_INFO()
1270 #endif
1271
1272 ZEND_BEGIN_ARG_INFO_EX(arginfo_clearstatcache, 0, 0, 0)
1273 ZEND_ARG_INFO(0, clear_realpath_cache)
1274 ZEND_ARG_INFO(0, filename)
1275 ZEND_END_ARG_INFO()
1276
1277 ZEND_BEGIN_ARG_INFO(arginfo_realpath_cache_size, 0)
1278 ZEND_END_ARG_INFO()
1279
1280 ZEND_BEGIN_ARG_INFO(arginfo_realpath_cache_get, 0)
1281 ZEND_END_ARG_INFO()
1282
1283 ZEND_BEGIN_ARG_INFO(arginfo_fileperms, 0)
1284 ZEND_ARG_INFO(0, filename)
1285 ZEND_END_ARG_INFO()
1286
1287 ZEND_BEGIN_ARG_INFO(arginfo_fileinode, 0)
1288 ZEND_ARG_INFO(0, filename)
1289 ZEND_END_ARG_INFO()
1290
1291 ZEND_BEGIN_ARG_INFO(arginfo_filesize, 0)
1292 ZEND_ARG_INFO(0, filename)
1293 ZEND_END_ARG_INFO()
1294
1295 ZEND_BEGIN_ARG_INFO(arginfo_fileowner, 0)
1296 ZEND_ARG_INFO(0, filename)
1297 ZEND_END_ARG_INFO()
1298
1299 ZEND_BEGIN_ARG_INFO(arginfo_filegroup, 0)
1300 ZEND_ARG_INFO(0, filename)
1301 ZEND_END_ARG_INFO()
1302
1303 ZEND_BEGIN_ARG_INFO(arginfo_fileatime, 0)
1304 ZEND_ARG_INFO(0, filename)
1305 ZEND_END_ARG_INFO()
1306
1307 ZEND_BEGIN_ARG_INFO(arginfo_filemtime, 0)
1308 ZEND_ARG_INFO(0, filename)
1309 ZEND_END_ARG_INFO()
1310
1311 ZEND_BEGIN_ARG_INFO(arginfo_filectime, 0)
1312 ZEND_ARG_INFO(0, filename)
1313 ZEND_END_ARG_INFO()
1314
1315 ZEND_BEGIN_ARG_INFO(arginfo_filetype, 0)
1316 ZEND_ARG_INFO(0, filename)
1317 ZEND_END_ARG_INFO()
1318
1319 ZEND_BEGIN_ARG_INFO(arginfo_is_writable, 0)
1320 ZEND_ARG_INFO(0, filename)
1321 ZEND_END_ARG_INFO()
1322
1323 ZEND_BEGIN_ARG_INFO(arginfo_is_readable, 0)
1324 ZEND_ARG_INFO(0, filename)
1325 ZEND_END_ARG_INFO()
1326
1327 ZEND_BEGIN_ARG_INFO(arginfo_is_executable, 0)
1328 ZEND_ARG_INFO(0, filename)
1329 ZEND_END_ARG_INFO()
1330
1331 ZEND_BEGIN_ARG_INFO(arginfo_is_file, 0)
1332 ZEND_ARG_INFO(0, filename)
1333 ZEND_END_ARG_INFO()
1334
1335 ZEND_BEGIN_ARG_INFO(arginfo_is_dir, 0)
1336 ZEND_ARG_INFO(0, filename)
1337 ZEND_END_ARG_INFO()
1338
1339 ZEND_BEGIN_ARG_INFO(arginfo_is_link, 0)
1340 ZEND_ARG_INFO(0, filename)
1341 ZEND_END_ARG_INFO()
1342
1343 ZEND_BEGIN_ARG_INFO(arginfo_file_exists, 0)
1344 ZEND_ARG_INFO(0, filename)
1345 ZEND_END_ARG_INFO()
1346
1347 ZEND_BEGIN_ARG_INFO(arginfo_lstat, 0)
1348 ZEND_ARG_INFO(0, filename)
1349 ZEND_END_ARG_INFO()
1350
1351 ZEND_BEGIN_ARG_INFO(arginfo_stat, 0)
1352 ZEND_ARG_INFO(0, filename)
1353 ZEND_END_ARG_INFO()
1354 /* }}} */
1355 /* {{{ formatted_print.c */
1356 ZEND_BEGIN_ARG_INFO_EX(arginfo_sprintf, 0, 0, 1)
1357 ZEND_ARG_INFO(0, format)
1358 ZEND_ARG_VARIADIC_INFO(0, args)
1359 ZEND_END_ARG_INFO()
1360
1361 ZEND_BEGIN_ARG_INFO(arginfo_vsprintf, 0)
1362 ZEND_ARG_INFO(0, format)
1363 ZEND_ARG_INFO(0, args) /* ARRAY_INFO(0, args, 1) */
1364 ZEND_END_ARG_INFO()
1365
1366 ZEND_BEGIN_ARG_INFO_EX(arginfo_printf, 0, 0, 1)
1367 ZEND_ARG_INFO(0, format)
1368 ZEND_ARG_VARIADIC_INFO(0, args)
1369 ZEND_END_ARG_INFO()
1370
1371 ZEND_BEGIN_ARG_INFO(arginfo_vprintf, 0)
1372 ZEND_ARG_INFO(0, format)
1373 ZEND_ARG_INFO(0, args) /* ARRAY_INFO(0, args, 1) */
1374 ZEND_END_ARG_INFO()
1375
1376 ZEND_BEGIN_ARG_INFO_EX(arginfo_fprintf, 0, 0, 2)
1377 ZEND_ARG_INFO(0, stream)
1378 ZEND_ARG_INFO(0, format)
1379 ZEND_ARG_VARIADIC_INFO(0, args)
1380 ZEND_END_ARG_INFO()
1381
1382 ZEND_BEGIN_ARG_INFO(arginfo_vfprintf, 0)
1383 ZEND_ARG_INFO(0, stream)
1384 ZEND_ARG_INFO(0, format)
1385 ZEND_ARG_INFO(0, args) /* ARRAY_INFO(0, args, 1) */
1386 ZEND_END_ARG_INFO()
1387 /* }}} */
1388 /* {{{ fsock.c */
1389 ZEND_BEGIN_ARG_INFO_EX(arginfo_fsockopen, 0, 0, 1)
1390 ZEND_ARG_INFO(0, hostname)
1391 ZEND_ARG_INFO(0, port)
1392 ZEND_ARG_INFO(1, errno)
1393 ZEND_ARG_INFO(1, errstr)
1394 ZEND_ARG_INFO(0, timeout)
1395 ZEND_END_ARG_INFO()
1396
1397 ZEND_BEGIN_ARG_INFO_EX(arginfo_pfsockopen, 0, 0, 1)
1398 ZEND_ARG_INFO(0, hostname)
1399 ZEND_ARG_INFO(0, port)
1400 ZEND_ARG_INFO(1, errno)
1401 ZEND_ARG_INFO(1, errstr)
1402 ZEND_ARG_INFO(0, timeout)
1403 ZEND_END_ARG_INFO()
1404 /* }}} */
1405 /* {{{ ftok.c */
1406 #if HAVE_FTOK
1407 ZEND_BEGIN_ARG_INFO(arginfo_ftok, 0)
1408 ZEND_ARG_INFO(0, pathname)
1409 ZEND_ARG_INFO(0, proj)
1410 ZEND_END_ARG_INFO()
1411 #endif
1412 /* }}} */
1413 /* {{{ head.c */
1414 ZEND_BEGIN_ARG_INFO_EX(arginfo_header, 0, 0, 1)
1415 ZEND_ARG_INFO(0, header)
1416 ZEND_ARG_INFO(0, replace)
1417 ZEND_ARG_INFO(0, http_response_code)
1418 ZEND_END_ARG_INFO()
1419
1420 ZEND_BEGIN_ARG_INFO_EX(arginfo_header_remove, 0, 0, 0)
1421 ZEND_ARG_INFO(0, name)
1422 ZEND_END_ARG_INFO()
1423
1424 ZEND_BEGIN_ARG_INFO_EX(arginfo_setcookie, 0, 0, 1)
1425 ZEND_ARG_INFO(0, name)
1426 ZEND_ARG_INFO(0, value)
1427 ZEND_ARG_INFO(0, expires)
1428 ZEND_ARG_INFO(0, path)
1429 ZEND_ARG_INFO(0, domain)
1430 ZEND_ARG_INFO(0, secure)
1431 ZEND_ARG_INFO(0, httponly)
1432 ZEND_END_ARG_INFO()
1433
1434 ZEND_BEGIN_ARG_INFO_EX(arginfo_setrawcookie, 0, 0, 1)
1435 ZEND_ARG_INFO(0, name)
1436 ZEND_ARG_INFO(0, value)
1437 ZEND_ARG_INFO(0, expires)
1438 ZEND_ARG_INFO(0, path)
1439 ZEND_ARG_INFO(0, domain)
1440 ZEND_ARG_INFO(0, secure)
1441 ZEND_ARG_INFO(0, httponly)
1442 ZEND_END_ARG_INFO()
1443
1444 ZEND_BEGIN_ARG_INFO_EX(arginfo_headers_sent, 0, 0, 0)
1445 ZEND_ARG_INFO(1, file)
1446 ZEND_ARG_INFO(1, line)
1447 ZEND_END_ARG_INFO()
1448
1449 ZEND_BEGIN_ARG_INFO(arginfo_headers_list, 0)
1450 ZEND_END_ARG_INFO()
1451
1452 ZEND_BEGIN_ARG_INFO_EX(arginfo_http_response_code, 0, 0, 0)
1453 ZEND_ARG_INFO(0, response_code)
1454 ZEND_END_ARG_INFO()
1455 /* }}} */
1456 /* {{{ html.c */
1457 ZEND_BEGIN_ARG_INFO_EX(arginfo_htmlspecialchars, 0, 0, 1)
1458 ZEND_ARG_INFO(0, string)
1459 ZEND_ARG_INFO(0, quote_style)
1460 ZEND_ARG_INFO(0, encoding)
1461 ZEND_ARG_INFO(0, double_encode)
1462 ZEND_END_ARG_INFO()
1463
1464 ZEND_BEGIN_ARG_INFO_EX(arginfo_htmlspecialchars_decode, 0, 0, 1)
1465 ZEND_ARG_INFO(0, string)
1466 ZEND_ARG_INFO(0, quote_style)
1467 ZEND_END_ARG_INFO()
1468
1469 ZEND_BEGIN_ARG_INFO_EX(arginfo_html_entity_decode, 0, 0, 1)
1470 ZEND_ARG_INFO(0, string)
1471 ZEND_ARG_INFO(0, quote_style)
1472 ZEND_ARG_INFO(0, encoding)
1473 ZEND_END_ARG_INFO()
1474
1475 ZEND_BEGIN_ARG_INFO_EX(arginfo_htmlentities, 0, 0, 1)
1476 ZEND_ARG_INFO(0, string)
1477 ZEND_ARG_INFO(0, quote_style)
1478 ZEND_ARG_INFO(0, encoding)
1479 ZEND_ARG_INFO(0, double_encode)
1480 ZEND_END_ARG_INFO()
1481
1482 ZEND_BEGIN_ARG_INFO_EX(arginfo_get_html_translation_table, 0, 0, 0)
1483 ZEND_ARG_INFO(0, table)
1484 ZEND_ARG_INFO(0, quote_style)
1485 ZEND_ARG_INFO(0, encoding)
1486 ZEND_END_ARG_INFO()
1487
1488 /* }}} */
1489 /* {{{ http.c */
1490 ZEND_BEGIN_ARG_INFO_EX(arginfo_http_build_query, 0, 0, 1)
1491 ZEND_ARG_INFO(0, formdata)
1492 ZEND_ARG_INFO(0, prefix)
1493 ZEND_ARG_INFO(0, arg_separator)
1494 ZEND_ARG_INFO(0, enc_type)
1495 ZEND_END_ARG_INFO()
1496 /* }}} */
1497 /* {{{ image.c */
1498 ZEND_BEGIN_ARG_INFO(arginfo_image_type_to_mime_type, 0)
1499 ZEND_ARG_INFO(0, imagetype)
1500 ZEND_END_ARG_INFO()
1501
1502 ZEND_BEGIN_ARG_INFO_EX(arginfo_image_type_to_extension, 0, 0, 1)
1503 ZEND_ARG_INFO(0, imagetype)
1504 ZEND_ARG_INFO(0, include_dot)
1505 ZEND_END_ARG_INFO()
1506
1507 ZEND_BEGIN_ARG_INFO_EX(arginfo_getimagesize, 0, 0, 1)
1508 ZEND_ARG_INFO(0, imagefile)
1509 ZEND_ARG_INFO(1, info) /* ARRAY_INFO(1, info, 1) */
1510 ZEND_END_ARG_INFO()
1511 /* }}} */
1512 /* {{{ info.c */
1513 ZEND_BEGIN_ARG_INFO_EX(arginfo_phpinfo, 0, 0, 0)
1514 ZEND_ARG_INFO(0, what)
1515 ZEND_END_ARG_INFO()
1516
1517 ZEND_BEGIN_ARG_INFO_EX(arginfo_phpversion, 0, 0, 0)
1518 ZEND_ARG_INFO(0, extension)
1519 ZEND_END_ARG_INFO()
1520
1521 ZEND_BEGIN_ARG_INFO_EX(arginfo_phpcredits, 0, 0, 0)
1522 ZEND_ARG_INFO(0, flag)
1523 ZEND_END_ARG_INFO()
1524
1525 ZEND_BEGIN_ARG_INFO(arginfo_php_sapi_name, 0)
1526 ZEND_END_ARG_INFO()
1527
1528 ZEND_BEGIN_ARG_INFO_EX(arginfo_php_uname, 0, 0, 0)
1529 ZEND_ARG_INFO(0, mode)
1530 ZEND_END_ARG_INFO()
1531
1532 ZEND_BEGIN_ARG_INFO(arginfo_php_ini_scanned_files, 0)
1533 ZEND_END_ARG_INFO()
1534
1535 ZEND_BEGIN_ARG_INFO(arginfo_php_ini_loaded_file, 0)
1536 ZEND_END_ARG_INFO()
1537 /* }}} */
1538 /* {{{ iptc.c */
1539 ZEND_BEGIN_ARG_INFO_EX(arginfo_iptcembed, 0, 0, 2)
1540 ZEND_ARG_INFO(0, iptcdata)
1541 ZEND_ARG_INFO(0, jpeg_file_name)
1542 ZEND_ARG_INFO(0, spool)
1543 ZEND_END_ARG_INFO()
1544
1545 ZEND_BEGIN_ARG_INFO(arginfo_iptcparse, 0)
1546 ZEND_ARG_INFO(0, iptcdata)
1547 ZEND_END_ARG_INFO()
1548 /* }}} */
1549
1550 /* {{{ lcg.c */
1551 ZEND_BEGIN_ARG_INFO(arginfo_lcg_value, 0)
1552 ZEND_END_ARG_INFO()
1553 /* }}} */
1554
1555 /* {{{ levenshtein.c */
1556 ZEND_BEGIN_ARG_INFO_EX(arginfo_levenshtein, 0, 0, 2)
1557 ZEND_ARG_INFO(0, str1)
1558 ZEND_ARG_INFO(0, str2)
1559 ZEND_ARG_INFO(0, cost_ins)
1560 ZEND_ARG_INFO(0, cost_rep)
1561 ZEND_ARG_INFO(0, cost_del)
1562 ZEND_END_ARG_INFO()
1563 /* }}} */
1564 /* {{{ link.c */
1565 #if defined(HAVE_SYMLINK) || defined(PHP_WIN32)
1566 ZEND_BEGIN_ARG_INFO(arginfo_readlink, 0)
1567 ZEND_ARG_INFO(0, filename)
1568 ZEND_END_ARG_INFO()
1569
1570 ZEND_BEGIN_ARG_INFO(arginfo_linkinfo, 0)
1571 ZEND_ARG_INFO(0, filename)
1572 ZEND_END_ARG_INFO()
1573
1574 ZEND_BEGIN_ARG_INFO(arginfo_symlink, 0)
1575 ZEND_ARG_INFO(0, target)
1576 ZEND_ARG_INFO(0, link)
1577 ZEND_END_ARG_INFO()
1578
1579 ZEND_BEGIN_ARG_INFO(arginfo_link, 0)
1580 ZEND_ARG_INFO(0, target)
1581 ZEND_ARG_INFO(0, link)
1582 ZEND_END_ARG_INFO()
1583 #endif
1584 /* }}} */
1585 /* {{{ mail.c */
1586 ZEND_BEGIN_ARG_INFO(arginfo_ezmlm_hash, 0)
1587 ZEND_ARG_INFO(0, addr)
1588 ZEND_END_ARG_INFO()
1589
1590 ZEND_BEGIN_ARG_INFO_EX(arginfo_mail, 0, 0, 3)
1591 ZEND_ARG_INFO(0, to)
1592 ZEND_ARG_INFO(0, subject)
1593 ZEND_ARG_INFO(0, message)
1594 ZEND_ARG_INFO(0, additional_headers)
1595 ZEND_ARG_INFO(0, additional_parameters)
1596 ZEND_END_ARG_INFO()
1597 /* }}} */
1598 /* {{{ math.c */
1599 ZEND_BEGIN_ARG_INFO(arginfo_abs, 0)
1600 ZEND_ARG_INFO(0, number)
1601 ZEND_END_ARG_INFO()
1602
1603 ZEND_BEGIN_ARG_INFO(arginfo_ceil, 0)
1604 ZEND_ARG_INFO(0, number)
1605 ZEND_END_ARG_INFO()
1606
1607 ZEND_BEGIN_ARG_INFO(arginfo_floor, 0)
1608 ZEND_ARG_INFO(0, number)
1609 ZEND_END_ARG_INFO()
1610
1611 ZEND_BEGIN_ARG_INFO_EX(arginfo_round, 0, 0, 1)
1612 ZEND_ARG_INFO(0, number)
1613 ZEND_ARG_INFO(0, precision)
1614 ZEND_ARG_INFO(0, mode)
1615 ZEND_END_ARG_INFO()
1616
1617 ZEND_BEGIN_ARG_INFO(arginfo_sin, 0)
1618 ZEND_ARG_INFO(0, number)
1619 ZEND_END_ARG_INFO()
1620
1621 ZEND_BEGIN_ARG_INFO(arginfo_cos, 0)
1622 ZEND_ARG_INFO(0, number)
1623 ZEND_END_ARG_INFO()
1624
1625 ZEND_BEGIN_ARG_INFO(arginfo_tan, 0)
1626 ZEND_ARG_INFO(0, number)
1627 ZEND_END_ARG_INFO()
1628
1629 ZEND_BEGIN_ARG_INFO(arginfo_asin, 0)
1630 ZEND_ARG_INFO(0, number)
1631 ZEND_END_ARG_INFO()
1632
1633 ZEND_BEGIN_ARG_INFO(arginfo_acos, 0)
1634 ZEND_ARG_INFO(0, number)
1635 ZEND_END_ARG_INFO()
1636
1637 ZEND_BEGIN_ARG_INFO(arginfo_atan, 0)
1638 ZEND_ARG_INFO(0, number)
1639 ZEND_END_ARG_INFO()
1640
1641 ZEND_BEGIN_ARG_INFO(arginfo_atan2, 0)
1642 ZEND_ARG_INFO(0, y)
1643 ZEND_ARG_INFO(0, x)
1644 ZEND_END_ARG_INFO()
1645
1646 ZEND_BEGIN_ARG_INFO(arginfo_sinh, 0)
1647 ZEND_ARG_INFO(0, number)
1648 ZEND_END_ARG_INFO()
1649
1650 ZEND_BEGIN_ARG_INFO(arginfo_cosh, 0)
1651 ZEND_ARG_INFO(0, number)
1652 ZEND_END_ARG_INFO()
1653
1654 ZEND_BEGIN_ARG_INFO(arginfo_tanh, 0)
1655 ZEND_ARG_INFO(0, number)
1656 ZEND_END_ARG_INFO()
1657
1658 ZEND_BEGIN_ARG_INFO(arginfo_asinh, 0)
1659 ZEND_ARG_INFO(0, number)
1660 ZEND_END_ARG_INFO()
1661
1662 ZEND_BEGIN_ARG_INFO(arginfo_acosh, 0)
1663 ZEND_ARG_INFO(0, number)
1664 ZEND_END_ARG_INFO()
1665
1666 ZEND_BEGIN_ARG_INFO(arginfo_atanh, 0)
1667 ZEND_ARG_INFO(0, number)
1668 ZEND_END_ARG_INFO()
1669
1670 ZEND_BEGIN_ARG_INFO(arginfo_pi, 0)
1671 ZEND_END_ARG_INFO()
1672
1673 ZEND_BEGIN_ARG_INFO(arginfo_is_finite, 0)
1674 ZEND_ARG_INFO(0, val)
1675 ZEND_END_ARG_INFO()
1676
1677 ZEND_BEGIN_ARG_INFO(arginfo_is_infinite, 0)
1678 ZEND_ARG_INFO(0, val)
1679 ZEND_END_ARG_INFO()
1680
1681 ZEND_BEGIN_ARG_INFO(arginfo_is_nan, 0)
1682 ZEND_ARG_INFO(0, val)
1683 ZEND_END_ARG_INFO()
1684
1685 ZEND_BEGIN_ARG_INFO(arginfo_pow, 0)
1686 ZEND_ARG_INFO(0, base)
1687 ZEND_ARG_INFO(0, exponent)
1688 ZEND_END_ARG_INFO()
1689
1690 ZEND_BEGIN_ARG_INFO(arginfo_exp, 0)
1691 ZEND_ARG_INFO(0, number)
1692 ZEND_END_ARG_INFO()
1693
1694 ZEND_BEGIN_ARG_INFO(arginfo_expm1, 0)
1695 ZEND_ARG_INFO(0, number)
1696 ZEND_END_ARG_INFO()
1697
1698 ZEND_BEGIN_ARG_INFO(arginfo_log1p, 0)
1699 ZEND_ARG_INFO(0, number)
1700 ZEND_END_ARG_INFO()
1701
1702 ZEND_BEGIN_ARG_INFO_EX(arginfo_log, 0, 0, 1)
1703 ZEND_ARG_INFO(0, number)
1704 ZEND_ARG_INFO(0, base)
1705 ZEND_END_ARG_INFO()
1706
1707 ZEND_BEGIN_ARG_INFO(arginfo_log10, 0)
1708 ZEND_ARG_INFO(0, number)
1709 ZEND_END_ARG_INFO()
1710
1711 ZEND_BEGIN_ARG_INFO(arginfo_sqrt, 0)
1712 ZEND_ARG_INFO(0, number)
1713 ZEND_END_ARG_INFO()
1714
1715 ZEND_BEGIN_ARG_INFO(arginfo_hypot, 0)
1716 ZEND_ARG_INFO(0, num1)
1717 ZEND_ARG_INFO(0, num2)
1718 ZEND_END_ARG_INFO()
1719
1720 ZEND_BEGIN_ARG_INFO(arginfo_deg2rad, 0)
1721 ZEND_ARG_INFO(0, number)
1722 ZEND_END_ARG_INFO()
1723
1724 ZEND_BEGIN_ARG_INFO(arginfo_rad2deg, 0)
1725 ZEND_ARG_INFO(0, number)
1726 ZEND_END_ARG_INFO()
1727
1728 ZEND_BEGIN_ARG_INFO(arginfo_bindec, 0)
1729 ZEND_ARG_INFO(0, binary_number)
1730 ZEND_END_ARG_INFO()
1731
1732 ZEND_BEGIN_ARG_INFO(arginfo_hexdec, 0)
1733 ZEND_ARG_INFO(0, hexadecimal_number)
1734 ZEND_END_ARG_INFO()
1735
1736 ZEND_BEGIN_ARG_INFO(arginfo_octdec, 0)
1737 ZEND_ARG_INFO(0, octal_number)
1738 ZEND_END_ARG_INFO()
1739
1740 ZEND_BEGIN_ARG_INFO(arginfo_decbin, 0)
1741 ZEND_ARG_INFO(0, decimal_number)
1742 ZEND_END_ARG_INFO()
1743
1744 ZEND_BEGIN_ARG_INFO(arginfo_decoct, 0)
1745 ZEND_ARG_INFO(0, decimal_number)
1746 ZEND_END_ARG_INFO()
1747
1748 ZEND_BEGIN_ARG_INFO(arginfo_dechex, 0)
1749 ZEND_ARG_INFO(0, decimal_number)
1750 ZEND_END_ARG_INFO()
1751
1752 ZEND_BEGIN_ARG_INFO(arginfo_base_convert, 0)
1753 ZEND_ARG_INFO(0, number)
1754 ZEND_ARG_INFO(0, frombase)
1755 ZEND_ARG_INFO(0, tobase)
1756 ZEND_END_ARG_INFO()
1757
1758 ZEND_BEGIN_ARG_INFO_EX(arginfo_number_format, 0, 0, 1)
1759 ZEND_ARG_INFO(0, number)
1760 ZEND_ARG_INFO(0, num_decimal_places)
1761 ZEND_ARG_INFO(0, dec_separator)
1762 ZEND_ARG_INFO(0, thousands_separator)
1763 ZEND_END_ARG_INFO()
1764
1765 ZEND_BEGIN_ARG_INFO(arginfo_fmod, 0)
1766 ZEND_ARG_INFO(0, x)
1767 ZEND_ARG_INFO(0, y)
1768 ZEND_END_ARG_INFO()
1769
1770 ZEND_BEGIN_ARG_INFO(arginfo_intdiv, 0)
1771 ZEND_ARG_INFO(0, dividend)
1772 ZEND_ARG_INFO(0, divisor)
1773 ZEND_END_ARG_INFO()
1774 /* }}} */
1775 /* {{{ md5.c */
1776 ZEND_BEGIN_ARG_INFO_EX(arginfo_md5, 0, 0, 1)
1777 ZEND_ARG_INFO(0, str)
1778 ZEND_ARG_INFO(0, raw_output)
1779 ZEND_END_ARG_INFO()
1780
1781 ZEND_BEGIN_ARG_INFO_EX(arginfo_md5_file, 0, 0, 1)
1782 ZEND_ARG_INFO(0, filename)
1783 ZEND_ARG_INFO(0, raw_output)
1784 ZEND_END_ARG_INFO()
1785 /* }}} */
1786 /* {{{ metaphone.c */
1787 ZEND_BEGIN_ARG_INFO_EX(arginfo_metaphone, 0, 0, 1)
1788 ZEND_ARG_INFO(0, text)
1789 ZEND_ARG_INFO(0, phones)
1790 ZEND_END_ARG_INFO()
1791 /* }}} */
1792 /* {{{ microtime.c */
1793 #ifdef HAVE_GETTIMEOFDAY
1794 ZEND_BEGIN_ARG_INFO_EX(arginfo_microtime, 0, 0, 0)
1795 ZEND_ARG_INFO(0, get_as_float)
1796 ZEND_END_ARG_INFO()
1797
1798 ZEND_BEGIN_ARG_INFO_EX(arginfo_gettimeofday, 0, 0, 0)
1799 ZEND_ARG_INFO(0, get_as_float)
1800 ZEND_END_ARG_INFO()
1801 #endif
1802
1803 #ifdef HAVE_GETRUSAGE
1804 ZEND_BEGIN_ARG_INFO_EX(arginfo_getrusage, 0, 0, 0)
1805 ZEND_ARG_INFO(0, who)
1806 ZEND_END_ARG_INFO()
1807 #endif
1808 /* }}} */
1809 /* {{{ pack.c */
1810 ZEND_BEGIN_ARG_INFO_EX(arginfo_pack, 0, 0, 2)
1811 ZEND_ARG_INFO(0, format)
1812 ZEND_ARG_VARIADIC_INFO(0, args)
1813 ZEND_END_ARG_INFO()
1814
1815 ZEND_BEGIN_ARG_INFO_EX(arginfo_unpack, 0, 0, 2)
1816 ZEND_ARG_INFO(0, format)
1817 ZEND_ARG_INFO(0, input)
1818 ZEND_ARG_INFO(0, offset)
1819 ZEND_END_ARG_INFO()
1820 /* }}} */
1821 /* {{{ pageinfo.c */
1822 ZEND_BEGIN_ARG_INFO(arginfo_getmyuid, 0)
1823 ZEND_END_ARG_INFO()
1824
1825 ZEND_BEGIN_ARG_INFO(arginfo_getmygid, 0)
1826 ZEND_END_ARG_INFO()
1827
1828 ZEND_BEGIN_ARG_INFO(arginfo_getmypid, 0)
1829 ZEND_END_ARG_INFO()
1830
1831 ZEND_BEGIN_ARG_INFO(arginfo_getmyinode, 0)
1832 ZEND_END_ARG_INFO()
1833
1834 ZEND_BEGIN_ARG_INFO(arginfo_getlastmod, 0)
1835 ZEND_END_ARG_INFO()
1836 /* }}} */
1837 /* {{{ password.c */
1838 ZEND_BEGIN_ARG_INFO_EX(arginfo_password_hash, 0, 0, 2)
1839 ZEND_ARG_INFO(0, password)
1840 ZEND_ARG_INFO(0, algo)
1841 ZEND_ARG_INFO(0, options)
1842 ZEND_END_ARG_INFO()
1843 ZEND_BEGIN_ARG_INFO_EX(arginfo_password_get_info, 0, 0, 1)
1844 ZEND_ARG_INFO(0, hash)
1845 ZEND_END_ARG_INFO()
1846 ZEND_BEGIN_ARG_INFO_EX(arginfo_password_needs_rehash, 0, 0, 2)
1847 ZEND_ARG_INFO(0, hash)
1848 ZEND_ARG_INFO(0, algo)
1849 ZEND_ARG_INFO(0, options)
1850 ZEND_END_ARG_INFO()
1851 ZEND_BEGIN_ARG_INFO_EX(arginfo_password_verify, 0, 0, 2)
1852 ZEND_ARG_INFO(0, password)
1853 ZEND_ARG_INFO(0, hash)
1854 ZEND_END_ARG_INFO()
1855 /* }}} */
1856 /* {{{ proc_open.c */
1857 #ifdef PHP_CAN_SUPPORT_PROC_OPEN
1858 ZEND_BEGIN_ARG_INFO_EX(arginfo_proc_terminate, 0, 0, 1)
1859 ZEND_ARG_INFO(0, process)
1860 ZEND_ARG_INFO(0, signal)
1861 ZEND_END_ARG_INFO()
1862
1863 ZEND_BEGIN_ARG_INFO(arginfo_proc_close, 0)
1864 ZEND_ARG_INFO(0, process)
1865 ZEND_END_ARG_INFO()
1866
1867 ZEND_BEGIN_ARG_INFO(arginfo_proc_get_status, 0)
1868 ZEND_ARG_INFO(0, process)
1869 ZEND_END_ARG_INFO()
1870
1871 ZEND_BEGIN_ARG_INFO_EX(arginfo_proc_open, 0, 0, 3)
1872 ZEND_ARG_INFO(0, command)
1873 ZEND_ARG_INFO(0, descriptorspec) /* ARRAY_INFO(0, descriptorspec, 1) */
1874 ZEND_ARG_INFO(1, pipes) /* ARRAY_INFO(1, pipes, 1) */
1875 ZEND_ARG_INFO(0, cwd)
1876 ZEND_ARG_INFO(0, env) /* ARRAY_INFO(0, env, 1) */
1877 ZEND_ARG_INFO(0, other_options) /* ARRAY_INFO(0, other_options, 1) */
1878 ZEND_END_ARG_INFO()
1879 #endif
1880 /* }}} */
1881 /* {{{ quot_print.c */
1882 ZEND_BEGIN_ARG_INFO(arginfo_quoted_printable_decode, 0)
1883 ZEND_ARG_INFO(0, str)
1884 ZEND_END_ARG_INFO()
1885 /* }}} */
1886 /* {{{ quot_print.c */
1887 ZEND_BEGIN_ARG_INFO(arginfo_quoted_printable_encode, 0)
1888 ZEND_ARG_INFO(0, str)
1889 ZEND_END_ARG_INFO()
1890 /* }}} */
1891 /* {{{ mt_rand.c */
1892 ZEND_BEGIN_ARG_INFO_EX(arginfo_mt_srand, 0, 0, 0)
1893 ZEND_ARG_INFO(0, seed)
1894 ZEND_ARG_INFO(0, mode)
1895 ZEND_END_ARG_INFO()
1896
1897 ZEND_BEGIN_ARG_INFO_EX(arginfo_mt_rand, 0, 0, 0)
1898 ZEND_ARG_INFO(0, min)
1899 ZEND_ARG_INFO(0, max)
1900 ZEND_END_ARG_INFO()
1901
1902 ZEND_BEGIN_ARG_INFO(arginfo_mt_getrandmax, 0)
1903 ZEND_END_ARG_INFO()
1904 /* }}} */
1905 /* {{{ random.c */
1906 ZEND_BEGIN_ARG_INFO_EX(arginfo_random_bytes, 0, 0, 1)
1907 ZEND_ARG_INFO(0, length)
1908 ZEND_END_ARG_INFO()
1909
1910 ZEND_BEGIN_ARG_INFO_EX(arginfo_random_int, 0, 0, 2)
1911 ZEND_ARG_INFO(0, min)
1912 ZEND_ARG_INFO(0, max)
1913 ZEND_END_ARG_INFO()
1914 /* }}} */
1915 /* {{{ sha1.c */
1916 ZEND_BEGIN_ARG_INFO_EX(arginfo_sha1, 0, 0, 1)
1917 ZEND_ARG_INFO(0, str)
1918 ZEND_ARG_INFO(0, raw_output)
1919 ZEND_END_ARG_INFO()
1920
1921 ZEND_BEGIN_ARG_INFO_EX(arginfo_sha1_file, 0, 0, 1)
1922 ZEND_ARG_INFO(0, filename)
1923 ZEND_ARG_INFO(0, raw_output)
1924 ZEND_END_ARG_INFO()
1925 /* }}} */
1926 /* {{{ soundex.c */
1927 ZEND_BEGIN_ARG_INFO(arginfo_soundex, 0)
1928 ZEND_ARG_INFO(0, str)
1929 ZEND_END_ARG_INFO()
1930 /* }}} */
1931 /* {{{ streamsfuncs.c */
1932 #if HAVE_SOCKETPAIR
1933 ZEND_BEGIN_ARG_INFO(arginfo_stream_socket_pair, 0)
1934 ZEND_ARG_INFO(0, domain)
1935 ZEND_ARG_INFO(0, type)
1936 ZEND_ARG_INFO(0, protocol)
1937 ZEND_END_ARG_INFO()
1938 #endif
1939
1940 ZEND_BEGIN_ARG_INFO_EX(arginfo_stream_socket_client, 0, 0, 1)
1941 ZEND_ARG_INFO(0, remoteaddress)
1942 ZEND_ARG_INFO(1, errcode)
1943 ZEND_ARG_INFO(1, errstring)
1944 ZEND_ARG_INFO(0, timeout)
1945 ZEND_ARG_INFO(0, flags)
1946 ZEND_ARG_INFO(0, context)
1947 ZEND_END_ARG_INFO()
1948
1949 ZEND_BEGIN_ARG_INFO_EX(arginfo_stream_socket_server, 0, 0, 1)
1950 ZEND_ARG_INFO(0, localaddress)
1951 ZEND_ARG_INFO(1, errcode)
1952 ZEND_ARG_INFO(1, errstring)
1953 ZEND_ARG_INFO(0, flags)
1954 ZEND_ARG_INFO(0, context)
1955 ZEND_END_ARG_INFO()
1956
1957 ZEND_BEGIN_ARG_INFO_EX(arginfo_stream_socket_accept, 0, 0, 1)
1958 ZEND_ARG_INFO(0, serverstream)
1959 ZEND_ARG_INFO(0, timeout)
1960 ZEND_ARG_INFO(1, peername)
1961 ZEND_END_ARG_INFO()
1962
1963 ZEND_BEGIN_ARG_INFO(arginfo_stream_socket_get_name, 0)
1964 ZEND_ARG_INFO(0, stream)
1965 ZEND_ARG_INFO(0, want_peer)
1966 ZEND_END_ARG_INFO()
1967
1968 ZEND_BEGIN_ARG_INFO_EX(arginfo_stream_socket_sendto, 0, 0, 2)
1969 ZEND_ARG_INFO(0, stream)
1970 ZEND_ARG_INFO(0, data)
1971 ZEND_ARG_INFO(0, flags)
1972 ZEND_ARG_INFO(0, target_addr)
1973 ZEND_END_ARG_INFO()
1974
1975 ZEND_BEGIN_ARG_INFO_EX(arginfo_stream_socket_recvfrom, 0, 0, 2)
1976 ZEND_ARG_INFO(0, stream)
1977 ZEND_ARG_INFO(0, amount)
1978 ZEND_ARG_INFO(0, flags)
1979 ZEND_ARG_INFO(1, remote_addr)
1980 ZEND_END_ARG_INFO()
1981
1982 ZEND_BEGIN_ARG_INFO_EX(arginfo_stream_get_contents, 0, 0, 1)
1983 ZEND_ARG_INFO(0, source)
1984 ZEND_ARG_INFO(0, maxlen)
1985 ZEND_ARG_INFO(0, offset)
1986 ZEND_END_ARG_INFO()
1987
1988 ZEND_BEGIN_ARG_INFO_EX(arginfo_stream_copy_to_stream, 0, 0, 2)
1989 ZEND_ARG_INFO(0, source)
1990 ZEND_ARG_INFO(0, dest)
1991 ZEND_ARG_INFO(0, maxlen)
1992 ZEND_ARG_INFO(0, pos)
1993 ZEND_END_ARG_INFO()
1994
1995 ZEND_BEGIN_ARG_INFO(arginfo_stream_get_meta_data, 0)
1996 ZEND_ARG_INFO(0, fp)
1997 ZEND_END_ARG_INFO()
1998
1999 ZEND_BEGIN_ARG_INFO(arginfo_stream_get_transports, 0)
2000 ZEND_END_ARG_INFO()
2001
2002 ZEND_BEGIN_ARG_INFO(arginfo_stream_get_wrappers, 0)
2003 ZEND_END_ARG_INFO()
2004
2005 ZEND_BEGIN_ARG_INFO(arginfo_stream_resolve_include_path, 0)
2006 ZEND_ARG_INFO(0, filename)
2007 ZEND_END_ARG_INFO()
2008
2009 ZEND_BEGIN_ARG_INFO(arginfo_stream_is_local, 0)
2010 ZEND_ARG_INFO(0, stream)
2011 ZEND_END_ARG_INFO()
2012
2013 ZEND_BEGIN_ARG_INFO_EX(arginfo_stream_supports_lock, 0, 0, 1)
2014 ZEND_ARG_INFO(0, stream)
2015 ZEND_END_ARG_INFO()
2016
2017 ZEND_BEGIN_ARG_INFO_EX(arginfo_stream_select, 0, 0, 4)
2018 ZEND_ARG_INFO(1, read_streams) /* ARRAY_INFO(1, read_streams, 1) */
2019 ZEND_ARG_INFO(1, write_streams) /* ARRAY_INFO(1, write_streams, 1) */
2020 ZEND_ARG_INFO(1, except_streams) /* ARRAY_INFO(1, except_streams, 1) */
2021 ZEND_ARG_INFO(0, tv_sec)
2022 ZEND_ARG_INFO(0, tv_usec)
2023 ZEND_END_ARG_INFO()
2024
2025 ZEND_BEGIN_ARG_INFO(arginfo_stream_context_get_options, 0)
2026 ZEND_ARG_INFO(0, stream_or_context)
2027 ZEND_END_ARG_INFO()
2028
2029 ZEND_BEGIN_ARG_INFO(arginfo_stream_context_set_option, 0)
2030 ZEND_ARG_INFO(0, stream_or_context)
2031 ZEND_ARG_INFO(0, wrappername)
2032 ZEND_ARG_INFO(0, optionname)
2033 ZEND_ARG_INFO(0, value)
2034 ZEND_END_ARG_INFO()
2035
2036 ZEND_BEGIN_ARG_INFO(arginfo_stream_context_set_params, 0)
2037 ZEND_ARG_INFO(0, stream_or_context)
2038 ZEND_ARG_INFO(0, options) /* ARRAY_INFO(0, options, 1) */
2039 ZEND_END_ARG_INFO()
2040
2041 ZEND_BEGIN_ARG_INFO_EX(arginfo_stream_context_get_params, 0, ZEND_RETURN_VALUE, 1)
2042 ZEND_ARG_INFO(0, stream_or_context)
2043 ZEND_END_ARG_INFO()
2044
2045 ZEND_BEGIN_ARG_INFO_EX(arginfo_stream_context_get_default, 0, 0, 0)
2046 ZEND_ARG_INFO(0, options) /* ARRAY_INFO(0, options, 1) */
2047 ZEND_END_ARG_INFO()
2048
2049 ZEND_BEGIN_ARG_INFO(arginfo_stream_context_set_default, 0)
2050 ZEND_ARG_INFO(0, options)
2051 ZEND_END_ARG_INFO()
2052
2053 ZEND_BEGIN_ARG_INFO_EX(arginfo_stream_context_create, 0, 0, 0)
2054 ZEND_ARG_INFO(0, options) /* ARRAY_INFO(0, options, 1) */
2055 ZEND_ARG_INFO(0, params) /* ARRAY_INFO(0, params, 1) */
2056 ZEND_END_ARG_INFO()
2057
2058 ZEND_BEGIN_ARG_INFO_EX(arginfo_stream_filter_prepend, 0, 0, 2)
2059 ZEND_ARG_INFO(0, stream)
2060 ZEND_ARG_INFO(0, filtername)
2061 ZEND_ARG_INFO(0, read_write)
2062 ZEND_ARG_INFO(0, filterparams)
2063 ZEND_END_ARG_INFO()
2064
2065 ZEND_BEGIN_ARG_INFO_EX(arginfo_stream_filter_append, 0, 0, 2)
2066 ZEND_ARG_INFO(0, stream)
2067 ZEND_ARG_INFO(0, filtername)
2068 ZEND_ARG_INFO(0, read_write)
2069 ZEND_ARG_INFO(0, filterparams)
2070 ZEND_END_ARG_INFO()
2071
2072 ZEND_BEGIN_ARG_INFO(arginfo_stream_filter_remove, 0)
2073 ZEND_ARG_INFO(0, stream_filter)
2074 ZEND_END_ARG_INFO()
2075
2076 ZEND_BEGIN_ARG_INFO_EX(arginfo_stream_get_line, 0, 0, 2)
2077 ZEND_ARG_INFO(0, stream)
2078 ZEND_ARG_INFO(0, maxlen)
2079 ZEND_ARG_INFO(0, ending)
2080 ZEND_END_ARG_INFO()
2081
2082 ZEND_BEGIN_ARG_INFO(arginfo_stream_set_blocking, 0)
2083 ZEND_ARG_INFO(0, socket)
2084 ZEND_ARG_INFO(0, mode)
2085 ZEND_END_ARG_INFO()
2086
2087 #if HAVE_SYS_TIME_H || defined(PHP_WIN32)
2088 ZEND_BEGIN_ARG_INFO_EX(arginfo_stream_set_timeout, 0, 0, 2)
2089 ZEND_ARG_INFO(0, stream)
2090 ZEND_ARG_INFO(0, seconds)
2091 ZEND_ARG_INFO(0, microseconds)
2092 ZEND_END_ARG_INFO()
2093 #endif
2094
2095 ZEND_BEGIN_ARG_INFO(arginfo_stream_set_read_buffer, 0)
2096 ZEND_ARG_INFO(0, fp)
2097 ZEND_ARG_INFO(0, buffer)
2098 ZEND_END_ARG_INFO()
2099
2100 ZEND_BEGIN_ARG_INFO(arginfo_stream_set_write_buffer, 0)
2101 ZEND_ARG_INFO(0, fp)
2102 ZEND_ARG_INFO(0, buffer)
2103 ZEND_END_ARG_INFO()
2104
2105 ZEND_BEGIN_ARG_INFO(arginfo_stream_set_chunk_size, 0)
2106 ZEND_ARG_INFO(0, fp)
2107 ZEND_ARG_INFO(0, chunk_size)
2108 ZEND_END_ARG_INFO()
2109
2110 ZEND_BEGIN_ARG_INFO_EX(arginfo_stream_socket_enable_crypto, 0, 0, 2)
2111 ZEND_ARG_INFO(0, stream)
2112 ZEND_ARG_INFO(0, enable)
2113 ZEND_ARG_INFO(0, cryptokind)
2114 ZEND_ARG_INFO(0, sessionstream)
2115 ZEND_END_ARG_INFO()
2116
2117 #ifdef HAVE_SHUTDOWN
2118 ZEND_BEGIN_ARG_INFO(arginfo_stream_socket_shutdown, 0)
2119 ZEND_ARG_INFO(0, stream)
2120 ZEND_ARG_INFO(0, how)
2121 ZEND_END_ARG_INFO()
2122 #endif
2123 /* }}} */
2124 /* {{{ string.c */
2125 ZEND_BEGIN_ARG_INFO(arginfo_bin2hex, 0)
2126 ZEND_ARG_INFO(0, data)
2127 ZEND_END_ARG_INFO()
2128
2129 ZEND_BEGIN_ARG_INFO(arginfo_hex2bin, 0)
2130 ZEND_ARG_INFO(0, data)
2131 ZEND_END_ARG_INFO()
2132
2133 ZEND_BEGIN_ARG_INFO_EX(arginfo_strspn, 0, 0, 2)
2134 ZEND_ARG_INFO(0, str)
2135 ZEND_ARG_INFO(0, mask)
2136 ZEND_ARG_INFO(0, start)
2137 ZEND_ARG_INFO(0, len)
2138 ZEND_END_ARG_INFO()
2139
2140 ZEND_BEGIN_ARG_INFO_EX(arginfo_strcspn, 0, 0, 2)
2141 ZEND_ARG_INFO(0, str)
2142 ZEND_ARG_INFO(0, mask)
2143 ZEND_ARG_INFO(0, start)
2144 ZEND_ARG_INFO(0, len)
2145 ZEND_END_ARG_INFO()
2146
2147 #if HAVE_NL_LANGINFO
2148 ZEND_BEGIN_ARG_INFO(arginfo_nl_langinfo, 0)
2149 ZEND_ARG_INFO(0, item)
2150 ZEND_END_ARG_INFO()
2151 #endif
2152
2153 #ifdef HAVE_STRCOLL
2154 ZEND_BEGIN_ARG_INFO(arginfo_strcoll, 0)
2155 ZEND_ARG_INFO(0, str1)
2156 ZEND_ARG_INFO(0, str2)
2157 ZEND_END_ARG_INFO()
2158 #endif
2159
2160 ZEND_BEGIN_ARG_INFO_EX(arginfo_trim, 0, 0, 1)
2161 ZEND_ARG_INFO(0, str)
2162 ZEND_ARG_INFO(0, character_mask)
2163 ZEND_END_ARG_INFO()
2164
2165 ZEND_BEGIN_ARG_INFO_EX(arginfo_rtrim, 0, 0, 1)
2166 ZEND_ARG_INFO(0, str)
2167 ZEND_ARG_INFO(0, character_mask)
2168 ZEND_END_ARG_INFO()
2169
2170 ZEND_BEGIN_ARG_INFO_EX(arginfo_ltrim, 0, 0, 1)
2171 ZEND_ARG_INFO(0, str)
2172 ZEND_ARG_INFO(0, character_mask)
2173 ZEND_END_ARG_INFO()
2174
2175 ZEND_BEGIN_ARG_INFO_EX(arginfo_wordwrap, 0, 0, 1)
2176 ZEND_ARG_INFO(0, str)
2177 ZEND_ARG_INFO(0, width)
2178 ZEND_ARG_INFO(0, break)
2179 ZEND_ARG_INFO(0, cut)
2180 ZEND_END_ARG_INFO()
2181
2182 ZEND_BEGIN_ARG_INFO_EX(arginfo_explode, 0, 0, 2)
2183 ZEND_ARG_INFO(0, separator)
2184 ZEND_ARG_INFO(0, str)
2185 ZEND_ARG_INFO(0, limit)
2186 ZEND_END_ARG_INFO()
2187
2188 ZEND_BEGIN_ARG_INFO(arginfo_implode, 0)
2189 ZEND_ARG_INFO(0, glue)
2190 ZEND_ARG_INFO(0, pieces)
2191 ZEND_END_ARG_INFO()
2192
2193 ZEND_BEGIN_ARG_INFO_EX(arginfo_strtok, 0, 0, 1)
2194 ZEND_ARG_INFO(0, str)
2195 ZEND_ARG_INFO(0, token)
2196 ZEND_END_ARG_INFO()
2197
2198 ZEND_BEGIN_ARG_INFO(arginfo_strtoupper, 0)
2199 ZEND_ARG_INFO(0, str)
2200 ZEND_END_ARG_INFO()
2201
2202 ZEND_BEGIN_ARG_INFO(arginfo_strtolower, 0)
2203 ZEND_ARG_INFO(0, str)
2204 ZEND_END_ARG_INFO()
2205
2206 ZEND_BEGIN_ARG_INFO_EX(arginfo_basename, 0, 0, 1)
2207 ZEND_ARG_INFO(0, path)
2208 ZEND_ARG_INFO(0, suffix)
2209 ZEND_END_ARG_INFO()
2210
2211 ZEND_BEGIN_ARG_INFO_EX(arginfo_dirname, 0, 0, 1)
2212 ZEND_ARG_INFO(0, path)
2213 ZEND_ARG_INFO(0, levels)
2214 ZEND_END_ARG_INFO()
2215
2216 ZEND_BEGIN_ARG_INFO_EX(arginfo_pathinfo, 0, 0, 1)
2217 ZEND_ARG_INFO(0, path)
2218 ZEND_ARG_INFO(0, options)
2219 ZEND_END_ARG_INFO()
2220
2221 ZEND_BEGIN_ARG_INFO_EX(arginfo_stristr, 0, 0, 2)
2222 ZEND_ARG_INFO(0, haystack)
2223 ZEND_ARG_INFO(0, needle)
2224 ZEND_ARG_INFO(0, part)
2225 ZEND_END_ARG_INFO()
2226
2227 ZEND_BEGIN_ARG_INFO_EX(arginfo_strstr, 0, 0, 2)
2228 ZEND_ARG_INFO(0, haystack)
2229 ZEND_ARG_INFO(0, needle)
2230 ZEND_ARG_INFO(0, part)
2231 ZEND_END_ARG_INFO()
2232
2233 ZEND_BEGIN_ARG_INFO_EX(arginfo_strpos, 0, 0, 2)
2234 ZEND_ARG_INFO(0, haystack)
2235 ZEND_ARG_INFO(0, needle)
2236 ZEND_ARG_INFO(0, offset)
2237 ZEND_END_ARG_INFO()
2238
2239 ZEND_BEGIN_ARG_INFO_EX(arginfo_stripos, 0, 0, 2)
2240 ZEND_ARG_INFO(0, haystack)
2241 ZEND_ARG_INFO(0, needle)
2242 ZEND_ARG_INFO(0, offset)
2243 ZEND_END_ARG_INFO()
2244
2245 ZEND_BEGIN_ARG_INFO_EX(arginfo_strrpos, 0, 0, 2)
2246 ZEND_ARG_INFO(0, haystack)
2247 ZEND_ARG_INFO(0, needle)
2248 ZEND_ARG_INFO(0, offset)
2249 ZEND_END_ARG_INFO()
2250
2251 ZEND_BEGIN_ARG_INFO_EX(arginfo_strripos, 0, 0, 2)
2252 ZEND_ARG_INFO(0, haystack)
2253 ZEND_ARG_INFO(0, needle)
2254 ZEND_ARG_INFO(0, offset)
2255 ZEND_END_ARG_INFO()
2256
2257 ZEND_BEGIN_ARG_INFO(arginfo_strrchr, 0)
2258 ZEND_ARG_INFO(0, haystack)
2259 ZEND_ARG_INFO(0, needle)
2260 ZEND_END_ARG_INFO()
2261
2262 ZEND_BEGIN_ARG_INFO_EX(arginfo_chunk_split, 0, 0, 1)
2263 ZEND_ARG_INFO(0, str)
2264 ZEND_ARG_INFO(0, chunklen)
2265 ZEND_ARG_INFO(0, ending)
2266 ZEND_END_ARG_INFO()
2267
2268 ZEND_BEGIN_ARG_INFO_EX(arginfo_substr, 0, 0, 2)
2269 ZEND_ARG_INFO(0, str)
2270 ZEND_ARG_INFO(0, start)
2271 ZEND_ARG_INFO(0, length)
2272 ZEND_END_ARG_INFO()
2273
2274 ZEND_BEGIN_ARG_INFO_EX(arginfo_substr_replace, 0, 0, 3)
2275 ZEND_ARG_INFO(0, str)
2276 ZEND_ARG_INFO(0, replace)
2277 ZEND_ARG_INFO(0, start)
2278 ZEND_ARG_INFO(0, length)
2279 ZEND_END_ARG_INFO()
2280
2281 ZEND_BEGIN_ARG_INFO(arginfo_quotemeta, 0)
2282 ZEND_ARG_INFO(0, str)
2283 ZEND_END_ARG_INFO()
2284
2285 ZEND_BEGIN_ARG_INFO(arginfo_ord, 0)
2286 ZEND_ARG_INFO(0, character)
2287 ZEND_END_ARG_INFO()
2288
2289 ZEND_BEGIN_ARG_INFO(arginfo_chr, 0)
2290 ZEND_ARG_INFO(0, codepoint)
2291 ZEND_END_ARG_INFO()
2292
2293 ZEND_BEGIN_ARG_INFO(arginfo_ucfirst, 0)
2294 ZEND_ARG_INFO(0, str)
2295 ZEND_END_ARG_INFO()
2296
2297 ZEND_BEGIN_ARG_INFO(arginfo_lcfirst, 0)
2298 ZEND_ARG_INFO(0, str)
2299 ZEND_END_ARG_INFO()
2300
2301 ZEND_BEGIN_ARG_INFO_EX(arginfo_ucwords, 0, 0, 1)
2302 ZEND_ARG_INFO(0, str)
2303 ZEND_ARG_INFO(0, delimiters)
2304 ZEND_END_ARG_INFO()
2305
2306 ZEND_BEGIN_ARG_INFO_EX(arginfo_strtr, 0, 0, 2)
2307 ZEND_ARG_INFO(0, str)
2308 ZEND_ARG_INFO(0, from)
2309 ZEND_ARG_INFO(0, to)
2310 ZEND_END_ARG_INFO()
2311
2312 ZEND_BEGIN_ARG_INFO(arginfo_strrev, 0)
2313 ZEND_ARG_INFO(0, str)
2314 ZEND_END_ARG_INFO()
2315
2316 ZEND_BEGIN_ARG_INFO_EX(arginfo_similar_text, 0, 0, 2)
2317 ZEND_ARG_INFO(0, str1)
2318 ZEND_ARG_INFO(0, str2)
2319 ZEND_ARG_INFO(1, percent)
2320 ZEND_END_ARG_INFO()
2321
2322 ZEND_BEGIN_ARG_INFO(arginfo_addcslashes, 0)
2323 ZEND_ARG_INFO(0, str)
2324 ZEND_ARG_INFO(0, charlist)
2325 ZEND_END_ARG_INFO()
2326
2327 ZEND_BEGIN_ARG_INFO(arginfo_addslashes, 0)
2328 ZEND_ARG_INFO(0, str)
2329 ZEND_END_ARG_INFO()
2330
2331 ZEND_BEGIN_ARG_INFO(arginfo_stripcslashes, 0)
2332 ZEND_ARG_INFO(0, str)
2333 ZEND_END_ARG_INFO()
2334
2335 ZEND_BEGIN_ARG_INFO(arginfo_stripslashes, 0)
2336 ZEND_ARG_INFO(0, str)
2337 ZEND_END_ARG_INFO()
2338
2339 ZEND_BEGIN_ARG_INFO_EX(arginfo_str_replace, 0, 0, 3)
2340 ZEND_ARG_INFO(0, search)
2341 ZEND_ARG_INFO(0, replace)
2342 ZEND_ARG_INFO(0, subject)
2343 ZEND_ARG_INFO(1, replace_count)
2344 ZEND_END_ARG_INFO()
2345
2346 ZEND_BEGIN_ARG_INFO_EX(arginfo_str_ireplace, 0, 0, 3)
2347 ZEND_ARG_INFO(0, search)
2348 ZEND_ARG_INFO(0, replace)
2349 ZEND_ARG_INFO(0, subject)
2350 ZEND_ARG_INFO(1, replace_count)
2351 ZEND_END_ARG_INFO()
2352
2353 ZEND_BEGIN_ARG_INFO_EX(arginfo_hebrev, 0, 0, 1)
2354 ZEND_ARG_INFO(0, str)
2355 ZEND_ARG_INFO(0, max_chars_per_line)
2356 ZEND_END_ARG_INFO()
2357
2358 ZEND_BEGIN_ARG_INFO_EX(arginfo_hebrevc, 0, 0, 1)
2359 ZEND_ARG_INFO(0, str)
2360 ZEND_ARG_INFO(0, max_chars_per_line)
2361 ZEND_END_ARG_INFO()
2362
2363 ZEND_BEGIN_ARG_INFO_EX(arginfo_nl2br, 0, 0, 1)
2364 ZEND_ARG_INFO(0, str)
2365 ZEND_ARG_INFO(0, is_xhtml)
2366 ZEND_END_ARG_INFO()
2367
2368 ZEND_BEGIN_ARG_INFO_EX(arginfo_strip_tags, 0, 0, 1)
2369 ZEND_ARG_INFO(0, str)
2370 ZEND_ARG_INFO(0, allowable_tags)
2371 ZEND_END_ARG_INFO()
2372
2373 ZEND_BEGIN_ARG_INFO_EX(arginfo_setlocale, 0, 0, 2)
2374 ZEND_ARG_INFO(0, category)
2375 ZEND_ARG_VARIADIC_INFO(0, locales)
2376 ZEND_END_ARG_INFO()
2377
2378 ZEND_BEGIN_ARG_INFO_EX(arginfo_parse_str, 0, 0, 1)
2379 ZEND_ARG_INFO(0, encoded_string)
2380 ZEND_ARG_INFO(1, result)
2381 ZEND_END_ARG_INFO()
2382
2383 ZEND_BEGIN_ARG_INFO_EX(arginfo_str_getcsv, 0, 0, 1)
2384 ZEND_ARG_INFO(0, string)
2385 ZEND_ARG_INFO(0, delimiter)
2386 ZEND_ARG_INFO(0, enclosure)
2387 ZEND_ARG_INFO(0, escape)
2388 ZEND_END_ARG_INFO()
2389
2390 ZEND_BEGIN_ARG_INFO(arginfo_str_repeat, 0)
2391 ZEND_ARG_INFO(0, input)
2392 ZEND_ARG_INFO(0, mult)
2393 ZEND_END_ARG_INFO()
2394
2395 ZEND_BEGIN_ARG_INFO_EX(arginfo_count_chars, 0, 0, 1)
2396 ZEND_ARG_INFO(0, input)
2397 ZEND_ARG_INFO(0, mode)
2398 ZEND_END_ARG_INFO()
2399
2400 ZEND_BEGIN_ARG_INFO(arginfo_strnatcmp, 0)
2401 ZEND_ARG_INFO(0, s1)
2402 ZEND_ARG_INFO(0, s2)
2403 ZEND_END_ARG_INFO()
2404
2405 ZEND_BEGIN_ARG_INFO(arginfo_localeconv, 0)
2406 ZEND_END_ARG_INFO()
2407
2408 ZEND_BEGIN_ARG_INFO(arginfo_strnatcasecmp, 0)
2409 ZEND_ARG_INFO(0, s1)
2410 ZEND_ARG_INFO(0, s2)
2411 ZEND_END_ARG_INFO()
2412
2413 ZEND_BEGIN_ARG_INFO_EX(arginfo_substr_count, 0, 0, 2)
2414 ZEND_ARG_INFO(0, haystack)
2415 ZEND_ARG_INFO(0, needle)
2416 ZEND_ARG_INFO(0, offset)
2417 ZEND_ARG_INFO(0, length)
2418 ZEND_END_ARG_INFO()
2419
2420 ZEND_BEGIN_ARG_INFO_EX(arginfo_str_pad, 0, 0, 2)
2421 ZEND_ARG_INFO(0, input)
2422 ZEND_ARG_INFO(0, pad_length)
2423 ZEND_ARG_INFO(0, pad_string)
2424 ZEND_ARG_INFO(0, pad_type)
2425 ZEND_END_ARG_INFO()
2426
2427 ZEND_BEGIN_ARG_INFO_EX(arginfo_sscanf, 0, 0, 2)
2428 ZEND_ARG_INFO(0, str)
2429 ZEND_ARG_INFO(0, format)
2430 ZEND_ARG_VARIADIC_INFO(1, vars)
2431 ZEND_END_ARG_INFO()
2432
2433 ZEND_BEGIN_ARG_INFO(arginfo_str_rot13, 0)
2434 ZEND_ARG_INFO(0, str)
2435 ZEND_END_ARG_INFO()
2436
2437 ZEND_BEGIN_ARG_INFO(arginfo_str_shuffle, 0)
2438 ZEND_ARG_INFO(0, str)
2439 ZEND_END_ARG_INFO()
2440
2441 ZEND_BEGIN_ARG_INFO_EX(arginfo_str_word_count, 0, 0, 1)
2442 ZEND_ARG_INFO(0, str)
2443 ZEND_ARG_INFO(0, format)
2444 ZEND_ARG_INFO(0, charlist)
2445 ZEND_END_ARG_INFO()
2446
2447 #ifdef HAVE_STRFMON
2448 ZEND_BEGIN_ARG_INFO(arginfo_money_format, 0)
2449 ZEND_ARG_INFO(0, format)
2450 ZEND_ARG_INFO(0, value)
2451 ZEND_END_ARG_INFO()
2452 #endif
2453
2454 ZEND_BEGIN_ARG_INFO_EX(arginfo_str_split, 0, 0, 1)
2455 ZEND_ARG_INFO(0, str)
2456 ZEND_ARG_INFO(0, split_length)
2457 ZEND_END_ARG_INFO()
2458
2459 ZEND_BEGIN_ARG_INFO_EX(arginfo_strpbrk, 0, 0, 2)
2460 ZEND_ARG_INFO(0, haystack)
2461 ZEND_ARG_INFO(0, char_list)
2462 ZEND_END_ARG_INFO()
2463
2464 ZEND_BEGIN_ARG_INFO_EX(arginfo_substr_compare, 0, 0, 3)
2465 ZEND_ARG_INFO(0, main_str)
2466 ZEND_ARG_INFO(0, str)
2467 ZEND_ARG_INFO(0, offset)
2468 ZEND_ARG_INFO(0, length)
2469 ZEND_ARG_INFO(0, case_sensitivity)
2470 ZEND_END_ARG_INFO()
2471 /* }}} */
2472 /* {{{ syslog.c */
2473 #ifdef HAVE_SYSLOG_H
2474 ZEND_BEGIN_ARG_INFO(arginfo_openlog, 0)
2475 ZEND_ARG_INFO(0, ident)
2476 ZEND_ARG_INFO(0, option)
2477 ZEND_ARG_INFO(0, facility)
2478 ZEND_END_ARG_INFO()
2479
2480 ZEND_BEGIN_ARG_INFO(arginfo_closelog, 0)
2481 ZEND_END_ARG_INFO()
2482
2483 ZEND_BEGIN_ARG_INFO(arginfo_syslog, 0)
2484 ZEND_ARG_INFO(0, priority)
2485 ZEND_ARG_INFO(0, message)
2486 ZEND_END_ARG_INFO()
2487 #endif
2488 /* }}} */
2489 /* {{{ type.c */
2490 ZEND_BEGIN_ARG_INFO(arginfo_gettype, 0)
2491 ZEND_ARG_INFO(0, var)
2492 ZEND_END_ARG_INFO()
2493
2494 ZEND_BEGIN_ARG_INFO(arginfo_settype, 0)
2495 ZEND_ARG_INFO(1, var)
2496 ZEND_ARG_INFO(0, type)
2497 ZEND_END_ARG_INFO()
2498
2499 ZEND_BEGIN_ARG_INFO_EX(arginfo_intval, 0, 0, 1)
2500 ZEND_ARG_INFO(0, var)
2501 ZEND_ARG_INFO(0, base)
2502 ZEND_END_ARG_INFO()
2503
2504 ZEND_BEGIN_ARG_INFO(arginfo_floatval, 0)
2505 ZEND_ARG_INFO(0, var)
2506 ZEND_END_ARG_INFO()
2507
2508 ZEND_BEGIN_ARG_INFO(arginfo_strval, 0)
2509 ZEND_ARG_INFO(0, var)
2510 ZEND_END_ARG_INFO()
2511
2512 ZEND_BEGIN_ARG_INFO(arginfo_boolval, 0)
2513 ZEND_ARG_INFO(0, var)
2514 ZEND_END_ARG_INFO()
2515
2516 ZEND_BEGIN_ARG_INFO(arginfo_is_null, 0)
2517 ZEND_ARG_INFO(0, var)
2518 ZEND_END_ARG_INFO()
2519
2520 ZEND_BEGIN_ARG_INFO(arginfo_is_resource, 0)
2521 ZEND_ARG_INFO(0, var)
2522 ZEND_END_ARG_INFO()
2523
2524 ZEND_BEGIN_ARG_INFO(arginfo_is_bool, 0)
2525 ZEND_ARG_INFO(0, var)
2526 ZEND_END_ARG_INFO()
2527
2528 ZEND_BEGIN_ARG_INFO(arginfo_is_int, 0)
2529 ZEND_ARG_INFO(0, var)
2530 ZEND_END_ARG_INFO()
2531
2532 ZEND_BEGIN_ARG_INFO(arginfo_is_float, 0)
2533 ZEND_ARG_INFO(0, var)
2534 ZEND_END_ARG_INFO()
2535
2536 ZEND_BEGIN_ARG_INFO(arginfo_is_string, 0)
2537 ZEND_ARG_INFO(0, var)
2538 ZEND_END_ARG_INFO()
2539
2540 ZEND_BEGIN_ARG_INFO(arginfo_is_array, 0)
2541 ZEND_ARG_INFO(0, var)
2542 ZEND_END_ARG_INFO()
2543
2544 ZEND_BEGIN_ARG_INFO(arginfo_is_object, 0)
2545 ZEND_ARG_INFO(0, var)
2546 ZEND_END_ARG_INFO()
2547
2548 ZEND_BEGIN_ARG_INFO(arginfo_is_numeric, 0)
2549 ZEND_ARG_INFO(0, value)
2550 ZEND_END_ARG_INFO()
2551
2552 ZEND_BEGIN_ARG_INFO(arginfo_is_scalar, 0)
2553 ZEND_ARG_INFO(0, value)
2554 ZEND_END_ARG_INFO()
2555
2556 ZEND_BEGIN_ARG_INFO_EX(arginfo_is_callable, 0, 0, 1)
2557 ZEND_ARG_INFO(0, var)
2558 ZEND_ARG_INFO(0, syntax_only)
2559 ZEND_ARG_INFO(1, callable_name)
2560 ZEND_END_ARG_INFO()
2561
2562 ZEND_BEGIN_ARG_INFO_EX(arginfo_is_iterable, 0, 0, 1)
2563 ZEND_ARG_INFO(0, var)
2564 ZEND_END_ARG_INFO()
2565 /* }}} */
2566 /* {{{ uniqid.c */
2567 #ifdef HAVE_GETTIMEOFDAY
2568 ZEND_BEGIN_ARG_INFO_EX(arginfo_uniqid, 0, 0, 0)
2569 ZEND_ARG_INFO(0, prefix)
2570 ZEND_ARG_INFO(0, more_entropy)
2571 ZEND_END_ARG_INFO()
2572 #endif
2573 /* }}} */
2574 /* {{{ url.c */
2575 ZEND_BEGIN_ARG_INFO_EX(arginfo_parse_url, 0, 0, 1)
2576 ZEND_ARG_INFO(0, url)
2577 ZEND_ARG_INFO(0, component)
2578 ZEND_END_ARG_INFO()
2579
2580 ZEND_BEGIN_ARG_INFO(arginfo_urlencode, 0)
2581 ZEND_ARG_INFO(0, str)
2582 ZEND_END_ARG_INFO()
2583
2584 ZEND_BEGIN_ARG_INFO(arginfo_urldecode, 0)
2585 ZEND_ARG_INFO(0, str)
2586 ZEND_END_ARG_INFO()
2587
2588 ZEND_BEGIN_ARG_INFO(arginfo_rawurlencode, 0)
2589 ZEND_ARG_INFO(0, str)
2590 ZEND_END_ARG_INFO()
2591
2592 ZEND_BEGIN_ARG_INFO(arginfo_rawurldecode, 0)
2593 ZEND_ARG_INFO(0, str)
2594 ZEND_END_ARG_INFO()
2595
2596 ZEND_BEGIN_ARG_INFO_EX(arginfo_get_headers, 0, 0, 1)
2597 ZEND_ARG_INFO(0, url)
2598 ZEND_ARG_INFO(0, format)
2599 ZEND_ARG_INFO(0, context)
2600 ZEND_END_ARG_INFO()
2601 /* }}} */
2602 /* {{{ user_filters.c */
2603 ZEND_BEGIN_ARG_INFO(arginfo_stream_bucket_make_writeable, 0)
2604 ZEND_ARG_INFO(0, brigade)
2605 ZEND_END_ARG_INFO()
2606
2607 ZEND_BEGIN_ARG_INFO(arginfo_stream_bucket_prepend, 0)
2608 ZEND_ARG_INFO(0, brigade)
2609 ZEND_ARG_INFO(0, bucket)
2610 ZEND_END_ARG_INFO()
2611
2612 ZEND_BEGIN_ARG_INFO(arginfo_stream_bucket_append, 0)
2613 ZEND_ARG_INFO(0, brigade)
2614 ZEND_ARG_INFO(0, bucket)
2615 ZEND_END_ARG_INFO()
2616
2617 ZEND_BEGIN_ARG_INFO(arginfo_stream_bucket_new, 0)
2618 ZEND_ARG_INFO(0, stream)
2619 ZEND_ARG_INFO(0, buffer)
2620 ZEND_END_ARG_INFO()
2621
2622 ZEND_BEGIN_ARG_INFO(arginfo_stream_get_filters, 0)
2623 ZEND_END_ARG_INFO()
2624
2625 ZEND_BEGIN_ARG_INFO(arginfo_stream_filter_register, 0)
2626 ZEND_ARG_INFO(0, filtername)
2627 ZEND_ARG_INFO(0, classname)
2628 ZEND_END_ARG_INFO()
2629 /* }}} */
2630 /* {{{ uuencode.c */
2631 ZEND_BEGIN_ARG_INFO(arginfo_convert_uuencode, 0)
2632 ZEND_ARG_INFO(0, data)
2633 ZEND_END_ARG_INFO()
2634
2635 ZEND_BEGIN_ARG_INFO(arginfo_convert_uudecode, 0)
2636 ZEND_ARG_INFO(0, data)
2637 ZEND_END_ARG_INFO()
2638 /* }}} */
2639 /* {{{ var.c */
2640 ZEND_BEGIN_ARG_INFO_EX(arginfo_var_dump, 0, 0, 1)
2641 ZEND_ARG_VARIADIC_INFO(0, vars)
2642 ZEND_END_ARG_INFO()
2643
2644 ZEND_BEGIN_ARG_INFO_EX(arginfo_debug_zval_dump, 0, 0, 1)
2645 ZEND_ARG_VARIADIC_INFO(0, vars)
2646 ZEND_END_ARG_INFO()
2647
2648 ZEND_BEGIN_ARG_INFO_EX(arginfo_var_export, 0, 0, 1)
2649 ZEND_ARG_INFO(0, var)
2650 ZEND_ARG_INFO(0, return)
2651 ZEND_END_ARG_INFO()
2652
2653 ZEND_BEGIN_ARG_INFO(arginfo_serialize, 0)
2654 ZEND_ARG_INFO(0, var)
2655 ZEND_END_ARG_INFO()
2656
2657 ZEND_BEGIN_ARG_INFO_EX(arginfo_unserialize, 0, 0, 1)
2658 ZEND_ARG_INFO(0, variable_representation)
2659 ZEND_ARG_INFO(0, allowed_classes)
2660 ZEND_END_ARG_INFO()
2661
2662 ZEND_BEGIN_ARG_INFO_EX(arginfo_memory_get_usage, 0, 0, 0)
2663 ZEND_ARG_INFO(0, real_usage)
2664 ZEND_END_ARG_INFO()
2665
2666 ZEND_BEGIN_ARG_INFO_EX(arginfo_memory_get_peak_usage, 0, 0, 0)
2667 ZEND_ARG_INFO(0, real_usage)
2668 ZEND_END_ARG_INFO()
2669 /* }}} */
2670 /* {{{ versioning.c */
2671 ZEND_BEGIN_ARG_INFO_EX(arginfo_version_compare, 0, 0, 2)
2672 ZEND_ARG_INFO(0, ver1)
2673 ZEND_ARG_INFO(0, ver2)
2674 ZEND_ARG_INFO(0, oper)
2675 ZEND_END_ARG_INFO()
2676 /* }}} */
2677 /* {{{ win32/codepage.c */
2678 #ifdef PHP_WIN32
2679 ZEND_BEGIN_ARG_INFO_EX(arginfo_sapi_windows_cp_set, 0, 0, 1)
2680 ZEND_ARG_TYPE_INFO(0, code_page, IS_LONG, 0)
2681 ZEND_END_ARG_INFO()
2682
2683 ZEND_BEGIN_ARG_INFO_EX(arginfo_sapi_windows_cp_get, 0, 0, 0)
2684 ZEND_END_ARG_INFO()
2685
2686 ZEND_BEGIN_ARG_INFO_EX(arginfo_sapi_windows_cp_is_utf8, 0, 0, 0)
2687 ZEND_END_ARG_INFO()
2688
2689 ZEND_BEGIN_ARG_INFO_EX(arginfo_sapi_windows_cp_conv, 0, 0, 3)
2690 ZEND_ARG_INFO(0, in_codepage)
2691 ZEND_ARG_INFO(0, out_codepage)
2692 ZEND_ARG_TYPE_INFO(0, subject, IS_STRING, 0)
2693 ZEND_END_ARG_INFO()
2694 #endif
2695 /* }}} */
2696 /* }}} */
2697
2698 const zend_function_entry basic_functions[] = { /* {{{ */
2699 PHP_FE(constant, arginfo_constant)
2700 PHP_FE(bin2hex, arginfo_bin2hex)
2701 PHP_FE(hex2bin, arginfo_hex2bin)
2702 PHP_FE(sleep, arginfo_sleep)
2703 PHP_FE(usleep, arginfo_usleep)
2704 #if HAVE_NANOSLEEP
2705 PHP_FE(time_nanosleep, arginfo_time_nanosleep)
2706 PHP_FE(time_sleep_until, arginfo_time_sleep_until)
2707 #endif
2708
2709 #if HAVE_STRPTIME
2710 PHP_FE(strptime, arginfo_strptime)
2711 #endif
2712
2713 PHP_FE(flush, arginfo_flush)
2714 PHP_FE(wordwrap, arginfo_wordwrap)
2715 PHP_FE(htmlspecialchars, arginfo_htmlspecialchars)
2716 PHP_FE(htmlentities, arginfo_htmlentities)
2717 PHP_FE(html_entity_decode, arginfo_html_entity_decode)
2718 PHP_FE(htmlspecialchars_decode, arginfo_htmlspecialchars_decode)
2719 PHP_FE(get_html_translation_table, arginfo_get_html_translation_table)
2720 PHP_FE(sha1, arginfo_sha1)
2721 PHP_FE(sha1_file, arginfo_sha1_file)
2722 PHP_NAMED_FE(md5,php_if_md5, arginfo_md5)
2723 PHP_NAMED_FE(md5_file,php_if_md5_file, arginfo_md5_file)
2724 PHP_NAMED_FE(crc32,php_if_crc32, arginfo_crc32)
2725
2726 PHP_FE(iptcparse, arginfo_iptcparse)
2727 PHP_FE(iptcembed, arginfo_iptcembed)
2728 PHP_FE(getimagesize, arginfo_getimagesize)
2729 PHP_FE(getimagesizefromstring, arginfo_getimagesize)
2730 PHP_FE(image_type_to_mime_type, arginfo_image_type_to_mime_type)
2731 PHP_FE(image_type_to_extension, arginfo_image_type_to_extension)
2732
2733 PHP_FE(phpinfo, arginfo_phpinfo)
2734 PHP_FE(phpversion, arginfo_phpversion)
2735 PHP_FE(phpcredits, arginfo_phpcredits)
2736 PHP_FE(php_sapi_name, arginfo_php_sapi_name)
2737 PHP_FE(php_uname, arginfo_php_uname)
2738 PHP_FE(php_ini_scanned_files, arginfo_php_ini_scanned_files)
2739 PHP_FE(php_ini_loaded_file, arginfo_php_ini_loaded_file)
2740
2741 PHP_FE(strnatcmp, arginfo_strnatcmp)
2742 PHP_FE(strnatcasecmp, arginfo_strnatcasecmp)
2743 PHP_FE(substr_count, arginfo_substr_count)
2744 PHP_FE(strspn, arginfo_strspn)
2745 PHP_FE(strcspn, arginfo_strcspn)
2746 PHP_FE(strtok, arginfo_strtok)
2747 PHP_FE(strtoupper, arginfo_strtoupper)
2748 PHP_FE(strtolower, arginfo_strtolower)
2749 PHP_FE(strpos, arginfo_strpos)
2750 PHP_FE(stripos, arginfo_stripos)
2751 PHP_FE(strrpos, arginfo_strrpos)
2752 PHP_FE(strripos, arginfo_strripos)
2753 PHP_FE(strrev, arginfo_strrev)
2754 PHP_FE(hebrev, arginfo_hebrev)
2755 PHP_FE(hebrevc, arginfo_hebrevc)
2756 PHP_FE(nl2br, arginfo_nl2br)
2757 PHP_FE(basename, arginfo_basename)
2758 PHP_FE(dirname, arginfo_dirname)
2759 PHP_FE(pathinfo, arginfo_pathinfo)
2760 PHP_FE(stripslashes, arginfo_stripslashes)
2761 PHP_FE(stripcslashes, arginfo_stripcslashes)
2762 PHP_FE(strstr, arginfo_strstr)
2763 PHP_FE(stristr, arginfo_stristr)
2764 PHP_FE(strrchr, arginfo_strrchr)
2765 PHP_FE(str_shuffle, arginfo_str_shuffle)
2766 PHP_FE(str_word_count, arginfo_str_word_count)
2767 PHP_FE(str_split, arginfo_str_split)
2768 PHP_FE(strpbrk, arginfo_strpbrk)
2769 PHP_FE(substr_compare, arginfo_substr_compare)
2770
2771 #ifdef HAVE_STRCOLL
2772 PHP_FE(strcoll, arginfo_strcoll)
2773 #endif
2774
2775 #ifdef HAVE_STRFMON
2776 PHP_FE(money_format, arginfo_money_format)
2777 #endif
2778
2779 PHP_FE(substr, arginfo_substr)
2780 PHP_FE(substr_replace, arginfo_substr_replace)
2781 PHP_FE(quotemeta, arginfo_quotemeta)
2782 PHP_FE(ucfirst, arginfo_ucfirst)
2783 PHP_FE(lcfirst, arginfo_lcfirst)
2784 PHP_FE(ucwords, arginfo_ucwords)
2785 PHP_FE(strtr, arginfo_strtr)
2786 PHP_FE(addslashes, arginfo_addslashes)
2787 PHP_FE(addcslashes, arginfo_addcslashes)
2788 PHP_FE(rtrim, arginfo_rtrim)
2789 PHP_FE(str_replace, arginfo_str_replace)
2790 PHP_FE(str_ireplace, arginfo_str_ireplace)
2791 PHP_FE(str_repeat, arginfo_str_repeat)
2792 PHP_FE(count_chars, arginfo_count_chars)
2793 PHP_FE(chunk_split, arginfo_chunk_split)
2794 PHP_FE(trim, arginfo_trim)
2795 PHP_FE(ltrim, arginfo_ltrim)
2796 PHP_FE(strip_tags, arginfo_strip_tags)
2797 PHP_FE(similar_text, arginfo_similar_text)
2798 PHP_FE(explode, arginfo_explode)
2799 PHP_FE(implode, arginfo_implode)
2800 PHP_FALIAS(join, implode, arginfo_implode)
2801 PHP_FE(setlocale, arginfo_setlocale)
2802 PHP_FE(localeconv, arginfo_localeconv)
2803
2804 #if HAVE_NL_LANGINFO
2805 PHP_FE(nl_langinfo, arginfo_nl_langinfo)
2806 #endif
2807
2808 PHP_FE(soundex, arginfo_soundex)
2809 PHP_FE(levenshtein, arginfo_levenshtein)
2810 PHP_FE(chr, arginfo_chr)
2811 PHP_FE(ord, arginfo_ord)
2812 PHP_FE(parse_str, arginfo_parse_str)
2813 PHP_FE(str_getcsv, arginfo_str_getcsv)
2814 PHP_FE(str_pad, arginfo_str_pad)
2815 PHP_FALIAS(chop, rtrim, arginfo_rtrim)
2816 PHP_FALIAS(strchr, strstr, arginfo_strstr)
2817 PHP_NAMED_FE(sprintf, PHP_FN(user_sprintf), arginfo_sprintf)
2818 PHP_NAMED_FE(printf, PHP_FN(user_printf), arginfo_printf)
2819 PHP_FE(vprintf, arginfo_vprintf)
2820 PHP_FE(vsprintf, arginfo_vsprintf)
2821 PHP_FE(fprintf, arginfo_fprintf)
2822 PHP_FE(vfprintf, arginfo_vfprintf)
2823 PHP_FE(sscanf, arginfo_sscanf)
2824 PHP_FE(fscanf, arginfo_fscanf)
2825 PHP_FE(parse_url, arginfo_parse_url)
2826 PHP_FE(urlencode, arginfo_urlencode)
2827 PHP_FE(urldecode, arginfo_urldecode)
2828 PHP_FE(rawurlencode, arginfo_rawurlencode)
2829 PHP_FE(rawurldecode, arginfo_rawurldecode)
2830 PHP_FE(http_build_query, arginfo_http_build_query)
2831
2832 #if defined(HAVE_SYMLINK) || defined(PHP_WIN32)
2833 PHP_FE(readlink, arginfo_readlink)
2834 PHP_FE(linkinfo, arginfo_linkinfo)
2835 PHP_FE(symlink, arginfo_symlink)
2836 PHP_FE(link, arginfo_link)
2837 #endif
2838
2839 PHP_FE(unlink, arginfo_unlink)
2840 PHP_FE(exec, arginfo_exec)
2841 PHP_FE(system, arginfo_system)
2842 PHP_FE(escapeshellcmd, arginfo_escapeshellcmd)
2843 PHP_FE(escapeshellarg, arginfo_escapeshellarg)
2844 PHP_FE(passthru, arginfo_passthru)
2845 PHP_FE(shell_exec, arginfo_shell_exec)
2846 #ifdef PHP_CAN_SUPPORT_PROC_OPEN
2847 PHP_FE(proc_open, arginfo_proc_open)
2848 PHP_FE(proc_close, arginfo_proc_close)
2849 PHP_FE(proc_terminate, arginfo_proc_terminate)
2850 PHP_FE(proc_get_status, arginfo_proc_get_status)
2851 #endif
2852
2853 #ifdef HAVE_NICE
2854 PHP_FE(proc_nice, arginfo_proc_nice)
2855 #endif
2856
2857 PHP_FE(rand, arginfo_mt_rand)
2858 PHP_FALIAS(srand, mt_srand, arginfo_mt_srand)
2859 PHP_FALIAS(getrandmax, mt_getrandmax, arginfo_mt_getrandmax)
2860 PHP_FE(mt_rand, arginfo_mt_rand)
2861 PHP_FE(mt_srand, arginfo_mt_srand)
2862 PHP_FE(mt_getrandmax, arginfo_mt_getrandmax)
2863
2864 PHP_FE(random_bytes, arginfo_random_bytes)
2865 PHP_FE(random_int, arginfo_random_int)
2866
2867 #if HAVE_GETSERVBYNAME
2868 PHP_FE(getservbyname, arginfo_getservbyname)
2869 #endif
2870
2871 #if HAVE_GETSERVBYPORT
2872 PHP_FE(getservbyport, arginfo_getservbyport)
2873 #endif
2874
2875 #if HAVE_GETPROTOBYNAME
2876 PHP_FE(getprotobyname, arginfo_getprotobyname)
2877 #endif
2878
2879 #if HAVE_GETPROTOBYNUMBER
2880 PHP_FE(getprotobynumber, arginfo_getprotobynumber)
2881 #endif
2882
2883 PHP_FE(getmyuid, arginfo_getmyuid)
2884 PHP_FE(getmygid, arginfo_getmygid)
2885 PHP_FE(getmypid, arginfo_getmypid)
2886 PHP_FE(getmyinode, arginfo_getmyinode)
2887 PHP_FE(getlastmod, arginfo_getlastmod)
2888
2889 PHP_FE(base64_decode, arginfo_base64_decode)
2890 PHP_FE(base64_encode, arginfo_base64_encode)
2891
2892 PHP_FE(password_hash, arginfo_password_hash)
2893 PHP_FE(password_get_info, arginfo_password_get_info)
2894 PHP_FE(password_needs_rehash, arginfo_password_needs_rehash)
2895 PHP_FE(password_verify, arginfo_password_verify)
2896 PHP_FE(convert_uuencode, arginfo_convert_uuencode)
2897 PHP_FE(convert_uudecode, arginfo_convert_uudecode)
2898
2899 PHP_FE(abs, arginfo_abs)
2900 PHP_FE(ceil, arginfo_ceil)
2901 PHP_FE(floor, arginfo_floor)
2902 PHP_FE(round, arginfo_round)
2903 PHP_FE(sin, arginfo_sin)
2904 PHP_FE(cos, arginfo_cos)
2905 PHP_FE(tan, arginfo_tan)
2906 PHP_FE(asin, arginfo_asin)
2907 PHP_FE(acos, arginfo_acos)
2908 PHP_FE(atan, arginfo_atan)
2909 PHP_FE(atanh, arginfo_atanh)
2910 PHP_FE(atan2, arginfo_atan2)
2911 PHP_FE(sinh, arginfo_sinh)
2912 PHP_FE(cosh, arginfo_cosh)
2913 PHP_FE(tanh, arginfo_tanh)
2914 PHP_FE(asinh, arginfo_asinh)
2915 PHP_FE(acosh, arginfo_acosh)
2916 PHP_FE(expm1, arginfo_expm1)
2917 PHP_FE(log1p, arginfo_log1p)
2918 PHP_FE(pi, arginfo_pi)
2919 PHP_FE(is_finite, arginfo_is_finite)
2920 PHP_FE(is_nan, arginfo_is_nan)
2921 PHP_FE(is_infinite, arginfo_is_infinite)
2922 PHP_FE(pow, arginfo_pow)
2923 PHP_FE(exp, arginfo_exp)
2924 PHP_FE(log, arginfo_log)
2925 PHP_FE(log10, arginfo_log10)
2926 PHP_FE(sqrt, arginfo_sqrt)
2927 PHP_FE(hypot, arginfo_hypot)
2928 PHP_FE(deg2rad, arginfo_deg2rad)
2929 PHP_FE(rad2deg, arginfo_rad2deg)
2930 PHP_FE(bindec, arginfo_bindec)
2931 PHP_FE(hexdec, arginfo_hexdec)
2932 PHP_FE(octdec, arginfo_octdec)
2933 PHP_FE(decbin, arginfo_decbin)
2934 PHP_FE(decoct, arginfo_decoct)
2935 PHP_FE(dechex, arginfo_dechex)
2936 PHP_FE(base_convert, arginfo_base_convert)
2937 PHP_FE(number_format, arginfo_number_format)
2938 PHP_FE(fmod, arginfo_fmod)
2939 PHP_FE(intdiv, arginfo_intdiv)
2940 #ifdef HAVE_INET_NTOP
2941 PHP_RAW_NAMED_FE(inet_ntop, php_inet_ntop, arginfo_inet_ntop)
2942 #endif
2943 #ifdef HAVE_INET_PTON
2944 PHP_RAW_NAMED_FE(inet_pton, php_inet_pton, arginfo_inet_pton)
2945 #endif
2946 PHP_FE(ip2long, arginfo_ip2long)
2947 PHP_FE(long2ip, arginfo_long2ip)
2948
2949 PHP_FE(getenv, arginfo_getenv)
2950 #ifdef HAVE_PUTENV
2951 PHP_FE(putenv, arginfo_putenv)
2952 #endif
2953
2954 PHP_FE(getopt, arginfo_getopt)
2955
2956 #ifdef HAVE_GETLOADAVG
2957 PHP_FE(sys_getloadavg, arginfo_sys_getloadavg)
2958 #endif
2959 #ifdef HAVE_GETTIMEOFDAY
2960 PHP_FE(microtime, arginfo_microtime)
2961 PHP_FE(gettimeofday, arginfo_gettimeofday)
2962 #endif
2963
2964 #ifdef HAVE_GETRUSAGE
2965 PHP_FE(getrusage, arginfo_getrusage)
2966 #endif
2967
2968 #ifdef HAVE_GETTIMEOFDAY
2969 PHP_FE(uniqid, arginfo_uniqid)
2970 #endif
2971
2972 PHP_FE(quoted_printable_decode, arginfo_quoted_printable_decode)
2973 PHP_FE(quoted_printable_encode, arginfo_quoted_printable_encode)
2974 PHP_FE(convert_cyr_string, arginfo_convert_cyr_string)
2975 PHP_FE(get_current_user, arginfo_get_current_user)
2976 PHP_FE(set_time_limit, arginfo_set_time_limit)
2977 PHP_FE(header_register_callback, arginfo_header_register_callback)
2978 PHP_FE(get_cfg_var, arginfo_get_cfg_var)
2979
2980 PHP_FE(get_magic_quotes_gpc, arginfo_get_magic_quotes_gpc)
2981 PHP_FE(get_magic_quotes_runtime, arginfo_get_magic_quotes_runtime)
2982
2983 PHP_FE(error_log, arginfo_error_log)
2984 PHP_FE(error_get_last, arginfo_error_get_last)
2985 PHP_FE(error_clear_last, arginfo_error_clear_last)
2986 PHP_FE(call_user_func, arginfo_call_user_func)
2987 PHP_FE(call_user_func_array, arginfo_call_user_func_array)
2988 PHP_FE(forward_static_call, arginfo_forward_static_call)
2989 PHP_FE(forward_static_call_array, arginfo_forward_static_call_array)
2990 PHP_FE(serialize, arginfo_serialize)
2991 PHP_FE(unserialize, arginfo_unserialize)
2992
2993 PHP_FE(var_dump, arginfo_var_dump)
2994 PHP_FE(var_export, arginfo_var_export)
2995 PHP_FE(debug_zval_dump, arginfo_debug_zval_dump)
2996 PHP_FE(print_r, arginfo_print_r)
2997 PHP_FE(memory_get_usage, arginfo_memory_get_usage)
2998 PHP_FE(memory_get_peak_usage, arginfo_memory_get_peak_usage)
2999
3000 PHP_FE(register_shutdown_function, arginfo_register_shutdown_function)
3001 PHP_FE(register_tick_function, arginfo_register_tick_function)
3002 PHP_FE(unregister_tick_function, arginfo_unregister_tick_function)
3003
3004 PHP_FE(highlight_file, arginfo_highlight_file)
3005 PHP_FALIAS(show_source, highlight_file, arginfo_highlight_file)
3006 PHP_FE(highlight_string, arginfo_highlight_string)
3007 PHP_FE(php_strip_whitespace, arginfo_php_strip_whitespace)
3008
3009 PHP_FE(ini_get, arginfo_ini_get)
3010 PHP_FE(ini_get_all, arginfo_ini_get_all)
3011 PHP_FE(ini_set, arginfo_ini_set)
3012 PHP_FALIAS(ini_alter, ini_set, arginfo_ini_set)
3013 PHP_FE(ini_restore, arginfo_ini_restore)
3014 PHP_FE(get_include_path, arginfo_get_include_path)
3015 PHP_FE(set_include_path, arginfo_set_include_path)
3016 PHP_FE(restore_include_path, arginfo_restore_include_path)
3017
3018 PHP_FE(setcookie, arginfo_setcookie)
3019 PHP_FE(setrawcookie, arginfo_setrawcookie)
3020 PHP_FE(header, arginfo_header)
3021 PHP_FE(header_remove, arginfo_header_remove)
3022 PHP_FE(headers_sent, arginfo_headers_sent)
3023 PHP_FE(headers_list, arginfo_headers_list)
3024 PHP_FE(http_response_code, arginfo_http_response_code)
3025
3026 PHP_FE(connection_aborted, arginfo_connection_aborted)
3027 PHP_FE(connection_status, arginfo_connection_status)
3028 PHP_FE(ignore_user_abort, arginfo_ignore_user_abort)
3029 PHP_FE(parse_ini_file, arginfo_parse_ini_file)
3030 PHP_FE(parse_ini_string, arginfo_parse_ini_string)
3031 #if ZEND_DEBUG
3032 PHP_FE(config_get_hash, arginfo_config_get_hash)
3033 #endif
3034 PHP_FE(is_uploaded_file, arginfo_is_uploaded_file)
3035 PHP_FE(move_uploaded_file, arginfo_move_uploaded_file)
3036
3037 /* functions from dns.c */
3038 PHP_FE(gethostbyaddr, arginfo_gethostbyaddr)
3039 PHP_FE(gethostbyname, arginfo_gethostbyname)
3040 PHP_FE(gethostbynamel, arginfo_gethostbynamel)
3041
3042 #ifdef HAVE_GETHOSTNAME
3043 PHP_FE(gethostname, arginfo_gethostname)
3044 #endif
3045
3046 #if defined(PHP_WIN32) || (HAVE_DNS_SEARCH_FUNC && !(defined(__BEOS__) || defined(NETWARE)))
3047
3048 PHP_FE(dns_check_record, arginfo_dns_check_record)
3049 PHP_FALIAS(checkdnsrr, dns_check_record, arginfo_dns_check_record)
3050
3051 # if defined(PHP_WIN32) || HAVE_FULL_DNS_FUNCS
3052 PHP_FE(dns_get_mx, arginfo_dns_get_mx)
3053 PHP_FALIAS(getmxrr, dns_get_mx, arginfo_dns_get_mx)
3054 PHP_FE(dns_get_record, arginfo_dns_get_record)
3055 # endif
3056 #endif
3057
3058 /* functions from type.c */
3059 PHP_FE(intval, arginfo_intval)
3060 PHP_FE(floatval, arginfo_floatval)
3061 PHP_FALIAS(doubleval, floatval, arginfo_floatval)
3062 PHP_FE(strval, arginfo_strval)
3063 PHP_FE(boolval, arginfo_boolval)
3064 PHP_FE(gettype, arginfo_gettype)
3065 PHP_FE(settype, arginfo_settype)
3066 PHP_FE(is_null, arginfo_is_null)
3067 PHP_FE(is_resource, arginfo_is_resource)
3068 PHP_FE(is_bool, arginfo_is_bool)
3069 PHP_FE(is_int, arginfo_is_int)
3070 PHP_FE(is_float, arginfo_is_float)
3071 PHP_FALIAS(is_integer, is_int, arginfo_is_int)
3072 PHP_FALIAS(is_long, is_int, arginfo_is_int)
3073 PHP_FALIAS(is_double, is_float, arginfo_is_float)
3074 PHP_FALIAS(is_real, is_float, arginfo_is_float)
3075 PHP_FE(is_numeric, arginfo_is_numeric)
3076 PHP_FE(is_string, arginfo_is_string)
3077 PHP_FE(is_array, arginfo_is_array)
3078 PHP_FE(is_object, arginfo_is_object)
3079 PHP_FE(is_scalar, arginfo_is_scalar)
3080 PHP_FE(is_callable, arginfo_is_callable)
3081 PHP_FE(is_iterable, arginfo_is_iterable)
3082
3083 /* functions from file.c */
3084 PHP_FE(pclose, arginfo_pclose)
3085 PHP_FE(popen, arginfo_popen)
3086 PHP_FE(readfile, arginfo_readfile)
3087 PHP_FE(rewind, arginfo_rewind)
3088 PHP_FE(rmdir, arginfo_rmdir)
3089 PHP_FE(umask, arginfo_umask)
3090 PHP_FE(fclose, arginfo_fclose)
3091 PHP_FE(feof, arginfo_feof)
3092 PHP_FE(fgetc, arginfo_fgetc)
3093 PHP_FE(fgets, arginfo_fgets)
3094 PHP_FE(fgetss, arginfo_fgetss)
3095 PHP_FE(fread, arginfo_fread)
3096 PHP_NAMED_FE(fopen, php_if_fopen, arginfo_fopen)
3097 PHP_FE(fpassthru, arginfo_fpassthru)
3098 PHP_NAMED_FE(ftruncate, php_if_ftruncate, arginfo_ftruncate)
3099 PHP_NAMED_FE(fstat, php_if_fstat, arginfo_fstat)
3100 PHP_FE(fseek, arginfo_fseek)
3101 PHP_FE(ftell, arginfo_ftell)
3102 PHP_FE(fflush, arginfo_fflush)
3103 PHP_FE(fwrite, arginfo_fwrite)
3104 PHP_FALIAS(fputs, fwrite, arginfo_fwrite)
3105 PHP_FE(mkdir, arginfo_mkdir)
3106 PHP_FE(rename, arginfo_rename)
3107 PHP_FE(copy, arginfo_copy)
3108 PHP_FE(tempnam, arginfo_tempnam)
3109 PHP_NAMED_FE(tmpfile, php_if_tmpfile, arginfo_tmpfile)
3110 PHP_FE(file, arginfo_file)
3111 PHP_FE(file_get_contents, arginfo_file_get_contents)
3112 PHP_FE(file_put_contents, arginfo_file_put_contents)
3113 PHP_FE(stream_select, arginfo_stream_select)
3114 PHP_FE(stream_context_create, arginfo_stream_context_create)
3115 PHP_FE(stream_context_set_params, arginfo_stream_context_set_params)
3116 PHP_FE(stream_context_get_params, arginfo_stream_context_get_params)
3117 PHP_FE(stream_context_set_option, arginfo_stream_context_set_option)
3118 PHP_FE(stream_context_get_options, arginfo_stream_context_get_options)
3119 PHP_FE(stream_context_get_default, arginfo_stream_context_get_default)
3120 PHP_FE(stream_context_set_default, arginfo_stream_context_set_default)
3121 PHP_FE(stream_filter_prepend, arginfo_stream_filter_prepend)
3122 PHP_FE(stream_filter_append, arginfo_stream_filter_append)
3123 PHP_FE(stream_filter_remove, arginfo_stream_filter_remove)
3124 PHP_FE(stream_socket_client, arginfo_stream_socket_client)
3125 PHP_FE(stream_socket_server, arginfo_stream_socket_server)
3126 PHP_FE(stream_socket_accept, arginfo_stream_socket_accept)
3127 PHP_FE(stream_socket_get_name, arginfo_stream_socket_get_name)
3128 PHP_FE(stream_socket_recvfrom, arginfo_stream_socket_recvfrom)
3129 PHP_FE(stream_socket_sendto, arginfo_stream_socket_sendto)
3130 PHP_FE(stream_socket_enable_crypto, arginfo_stream_socket_enable_crypto)
3131 #ifdef HAVE_SHUTDOWN
3132 PHP_FE(stream_socket_shutdown, arginfo_stream_socket_shutdown)
3133 #endif
3134 #if HAVE_SOCKETPAIR
3135 PHP_FE(stream_socket_pair, arginfo_stream_socket_pair)
3136 #endif
3137 PHP_FE(stream_copy_to_stream, arginfo_stream_copy_to_stream)
3138 PHP_FE(stream_get_contents, arginfo_stream_get_contents)
3139 PHP_FE(stream_supports_lock, arginfo_stream_supports_lock)
3140 PHP_FE(fgetcsv, arginfo_fgetcsv)
3141 PHP_FE(fputcsv, arginfo_fputcsv)
3142 PHP_FE(flock, arginfo_flock)
3143 PHP_FE(get_meta_tags, arginfo_get_meta_tags)
3144 PHP_FE(stream_set_read_buffer, arginfo_stream_set_read_buffer)
3145 PHP_FE(stream_set_write_buffer, arginfo_stream_set_write_buffer)
3146 PHP_FALIAS(set_file_buffer, stream_set_write_buffer, arginfo_stream_set_write_buffer)
3147 PHP_FE(stream_set_chunk_size, arginfo_stream_set_chunk_size)
3148
3149 PHP_FE(stream_set_blocking, arginfo_stream_set_blocking)
3150 PHP_FALIAS(socket_set_blocking, stream_set_blocking, arginfo_stream_set_blocking)
3151
3152 PHP_FE(stream_get_meta_data, arginfo_stream_get_meta_data)
3153 PHP_FE(stream_get_line, arginfo_stream_get_line)
3154 PHP_FE(stream_wrapper_register, arginfo_stream_wrapper_register)
3155 PHP_FALIAS(stream_register_wrapper, stream_wrapper_register, arginfo_stream_wrapper_register)
3156 PHP_FE(stream_wrapper_unregister, arginfo_stream_wrapper_unregister)
3157 PHP_FE(stream_wrapper_restore, arginfo_stream_wrapper_restore)
3158 PHP_FE(stream_get_wrappers, arginfo_stream_get_wrappers)
3159 PHP_FE(stream_get_transports, arginfo_stream_get_transports)
3160 PHP_FE(stream_resolve_include_path, arginfo_stream_resolve_include_path)
3161 PHP_FE(stream_is_local, arginfo_stream_is_local)
3162 PHP_FE(get_headers, arginfo_get_headers)
3163
3164 #if HAVE_SYS_TIME_H || defined(PHP_WIN32)
3165 PHP_FE(stream_set_timeout, arginfo_stream_set_timeout)
3166 PHP_FALIAS(socket_set_timeout, stream_set_timeout, arginfo_stream_set_timeout)
3167 #endif
3168
3169 PHP_FALIAS(socket_get_status, stream_get_meta_data, arginfo_stream_get_meta_data)
3170
3171 #if (!defined(__BEOS__) && !defined(NETWARE) && HAVE_REALPATH) || defined(ZTS)
3172 PHP_FE(realpath, arginfo_realpath)
3173 #endif
3174
3175 #ifdef HAVE_FNMATCH
3176 PHP_FE(fnmatch, arginfo_fnmatch)
3177 #endif
3178
3179 /* functions from fsock.c */
3180 PHP_FE(fsockopen, arginfo_fsockopen)
3181 PHP_FE(pfsockopen, arginfo_pfsockopen)
3182
3183 /* functions from pack.c */
3184 PHP_FE(pack, arginfo_pack)
3185 PHP_FE(unpack, arginfo_unpack)
3186
3187 /* functions from browscap.c */
3188 PHP_FE(get_browser, arginfo_get_browser)
3189
3190 /* functions from crypt.c */
3191 PHP_FE(crypt, arginfo_crypt)
3192
3193 /* functions from dir.c */
3194 PHP_FE(opendir, arginfo_opendir)
3195 PHP_FE(closedir, arginfo_closedir)
3196 PHP_FE(chdir, arginfo_chdir)
3197
3198 #if defined(HAVE_CHROOT) && !defined(ZTS) && ENABLE_CHROOT_FUNC
3199 PHP_FE(chroot, arginfo_chroot)
3200 #endif
3201
3202 PHP_FE(getcwd, arginfo_getcwd)
3203 PHP_FE(rewinddir, arginfo_rewinddir)
3204 PHP_NAMED_FE(readdir, php_if_readdir, arginfo_readdir)
3205 PHP_FALIAS(dir, getdir, arginfo_dir)
3206 PHP_FE(scandir, arginfo_scandir)
3207 #ifdef HAVE_GLOB
3208 PHP_FE(glob, arginfo_glob)
3209 #endif
3210 /* functions from filestat.c */
3211 PHP_FE(fileatime, arginfo_fileatime)
3212 PHP_FE(filectime, arginfo_filectime)
3213 PHP_FE(filegroup, arginfo_filegroup)
3214 PHP_FE(fileinode, arginfo_fileinode)
3215 PHP_FE(filemtime, arginfo_filemtime)
3216 PHP_FE(fileowner, arginfo_fileowner)
3217 PHP_FE(fileperms, arginfo_fileperms)
3218 PHP_FE(filesize, arginfo_filesize)
3219 PHP_FE(filetype, arginfo_filetype)
3220 PHP_FE(file_exists, arginfo_file_exists)
3221 PHP_FE(is_writable, arginfo_is_writable)
3222 PHP_FALIAS(is_writeable, is_writable, arginfo_is_writable)
3223 PHP_FE(is_readable, arginfo_is_readable)
3224 PHP_FE(is_executable, arginfo_is_executable)
3225 PHP_FE(is_file, arginfo_is_file)
3226 PHP_FE(is_dir, arginfo_is_dir)
3227 PHP_FE(is_link, arginfo_is_link)
3228 PHP_NAMED_FE(stat, php_if_stat, arginfo_stat)
3229 PHP_NAMED_FE(lstat, php_if_lstat, arginfo_lstat)
3230 #ifndef NETWARE
3231 PHP_FE(chown, arginfo_chown)
3232 PHP_FE(chgrp, arginfo_chgrp)
3233 #endif
3234 #if HAVE_LCHOWN
3235 PHP_FE(lchown, arginfo_lchown)
3236 #endif
3237 #if HAVE_LCHOWN
3238 PHP_FE(lchgrp, arginfo_lchgrp)
3239 #endif
3240 PHP_FE(chmod, arginfo_chmod)
3241 #if HAVE_UTIME
3242 PHP_FE(touch, arginfo_touch)
3243 #endif
3244 PHP_FE(clearstatcache, arginfo_clearstatcache)
3245 PHP_FE(disk_total_space, arginfo_disk_total_space)
3246 PHP_FE(disk_free_space, arginfo_disk_free_space)
3247 PHP_FALIAS(diskfreespace, disk_free_space, arginfo_disk_free_space)
3248 PHP_FE(realpath_cache_size, arginfo_realpath_cache_size)
3249 PHP_FE(realpath_cache_get, arginfo_realpath_cache_get)
3250
3251 /* functions from mail.c */
3252 PHP_FE(mail, arginfo_mail)
3253 PHP_FE(ezmlm_hash, arginfo_ezmlm_hash)
3254
3255 /* functions from syslog.c */
3256 #ifdef HAVE_SYSLOG_H
3257 PHP_FE(openlog, arginfo_openlog)
3258 PHP_FE(syslog, arginfo_syslog)
3259 PHP_FE(closelog, arginfo_closelog)
3260 #endif
3261
3262 /* functions from lcg.c */
3263 PHP_FE(lcg_value, arginfo_lcg_value)
3264
3265 /* functions from metaphone.c */
3266 PHP_FE(metaphone, arginfo_metaphone)
3267
3268 /* functions from output.c */
3269 PHP_FE(ob_start, arginfo_ob_start)
3270 PHP_FE(ob_flush, arginfo_ob_flush)
3271 PHP_FE(ob_clean, arginfo_ob_clean)
3272 PHP_FE(ob_end_flush, arginfo_ob_end_flush)
3273 PHP_FE(ob_end_clean, arginfo_ob_end_clean)
3274 PHP_FE(ob_get_flush, arginfo_ob_get_flush)
3275 PHP_FE(ob_get_clean, arginfo_ob_get_clean)
3276 PHP_FE(ob_get_length, arginfo_ob_get_length)
3277 PHP_FE(ob_get_level, arginfo_ob_get_level)
3278 PHP_FE(ob_get_status, arginfo_ob_get_status)
3279 PHP_FE(ob_get_contents, arginfo_ob_get_contents)
3280 PHP_FE(ob_implicit_flush, arginfo_ob_implicit_flush)
3281 PHP_FE(ob_list_handlers, arginfo_ob_list_handlers)
3282
3283 /* functions from array.c */
3284 PHP_FE(ksort, arginfo_ksort)
3285 PHP_FE(krsort, arginfo_krsort)
3286 PHP_FE(natsort, arginfo_natsort)
3287 PHP_FE(natcasesort, arginfo_natcasesort)
3288 PHP_FE(asort, arginfo_asort)
3289 PHP_FE(arsort, arginfo_arsort)
3290 PHP_FE(sort, arginfo_sort)
3291 PHP_FE(rsort, arginfo_rsort)
3292 PHP_FE(usort, arginfo_usort)
3293 PHP_FE(uasort, arginfo_uasort)
3294 PHP_FE(uksort, arginfo_uksort)
3295 PHP_FE(shuffle, arginfo_shuffle)
3296 PHP_FE(array_walk, arginfo_array_walk)
3297 PHP_FE(array_walk_recursive, arginfo_array_walk_recursive)
3298 PHP_FE(count, arginfo_count)
3299 PHP_FE(end, arginfo_end)
3300 PHP_FE(prev, arginfo_prev)
3301 PHP_FE(next, arginfo_next)
3302 PHP_FE(reset, arginfo_reset)
3303 PHP_FE(current, arginfo_current)
3304 PHP_FE(key, arginfo_key)
3305 PHP_FE(min, arginfo_min)
3306 PHP_FE(max, arginfo_max)
3307 PHP_FE(in_array, arginfo_in_array)
3308 PHP_FE(array_search, arginfo_array_search)
3309 PHP_FE(extract, arginfo_extract)
3310 PHP_FE(compact, arginfo_compact)
3311 PHP_FE(array_fill, arginfo_array_fill)
3312 PHP_FE(array_fill_keys, arginfo_array_fill_keys)
3313 PHP_FE(range, arginfo_range)
3314 PHP_FE(array_multisort, arginfo_array_multisort)
3315 PHP_FE(array_push, arginfo_array_push)
3316 PHP_FE(array_pop, arginfo_array_pop)
3317 PHP_FE(array_shift, arginfo_array_shift)
3318 PHP_FE(array_unshift, arginfo_array_unshift)
3319 PHP_FE(array_splice, arginfo_array_splice)
3320 PHP_FE(array_slice, arginfo_array_slice)
3321 PHP_FE(array_merge, arginfo_array_merge)
3322 PHP_FE(array_merge_recursive, arginfo_array_merge_recursive)
3323 PHP_FE(array_replace, arginfo_array_replace)
3324 PHP_FE(array_replace_recursive, arginfo_array_replace_recursive)
3325 PHP_FE(array_keys, arginfo_array_keys)
3326 PHP_FE(array_values, arginfo_array_values)
3327 PHP_FE(array_count_values, arginfo_array_count_values)
3328 PHP_FE(array_column, arginfo_array_column)
3329 PHP_FE(array_reverse, arginfo_array_reverse)
3330 PHP_FE(array_reduce, arginfo_array_reduce)
3331 PHP_FE(array_pad, arginfo_array_pad)
3332 PHP_FE(array_flip, arginfo_array_flip)
3333 PHP_FE(array_change_key_case, arginfo_array_change_key_case)
3334 PHP_FE(array_rand, arginfo_array_rand)
3335 PHP_FE(array_unique, arginfo_array_unique)
3336 PHP_FE(array_intersect, arginfo_array_intersect)
3337 PHP_FE(array_intersect_key, arginfo_array_intersect_key)
3338 PHP_FE(array_intersect_ukey, arginfo_array_intersect_ukey)
3339 PHP_FE(array_uintersect, arginfo_array_uintersect)
3340 PHP_FE(array_intersect_assoc, arginfo_array_intersect_assoc)
3341 PHP_FE(array_uintersect_assoc, arginfo_array_uintersect_assoc)
3342 PHP_FE(array_intersect_uassoc, arginfo_array_intersect_uassoc)
3343 PHP_FE(array_uintersect_uassoc, arginfo_array_uintersect_uassoc)
3344 PHP_FE(array_diff, arginfo_array_diff)
3345 PHP_FE(array_diff_key, arginfo_array_diff_key)
3346 PHP_FE(array_diff_ukey, arginfo_array_diff_ukey)
3347 PHP_FE(array_udiff, arginfo_array_udiff)
3348 PHP_FE(array_diff_assoc, arginfo_array_diff_assoc)
3349 PHP_FE(array_udiff_assoc, arginfo_array_udiff_assoc)
3350 PHP_FE(array_diff_uassoc, arginfo_array_diff_uassoc)
3351 PHP_FE(array_udiff_uassoc, arginfo_array_udiff_uassoc)
3352 PHP_FE(array_sum, arginfo_array_sum)
3353 PHP_FE(array_product, arginfo_array_product)
3354 PHP_FE(array_filter, arginfo_array_filter)
3355 PHP_FE(array_map, arginfo_array_map)
3356 PHP_FE(array_chunk, arginfo_array_chunk)
3357 PHP_FE(array_combine, arginfo_array_combine)
3358 PHP_FE(array_key_exists, arginfo_array_key_exists)
3359
3360 /* aliases from array.c */
3361 PHP_FALIAS(pos, current, arginfo_current)
3362 PHP_FALIAS(sizeof, count, arginfo_count)
3363 PHP_FALIAS(key_exists, array_key_exists, arginfo_array_key_exists)
3364
3365 /* functions from assert.c */
3366 PHP_FE(assert, arginfo_assert)
3367 PHP_FE(assert_options, arginfo_assert_options)
3368
3369 /* functions from versioning.c */
3370 PHP_FE(version_compare, arginfo_version_compare)
3371
3372 /* functions from ftok.c*/
3373 #if HAVE_FTOK
3374 PHP_FE(ftok, arginfo_ftok)
3375 #endif
3376
3377 PHP_FE(str_rot13, arginfo_str_rot13)
3378 PHP_FE(stream_get_filters, arginfo_stream_get_filters)
3379 PHP_FE(stream_filter_register, arginfo_stream_filter_register)
3380 PHP_FE(stream_bucket_make_writeable, arginfo_stream_bucket_make_writeable)
3381 PHP_FE(stream_bucket_prepend, arginfo_stream_bucket_prepend)
3382 PHP_FE(stream_bucket_append, arginfo_stream_bucket_append)
3383 PHP_FE(stream_bucket_new, arginfo_stream_bucket_new)
3384
3385 PHP_FE(output_add_rewrite_var, arginfo_output_add_rewrite_var)
3386 PHP_FE(output_reset_rewrite_vars, arginfo_output_reset_rewrite_vars)
3387
3388 PHP_FE(sys_get_temp_dir, arginfo_sys_get_temp_dir)
3389
3390 #ifdef PHP_WIN32
3391 PHP_FE(sapi_windows_cp_set, arginfo_sapi_windows_cp_set)
3392 PHP_FE(sapi_windows_cp_get, arginfo_sapi_windows_cp_get)
3393 PHP_FE(sapi_windows_cp_is_utf8, arginfo_sapi_windows_cp_is_utf8)
3394 PHP_FE(sapi_windows_cp_conv, arginfo_sapi_windows_cp_conv)
3395 #endif
3396 PHP_FE_END
3397 };
3398 /* }}} */
3399
3400 static const zend_module_dep standard_deps[] = { /* {{{ */
3401 ZEND_MOD_OPTIONAL("session")
3402 ZEND_MOD_END
3403 };
3404 /* }}} */
3405
3406 zend_module_entry basic_functions_module = { /* {{{ */
3407 STANDARD_MODULE_HEADER_EX,
3408 NULL,
3409 standard_deps,
3410 "standard", /* extension name */
3411 basic_functions, /* function list */
3412 PHP_MINIT(basic), /* process startup */
3413 PHP_MSHUTDOWN(basic), /* process shutdown */
3414 PHP_RINIT(basic), /* request startup */
3415 PHP_RSHUTDOWN(basic), /* request shutdown */
3416 PHP_MINFO(basic), /* extension info */
3417 PHP_STANDARD_VERSION, /* extension version */
3418 STANDARD_MODULE_PROPERTIES
3419 };
3420 /* }}} */
3421
3422 #if defined(HAVE_PUTENV)
php_putenv_destructor(zval * zv)3423 static void php_putenv_destructor(zval *zv) /* {{{ */
3424 {
3425 putenv_entry *pe = Z_PTR_P(zv);
3426
3427 if (pe->previous_value) {
3428 # if defined(PHP_WIN32)
3429 /* MSVCRT has a bug in putenv() when setting a variable that
3430 * is already set; if the SetEnvironmentVariable() API call
3431 * fails, the Crt will double free() a string.
3432 * We try to avoid this by setting our own value first */
3433 SetEnvironmentVariable(pe->key, "bugbug");
3434 # endif
3435 putenv(pe->previous_value);
3436 # if defined(PHP_WIN32)
3437 efree(pe->previous_value);
3438 # endif
3439 } else {
3440 # if HAVE_UNSETENV
3441 unsetenv(pe->key);
3442 # elif defined(PHP_WIN32)
3443 SetEnvironmentVariable(pe->key, NULL);
3444 # ifndef ZTS
3445 _putenv_s(pe->key, "");
3446 # endif
3447 # else
3448 char **env;
3449
3450 for (env = environ; env != NULL && *env != NULL; env++) {
3451 if (!strncmp(*env, pe->key, pe->key_len) && (*env)[pe->key_len] == '=') { /* found it */
3452 *env = "";
3453 break;
3454 }
3455 }
3456 # endif
3457 }
3458 #ifdef HAVE_TZSET
3459 /* don't forget to reset the various libc globals that
3460 * we might have changed by an earlier call to tzset(). */
3461 if (!strncmp(pe->key, "TZ", pe->key_len)) {
3462 tzset();
3463 }
3464 #endif
3465
3466 efree(pe->putenv_string);
3467 efree(pe->key);
3468 efree(pe);
3469 }
3470 /* }}} */
3471 #endif
3472
basic_globals_ctor(php_basic_globals * basic_globals_p)3473 static void basic_globals_ctor(php_basic_globals *basic_globals_p) /* {{{ */
3474 {
3475 BG(mt_rand_is_seeded) = 0;
3476 BG(mt_rand_mode) = MT_RAND_MT19937;
3477 BG(umask) = -1;
3478 BG(next) = NULL;
3479 BG(left) = -1;
3480 BG(user_tick_functions) = NULL;
3481 BG(user_filter_map) = NULL;
3482 BG(serialize_lock) = 0;
3483
3484 memset(&BG(serialize), 0, sizeof(BG(serialize)));
3485 memset(&BG(unserialize), 0, sizeof(BG(unserialize)));
3486
3487 memset(&BG(url_adapt_session_ex), 0, sizeof(BG(url_adapt_session_ex)));
3488 memset(&BG(url_adapt_output_ex), 0, sizeof(BG(url_adapt_output_ex)));
3489
3490 BG(url_adapt_session_ex).type = 1;
3491 BG(url_adapt_output_ex).type = 0;
3492
3493 zend_hash_init(&BG(url_adapt_session_hosts_ht), 0, NULL, NULL, 1);
3494 zend_hash_init(&BG(url_adapt_output_hosts_ht), 0, NULL, NULL, 1);
3495
3496 #if defined(_REENTRANT) && defined(HAVE_MBRLEN) && defined(HAVE_MBSTATE_T)
3497 memset(&BG(mblen_state), 0, sizeof(BG(mblen_state)));
3498 #endif
3499
3500 BG(incomplete_class) = incomplete_class_entry;
3501 BG(page_uid) = -1;
3502 BG(page_gid) = -1;
3503 }
3504 /* }}} */
3505
basic_globals_dtor(php_basic_globals * basic_globals_p)3506 static void basic_globals_dtor(php_basic_globals *basic_globals_p) /* {{{ */
3507 {
3508 if (basic_globals_p->url_adapt_session_ex.tags) {
3509 zend_hash_destroy(basic_globals_p->url_adapt_session_ex.tags);
3510 free(basic_globals_p->url_adapt_session_ex.tags);
3511 }
3512 if (basic_globals_p->url_adapt_output_ex.tags) {
3513 zend_hash_destroy(basic_globals_p->url_adapt_output_ex.tags);
3514 free(basic_globals_p->url_adapt_output_ex.tags);
3515 }
3516
3517 zend_hash_destroy(&basic_globals_p->url_adapt_session_hosts_ht);
3518 zend_hash_destroy(&basic_globals_p->url_adapt_output_hosts_ht);
3519 }
3520 /* }}} */
3521
3522 #define PHP_DOUBLE_INFINITY_HIGH 0x7ff00000
3523 #define PHP_DOUBLE_QUIET_NAN_HIGH 0xfff80000
3524
php_get_nan(void)3525 PHPAPI double php_get_nan(void) /* {{{ */
3526 {
3527 #if HAVE_HUGE_VAL_NAN
3528 return HUGE_VAL + -HUGE_VAL;
3529 #elif defined(__i386__) || defined(_X86_) || defined(ALPHA) || defined(_ALPHA) || defined(__alpha)
3530 double val = 0.0;
3531 ((uint32_t*)&val)[1] = PHP_DOUBLE_QUIET_NAN_HIGH;
3532 ((uint32_t*)&val)[0] = 0;
3533 return val;
3534 #elif HAVE_ATOF_ACCEPTS_NAN
3535 return atof("NAN");
3536 #else
3537 return 0.0/0.0;
3538 #endif
3539 }
3540 /* }}} */
3541
php_get_inf(void)3542 PHPAPI double php_get_inf(void) /* {{{ */
3543 {
3544 #if HAVE_HUGE_VAL_INF
3545 return HUGE_VAL;
3546 #elif defined(__i386__) || defined(_X86_) || defined(ALPHA) || defined(_ALPHA) || defined(__alpha)
3547 double val = 0.0;
3548 ((uint32_t*)&val)[1] = PHP_DOUBLE_INFINITY_HIGH;
3549 ((uint32_t*)&val)[0] = 0;
3550 return val;
3551 #elif HAVE_ATOF_ACCEPTS_INF
3552 return atof("INF");
3553 #else
3554 return 1.0/0.0;
3555 #endif
3556 }
3557 /* }}} */
3558
3559 #define BASIC_MINIT_SUBMODULE(module) \
3560 if (PHP_MINIT(module)(INIT_FUNC_ARGS_PASSTHRU) == SUCCESS) {\
3561 BASIC_ADD_SUBMODULE(module); \
3562 }
3563
3564 #define BASIC_ADD_SUBMODULE(module) \
3565 zend_hash_str_add_empty_element(&basic_submodules, #module, strlen(#module));
3566
3567 #define BASIC_RINIT_SUBMODULE(module) \
3568 if (zend_hash_str_exists(&basic_submodules, #module, strlen(#module))) { \
3569 PHP_RINIT(module)(INIT_FUNC_ARGS_PASSTHRU); \
3570 }
3571
3572 #define BASIC_MINFO_SUBMODULE(module) \
3573 if (zend_hash_str_exists(&basic_submodules, #module, strlen(#module))) { \
3574 PHP_MINFO(module)(ZEND_MODULE_INFO_FUNC_ARGS_PASSTHRU); \
3575 }
3576
3577 #define BASIC_RSHUTDOWN_SUBMODULE(module) \
3578 if (zend_hash_str_exists(&basic_submodules, #module, strlen(#module))) { \
3579 PHP_RSHUTDOWN(module)(SHUTDOWN_FUNC_ARGS_PASSTHRU); \
3580 }
3581
3582 #define BASIC_MSHUTDOWN_SUBMODULE(module) \
3583 if (zend_hash_str_exists(&basic_submodules, #module, strlen(#module))) { \
3584 PHP_MSHUTDOWN(module)(SHUTDOWN_FUNC_ARGS_PASSTHRU); \
3585 }
3586
PHP_MINIT_FUNCTION(basic)3587 PHP_MINIT_FUNCTION(basic) /* {{{ */
3588 {
3589 #ifdef ZTS
3590 ts_allocate_id(&basic_globals_id, sizeof(php_basic_globals), (ts_allocate_ctor) basic_globals_ctor, (ts_allocate_dtor) basic_globals_dtor);
3591 #ifdef PHP_WIN32
3592 ts_allocate_id(&php_win32_core_globals_id, sizeof(php_win32_core_globals), (ts_allocate_ctor)php_win32_core_globals_ctor, (ts_allocate_dtor)php_win32_core_globals_dtor );
3593 #endif
3594 #else
3595 basic_globals_ctor(&basic_globals);
3596 #ifdef PHP_WIN32
3597 php_win32_core_globals_ctor(&the_php_win32_core_globals);
3598 #endif
3599 #endif
3600
3601 zend_hash_init(&basic_submodules, 0, NULL, NULL, 1);
3602
3603 BG(incomplete_class) = incomplete_class_entry = php_create_incomplete_class();
3604
3605 REGISTER_LONG_CONSTANT("CONNECTION_ABORTED", PHP_CONNECTION_ABORTED, CONST_CS | CONST_PERSISTENT);
3606 REGISTER_LONG_CONSTANT("CONNECTION_NORMAL", PHP_CONNECTION_NORMAL, CONST_CS | CONST_PERSISTENT);
3607 REGISTER_LONG_CONSTANT("CONNECTION_TIMEOUT", PHP_CONNECTION_TIMEOUT, CONST_CS | CONST_PERSISTENT);
3608
3609 REGISTER_LONG_CONSTANT("INI_USER", ZEND_INI_USER, CONST_CS | CONST_PERSISTENT);
3610 REGISTER_LONG_CONSTANT("INI_PERDIR", ZEND_INI_PERDIR, CONST_CS | CONST_PERSISTENT);
3611 REGISTER_LONG_CONSTANT("INI_SYSTEM", ZEND_INI_SYSTEM, CONST_CS | CONST_PERSISTENT);
3612 REGISTER_LONG_CONSTANT("INI_ALL", ZEND_INI_ALL, CONST_CS | CONST_PERSISTENT);
3613
3614 REGISTER_LONG_CONSTANT("INI_SCANNER_NORMAL", ZEND_INI_SCANNER_NORMAL, CONST_CS | CONST_PERSISTENT);
3615 REGISTER_LONG_CONSTANT("INI_SCANNER_RAW", ZEND_INI_SCANNER_RAW, CONST_CS | CONST_PERSISTENT);
3616 REGISTER_LONG_CONSTANT("INI_SCANNER_TYPED", ZEND_INI_SCANNER_TYPED, CONST_CS | CONST_PERSISTENT);
3617
3618 REGISTER_LONG_CONSTANT("PHP_URL_SCHEME", PHP_URL_SCHEME, CONST_CS | CONST_PERSISTENT);
3619 REGISTER_LONG_CONSTANT("PHP_URL_HOST", PHP_URL_HOST, CONST_CS | CONST_PERSISTENT);
3620 REGISTER_LONG_CONSTANT("PHP_URL_PORT", PHP_URL_PORT, CONST_CS | CONST_PERSISTENT);
3621 REGISTER_LONG_CONSTANT("PHP_URL_USER", PHP_URL_USER, CONST_CS | CONST_PERSISTENT);
3622 REGISTER_LONG_CONSTANT("PHP_URL_PASS", PHP_URL_PASS, CONST_CS | CONST_PERSISTENT);
3623 REGISTER_LONG_CONSTANT("PHP_URL_PATH", PHP_URL_PATH, CONST_CS | CONST_PERSISTENT);
3624 REGISTER_LONG_CONSTANT("PHP_URL_QUERY", PHP_URL_QUERY, CONST_CS | CONST_PERSISTENT);
3625 REGISTER_LONG_CONSTANT("PHP_URL_FRAGMENT", PHP_URL_FRAGMENT, CONST_CS | CONST_PERSISTENT);
3626 REGISTER_LONG_CONSTANT("PHP_QUERY_RFC1738", PHP_QUERY_RFC1738, CONST_CS | CONST_PERSISTENT);
3627 REGISTER_LONG_CONSTANT("PHP_QUERY_RFC3986", PHP_QUERY_RFC3986, CONST_CS | CONST_PERSISTENT);
3628
3629 #define REGISTER_MATH_CONSTANT(x) REGISTER_DOUBLE_CONSTANT(#x, x, CONST_CS | CONST_PERSISTENT)
3630 REGISTER_MATH_CONSTANT(M_E);
3631 REGISTER_MATH_CONSTANT(M_LOG2E);
3632 REGISTER_MATH_CONSTANT(M_LOG10E);
3633 REGISTER_MATH_CONSTANT(M_LN2);
3634 REGISTER_MATH_CONSTANT(M_LN10);
3635 REGISTER_MATH_CONSTANT(M_PI);
3636 REGISTER_MATH_CONSTANT(M_PI_2);
3637 REGISTER_MATH_CONSTANT(M_PI_4);
3638 REGISTER_MATH_CONSTANT(M_1_PI);
3639 REGISTER_MATH_CONSTANT(M_2_PI);
3640 REGISTER_MATH_CONSTANT(M_SQRTPI);
3641 REGISTER_MATH_CONSTANT(M_2_SQRTPI);
3642 REGISTER_MATH_CONSTANT(M_LNPI);
3643 REGISTER_MATH_CONSTANT(M_EULER);
3644 REGISTER_MATH_CONSTANT(M_SQRT2);
3645 REGISTER_MATH_CONSTANT(M_SQRT1_2);
3646 REGISTER_MATH_CONSTANT(M_SQRT3);
3647 REGISTER_DOUBLE_CONSTANT("INF", php_get_inf(), CONST_CS | CONST_PERSISTENT);
3648 REGISTER_DOUBLE_CONSTANT("NAN", php_get_nan(), CONST_CS | CONST_PERSISTENT);
3649
3650 REGISTER_LONG_CONSTANT("PHP_ROUND_HALF_UP", PHP_ROUND_HALF_UP, CONST_CS | CONST_PERSISTENT);
3651 REGISTER_LONG_CONSTANT("PHP_ROUND_HALF_DOWN", PHP_ROUND_HALF_DOWN, CONST_CS | CONST_PERSISTENT);
3652 REGISTER_LONG_CONSTANT("PHP_ROUND_HALF_EVEN", PHP_ROUND_HALF_EVEN, CONST_CS | CONST_PERSISTENT);
3653 REGISTER_LONG_CONSTANT("PHP_ROUND_HALF_ODD", PHP_ROUND_HALF_ODD, CONST_CS | CONST_PERSISTENT);
3654
3655 #if ENABLE_TEST_CLASS
3656 test_class_startup();
3657 #endif
3658
3659 register_phpinfo_constants(INIT_FUNC_ARGS_PASSTHRU);
3660 register_html_constants(INIT_FUNC_ARGS_PASSTHRU);
3661 register_string_constants(INIT_FUNC_ARGS_PASSTHRU);
3662
3663 BASIC_ADD_SUBMODULE(dl)
3664 BASIC_ADD_SUBMODULE(mail)
3665 BASIC_ADD_SUBMODULE(streams)
3666 BASIC_MINIT_SUBMODULE(file)
3667 BASIC_MINIT_SUBMODULE(pack)
3668 BASIC_MINIT_SUBMODULE(browscap)
3669 BASIC_MINIT_SUBMODULE(standard_filters)
3670 BASIC_MINIT_SUBMODULE(user_filters)
3671 BASIC_MINIT_SUBMODULE(password)
3672 BASIC_MINIT_SUBMODULE(mt_rand)
3673
3674 #if defined(HAVE_LOCALECONV) && defined(ZTS)
3675 BASIC_MINIT_SUBMODULE(localeconv)
3676 #endif
3677
3678 #if defined(HAVE_NL_LANGINFO)
3679 BASIC_MINIT_SUBMODULE(nl_langinfo)
3680 #endif
3681
3682 BASIC_MINIT_SUBMODULE(crypt)
3683 BASIC_MINIT_SUBMODULE(lcg)
3684
3685 BASIC_MINIT_SUBMODULE(dir)
3686 #ifdef HAVE_SYSLOG_H
3687 BASIC_MINIT_SUBMODULE(syslog)
3688 #endif
3689 BASIC_MINIT_SUBMODULE(array)
3690 BASIC_MINIT_SUBMODULE(assert)
3691 BASIC_MINIT_SUBMODULE(url_scanner_ex)
3692 #ifdef PHP_CAN_SUPPORT_PROC_OPEN
3693 BASIC_MINIT_SUBMODULE(proc_open)
3694 #endif
3695 BASIC_MINIT_SUBMODULE(exec)
3696
3697 BASIC_MINIT_SUBMODULE(user_streams)
3698 BASIC_MINIT_SUBMODULE(imagetypes)
3699
3700 php_register_url_stream_wrapper("php", &php_stream_php_wrapper);
3701 php_register_url_stream_wrapper("file", &php_plain_files_wrapper);
3702 #ifdef HAVE_GLOB
3703 php_register_url_stream_wrapper("glob", &php_glob_stream_wrapper);
3704 #endif
3705 php_register_url_stream_wrapper("data", &php_stream_rfc2397_wrapper);
3706 php_register_url_stream_wrapper("http", &php_stream_http_wrapper);
3707 php_register_url_stream_wrapper("ftp", &php_stream_ftp_wrapper);
3708
3709 #if defined(PHP_WIN32) || (HAVE_DNS_SEARCH_FUNC && !(defined(__BEOS__) || defined(NETWARE)))
3710 # if defined(PHP_WIN32) || HAVE_FULL_DNS_FUNCS
3711 BASIC_MINIT_SUBMODULE(dns)
3712 # endif
3713 #endif
3714
3715 BASIC_MINIT_SUBMODULE(random)
3716
3717 return SUCCESS;
3718 }
3719 /* }}} */
3720
PHP_MSHUTDOWN_FUNCTION(basic)3721 PHP_MSHUTDOWN_FUNCTION(basic) /* {{{ */
3722 {
3723 #ifdef HAVE_SYSLOG_H
3724 PHP_MSHUTDOWN(syslog)(SHUTDOWN_FUNC_ARGS_PASSTHRU);
3725 #endif
3726 #ifdef ZTS
3727 ts_free_id(basic_globals_id);
3728 #ifdef PHP_WIN32
3729 ts_free_id(php_win32_core_globals_id);
3730 #endif
3731 #else
3732 basic_globals_dtor(&basic_globals);
3733 #ifdef PHP_WIN32
3734 php_win32_core_globals_dtor(&the_php_win32_core_globals);
3735 #endif
3736 #endif
3737
3738 php_unregister_url_stream_wrapper("php");
3739 php_unregister_url_stream_wrapper("http");
3740 php_unregister_url_stream_wrapper("ftp");
3741
3742 BASIC_MSHUTDOWN_SUBMODULE(browscap)
3743 BASIC_MSHUTDOWN_SUBMODULE(array)
3744 BASIC_MSHUTDOWN_SUBMODULE(assert)
3745 BASIC_MSHUTDOWN_SUBMODULE(url_scanner_ex)
3746 BASIC_MSHUTDOWN_SUBMODULE(file)
3747 BASIC_MSHUTDOWN_SUBMODULE(standard_filters)
3748 #if defined(HAVE_LOCALECONV) && defined(ZTS)
3749 BASIC_MSHUTDOWN_SUBMODULE(localeconv)
3750 #endif
3751 BASIC_MSHUTDOWN_SUBMODULE(crypt)
3752 BASIC_MSHUTDOWN_SUBMODULE(random)
3753
3754 zend_hash_destroy(&basic_submodules);
3755 return SUCCESS;
3756 }
3757 /* }}} */
3758
PHP_RINIT_FUNCTION(basic)3759 PHP_RINIT_FUNCTION(basic) /* {{{ */
3760 {
3761 memset(BG(strtok_table), 0, 256);
3762
3763 BG(serialize_lock) = 0;
3764 memset(&BG(serialize), 0, sizeof(BG(serialize)));
3765 memset(&BG(unserialize), 0, sizeof(BG(unserialize)));
3766
3767 BG(strtok_string) = NULL;
3768 ZVAL_UNDEF(&BG(strtok_zval));
3769 BG(strtok_last) = NULL;
3770 BG(locale_string) = NULL;
3771 BG(locale_changed) = 0;
3772 BG(array_walk_fci) = empty_fcall_info;
3773 BG(array_walk_fci_cache) = empty_fcall_info_cache;
3774 BG(user_compare_fci) = empty_fcall_info;
3775 BG(user_compare_fci_cache) = empty_fcall_info_cache;
3776 BG(page_uid) = -1;
3777 BG(page_gid) = -1;
3778 BG(page_inode) = -1;
3779 BG(page_mtime) = -1;
3780 #ifdef HAVE_PUTENV
3781 zend_hash_init(&BG(putenv_ht), 1, NULL, php_putenv_destructor, 0);
3782 #endif
3783 BG(user_shutdown_function_names) = NULL;
3784
3785 PHP_RINIT(filestat)(INIT_FUNC_ARGS_PASSTHRU);
3786 #ifdef HAVE_SYSLOG_H
3787 BASIC_RINIT_SUBMODULE(syslog)
3788 #endif
3789 BASIC_RINIT_SUBMODULE(dir)
3790 BASIC_RINIT_SUBMODULE(url_scanner_ex)
3791
3792 /* Setup default context */
3793 FG(default_context) = NULL;
3794
3795 /* Default to global wrappers only */
3796 FG(stream_wrappers) = NULL;
3797
3798 /* Default to global filters only */
3799 FG(stream_filters) = NULL;
3800
3801 return SUCCESS;
3802 }
3803 /* }}} */
3804
PHP_RSHUTDOWN_FUNCTION(basic)3805 PHP_RSHUTDOWN_FUNCTION(basic) /* {{{ */
3806 {
3807 zval_ptr_dtor(&BG(strtok_zval));
3808 ZVAL_UNDEF(&BG(strtok_zval));
3809 BG(strtok_string) = NULL;
3810 #ifdef HAVE_PUTENV
3811 zend_hash_destroy(&BG(putenv_ht));
3812 #endif
3813
3814 BG(mt_rand_is_seeded) = 0;
3815
3816 if (BG(umask) != -1) {
3817 umask(BG(umask));
3818 }
3819
3820 /* Check if locale was changed and change it back
3821 * to the value in startup environment */
3822 if (BG(locale_changed)) {
3823 setlocale(LC_ALL, "C");
3824 setlocale(LC_CTYPE, "");
3825 zend_update_current_locale();
3826 if (BG(locale_string)) {
3827 zend_string_release(BG(locale_string));
3828 BG(locale_string) = NULL;
3829 }
3830 }
3831
3832 /* FG(stream_wrappers) and FG(stream_filters) are destroyed
3833 * during php_request_shutdown() */
3834
3835 PHP_RSHUTDOWN(filestat)(SHUTDOWN_FUNC_ARGS_PASSTHRU);
3836 #ifdef HAVE_SYSLOG_H
3837 #ifdef PHP_WIN32
3838 BASIC_RSHUTDOWN_SUBMODULE(syslog)(SHUTDOWN_FUNC_ARGS_PASSTHRU);
3839 #endif
3840 #endif
3841 BASIC_RSHUTDOWN_SUBMODULE(assert)
3842 BASIC_RSHUTDOWN_SUBMODULE(url_scanner_ex)
3843 BASIC_RSHUTDOWN_SUBMODULE(streams)
3844 #ifdef PHP_WIN32
3845 BASIC_RSHUTDOWN_SUBMODULE(win32_core_globals)
3846 #endif
3847
3848 if (BG(user_tick_functions)) {
3849 zend_llist_destroy(BG(user_tick_functions));
3850 efree(BG(user_tick_functions));
3851 BG(user_tick_functions) = NULL;
3852 }
3853
3854 BASIC_RSHUTDOWN_SUBMODULE(user_filters)
3855 BASIC_RSHUTDOWN_SUBMODULE(browscap)
3856
3857 BG(page_uid) = -1;
3858 BG(page_gid) = -1;
3859 return SUCCESS;
3860 }
3861 /* }}} */
3862
PHP_MINFO_FUNCTION(basic)3863 PHP_MINFO_FUNCTION(basic) /* {{{ */
3864 {
3865 php_info_print_table_start();
3866 BASIC_MINFO_SUBMODULE(dl)
3867 BASIC_MINFO_SUBMODULE(mail)
3868 php_info_print_table_end();
3869 BASIC_MINFO_SUBMODULE(assert)
3870 }
3871 /* }}} */
3872
3873 /* {{{ proto mixed constant(string const_name)
3874 Given the name of a constant this function will return the constant's associated value */
PHP_FUNCTION(constant)3875 PHP_FUNCTION(constant)
3876 {
3877 zend_string *const_name;
3878 zval *c;
3879 zend_class_entry *scope;
3880
3881 if (zend_parse_parameters(ZEND_NUM_ARGS(), "S", &const_name) == FAILURE) {
3882 return;
3883 }
3884
3885 scope = zend_get_executed_scope();
3886 c = zend_get_constant_ex(const_name, scope, ZEND_FETCH_CLASS_SILENT);
3887 if (c) {
3888 ZVAL_DUP(return_value, c);
3889 if (Z_CONSTANT_P(return_value)) {
3890 if (UNEXPECTED(zval_update_constant_ex(return_value, scope) != SUCCESS)) {
3891 return;
3892 }
3893 }
3894 } else {
3895 if (!EG(exception)) {
3896 php_error_docref(NULL, E_WARNING, "Couldn't find constant %s", ZSTR_VAL(const_name));
3897 }
3898 RETURN_NULL();
3899 }
3900 }
3901 /* }}} */
3902
3903 #ifdef HAVE_INET_NTOP
3904 /* {{{ proto string inet_ntop(string in_addr)
3905 Converts a packed inet address to a human readable IP address string */
PHP_NAMED_FUNCTION(php_inet_ntop)3906 PHP_NAMED_FUNCTION(php_inet_ntop)
3907 {
3908 char *address;
3909 size_t address_len;
3910 int af = AF_INET;
3911 char buffer[40];
3912
3913 if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &address, &address_len) == FAILURE) {
3914 RETURN_FALSE;
3915 }
3916
3917 #ifdef HAVE_IPV6
3918 if (address_len == 16) {
3919 af = AF_INET6;
3920 } else
3921 #endif
3922 if (address_len != 4) {
3923 php_error_docref(NULL, E_WARNING, "Invalid in_addr value");
3924 RETURN_FALSE;
3925 }
3926
3927 if (!inet_ntop(af, address, buffer, sizeof(buffer))) {
3928 php_error_docref(NULL, E_WARNING, "An unknown error occurred");
3929 RETURN_FALSE;
3930 }
3931
3932 RETURN_STRING(buffer);
3933 }
3934 /* }}} */
3935 #endif /* HAVE_INET_NTOP */
3936
3937 #ifdef HAVE_INET_PTON
3938 /* {{{ proto string inet_pton(string ip_address)
3939 Converts a human readable IP address to a packed binary string */
PHP_NAMED_FUNCTION(php_inet_pton)3940 PHP_NAMED_FUNCTION(php_inet_pton)
3941 {
3942 int ret, af = AF_INET;
3943 char *address;
3944 size_t address_len;
3945 char buffer[17];
3946
3947 if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &address, &address_len) == FAILURE) {
3948 RETURN_FALSE;
3949 }
3950
3951 memset(buffer, 0, sizeof(buffer));
3952
3953 #ifdef HAVE_IPV6
3954 if (strchr(address, ':')) {
3955 af = AF_INET6;
3956 } else
3957 #endif
3958 if (!strchr(address, '.')) {
3959 php_error_docref(NULL, E_WARNING, "Unrecognized address %s", address);
3960 RETURN_FALSE;
3961 }
3962
3963 ret = inet_pton(af, address, buffer);
3964
3965 if (ret <= 0) {
3966 php_error_docref(NULL, E_WARNING, "Unrecognized address %s", address);
3967 RETURN_FALSE;
3968 }
3969
3970 RETURN_STRINGL(buffer, af == AF_INET ? 4 : 16);
3971 }
3972 /* }}} */
3973 #endif /* HAVE_INET_PTON */
3974
3975 /* {{{ proto int ip2long(string ip_address)
3976 Converts a string containing an (IPv4) Internet Protocol dotted address into a proper address */
PHP_FUNCTION(ip2long)3977 PHP_FUNCTION(ip2long)
3978 {
3979 char *addr;
3980 size_t addr_len;
3981 #ifdef HAVE_INET_PTON
3982 struct in_addr ip;
3983 #else
3984 zend_ulong ip;
3985 #endif
3986
3987 if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &addr, &addr_len) == FAILURE) {
3988 return;
3989 }
3990
3991 #ifdef HAVE_INET_PTON
3992 if (addr_len == 0 || inet_pton(AF_INET, addr, &ip) != 1) {
3993 RETURN_FALSE;
3994 }
3995 RETURN_LONG(ntohl(ip.s_addr));
3996 #else
3997 if (addr_len == 0 || (ip = inet_addr(addr)) == INADDR_NONE) {
3998 /* The only special case when we should return -1 ourselves,
3999 * because inet_addr() considers it wrong. We return 0xFFFFFFFF and
4000 * not -1 or ~0 because of 32/64bit issues. */
4001 if (addr_len == sizeof("255.255.255.255") - 1 &&
4002 !memcmp(addr, "255.255.255.255", sizeof("255.255.255.255") - 1)
4003 ) {
4004 RETURN_LONG(0xFFFFFFFF);
4005 }
4006 RETURN_FALSE;
4007 }
4008 RETURN_LONG(ntohl(ip));
4009 #endif
4010 }
4011 /* }}} */
4012
4013 /* {{{ proto string long2ip(int proper_address)
4014 Converts an (IPv4) Internet network address into a string in Internet standard dotted format */
PHP_FUNCTION(long2ip)4015 PHP_FUNCTION(long2ip)
4016 {
4017 zend_ulong ip;
4018 struct in_addr myaddr;
4019 #ifdef HAVE_INET_PTON
4020 char str[40];
4021 #endif
4022
4023 if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &ip) == FAILURE) {
4024 return;
4025 }
4026
4027 myaddr.s_addr = htonl(ip);
4028 #ifdef HAVE_INET_PTON
4029 if (inet_ntop(AF_INET, &myaddr, str, sizeof(str))) {
4030 RETURN_STRING(str);
4031 } else {
4032 RETURN_FALSE;
4033 }
4034 #else
4035 RETURN_STRING(inet_ntoa(myaddr));
4036 #endif
4037 }
4038 /* }}} */
4039
4040 /********************
4041 * System Functions *
4042 ********************/
4043
4044 /* {{{ proto string getenv(string varname[, bool local_only]
4045 Get the value of an environment variable or every available environment variable
4046 if no varname is present */
PHP_FUNCTION(getenv)4047 PHP_FUNCTION(getenv)
4048 {
4049 char *ptr, *str = NULL;
4050 size_t str_len;
4051 zend_bool local_only = 0;
4052
4053 if (zend_parse_parameters(ZEND_NUM_ARGS(), "|sb", &str, &str_len, &local_only) == FAILURE) {
4054 RETURN_FALSE;
4055 }
4056
4057 if (!str) {
4058 array_init(return_value);
4059 php_import_environment_variables(return_value);
4060 return;
4061 }
4062
4063 if (!local_only) {
4064 /* SAPI method returns an emalloc()'d string */
4065 ptr = sapi_getenv(str, str_len);
4066 if (ptr) {
4067 // TODO: avoid realocation ???
4068 RETVAL_STRING(ptr);
4069 efree(ptr);
4070 return;
4071 }
4072 }
4073 #ifdef PHP_WIN32
4074 {
4075 wchar_t dummybuf;
4076 DWORD size;
4077 wchar_t *keyw, *valw;
4078
4079 keyw = php_win32_cp_conv_any_to_w(str, str_len, PHP_WIN32_CP_IGNORE_LEN_P);
4080 if (!keyw) {
4081 RETURN_FALSE;
4082 }
4083
4084 SetLastError(0);
4085 /*If the given bugger is not large enough to hold the data, the return value is
4086 the buffer size, in characters, required to hold the string and its terminating
4087 null character. We use this return value to alloc the final buffer. */
4088 size = GetEnvironmentVariableW(keyw, &dummybuf, 0);
4089 if (GetLastError() == ERROR_ENVVAR_NOT_FOUND) {
4090 /* The environment variable doesn't exist. */
4091 free(keyw);
4092 RETURN_FALSE;
4093 }
4094
4095 if (size == 0) {
4096 /* env exists, but it is empty */
4097 free(keyw);
4098 RETURN_EMPTY_STRING();
4099 }
4100
4101 valw = emalloc((size + 1) * sizeof(wchar_t));
4102 size = GetEnvironmentVariableW(keyw, valw, size);
4103 if (size == 0) {
4104 /* has been removed between the two calls */
4105 free(keyw);
4106 efree(valw);
4107 RETURN_EMPTY_STRING();
4108 } else {
4109 ptr = php_win32_cp_w_to_any(valw);
4110 RETVAL_STRING(ptr);
4111 free(ptr);
4112 free(keyw);
4113 efree(valw);
4114 return;
4115 }
4116 }
4117 #else
4118 /* system method returns a const */
4119 ptr = getenv(str);
4120 if (ptr) {
4121 RETURN_STRING(ptr);
4122 }
4123 #endif
4124 RETURN_FALSE;
4125 }
4126 /* }}} */
4127
4128 #ifdef HAVE_PUTENV
4129 /* {{{ proto bool putenv(string setting)
4130 Set the value of an environment variable */
PHP_FUNCTION(putenv)4131 PHP_FUNCTION(putenv)
4132 {
4133 char *setting;
4134 size_t setting_len;
4135 char *p, **env;
4136 putenv_entry pe;
4137 #ifdef PHP_WIN32
4138 char *value = NULL;
4139 int equals = 0;
4140 int error_code;
4141 #endif
4142
4143 if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &setting, &setting_len) == FAILURE) {
4144 return;
4145 }
4146
4147 if(setting_len == 0 || setting[0] == '=') {
4148 php_error_docref(NULL, E_WARNING, "Invalid parameter syntax");
4149 RETURN_FALSE;
4150 }
4151
4152 pe.putenv_string = estrndup(setting, setting_len);
4153 pe.key = estrndup(setting, setting_len);
4154 if ((p = strchr(pe.key, '='))) { /* nullify the '=' if there is one */
4155 *p = '\0';
4156 #ifdef PHP_WIN32
4157 equals = 1;
4158 #endif
4159 }
4160
4161 pe.key_len = (int)strlen(pe.key);
4162 #ifdef PHP_WIN32
4163 if (equals) {
4164 if (pe.key_len < setting_len - 1) {
4165 value = p + 1;
4166 } else {
4167 /* empty string*/
4168 value = p;
4169 }
4170 }
4171 #endif
4172
4173 zend_hash_str_del(&BG(putenv_ht), pe.key, pe.key_len);
4174
4175 /* find previous value */
4176 pe.previous_value = NULL;
4177 for (env = environ; env != NULL && *env != NULL; env++) {
4178 if (!strncmp(*env, pe.key, pe.key_len) && (*env)[pe.key_len] == '=') { /* found it */
4179 #if defined(PHP_WIN32)
4180 /* must copy previous value because MSVCRT's putenv can free the string without notice */
4181 pe.previous_value = estrdup(*env);
4182 #else
4183 pe.previous_value = *env;
4184 #endif
4185 break;
4186 }
4187 }
4188
4189 #if HAVE_UNSETENV
4190 if (!p) { /* no '=' means we want to unset it */
4191 unsetenv(pe.putenv_string);
4192 }
4193 if (!p || putenv(pe.putenv_string) == 0) { /* success */
4194 #else
4195 # ifndef PHP_WIN32
4196 if (putenv(pe.putenv_string) == 0) { /* success */
4197 # else
4198 wchar_t *keyw, *valw = NULL;
4199
4200 keyw = php_win32_cp_any_to_w(pe.key);
4201 if (value) {
4202 valw = php_win32_cp_any_to_w(value);
4203 }
4204 /* valw may be NULL, but the failed conversion still needs to be checked. */
4205 if (!keyw || !valw && value) {
4206 efree(pe.putenv_string);
4207 efree(pe.key);
4208 free(keyw);
4209 free(valw);
4210 RETURN_FALSE;
4211 }
4212
4213 error_code = SetEnvironmentVariableW(keyw, valw);
4214
4215 if (error_code != 0
4216 # ifndef ZTS
4217 /* We need both SetEnvironmentVariable and _putenv here as some
4218 dependency lib could use either way to read the environment.
4219 Obviously the CRT version will be useful more often. But
4220 generally, doing both brings us on the safe track at least
4221 in NTS build. */
4222 && _wputenv_s(keyw, valw ? valw : L"") == 0
4223 # endif
4224 ) { /* success */
4225 # endif
4226 #endif
4227 zend_hash_str_add_mem(&BG(putenv_ht), pe.key, pe.key_len, &pe, sizeof(putenv_entry));
4228 #ifdef HAVE_TZSET
4229 if (!strncmp(pe.key, "TZ", pe.key_len)) {
4230 tzset();
4231 }
4232 #endif
4233 #if defined(PHP_WIN32)
4234 free(keyw);
4235 free(valw);
4236 #endif
4237 RETURN_TRUE;
4238 } else {
4239 efree(pe.putenv_string);
4240 efree(pe.key);
4241 #if defined(PHP_WIN32)
4242 free(keyw);
4243 free(valw);
4244 #endif
4245 RETURN_FALSE;
4246 }
4247 }
4248 /* }}} */
4249 #endif
4250
4251 /* {{{ free_argv()
4252 Free the memory allocated to an argv array. */
4253 static void free_argv(char **argv, int argc)
4254 {
4255 int i;
4256
4257 if (argv) {
4258 for (i = 0; i < argc; i++) {
4259 if (argv[i]) {
4260 efree(argv[i]);
4261 }
4262 }
4263 efree(argv);
4264 }
4265 }
4266 /* }}} */
4267
4268 /* {{{ free_longopts()
4269 Free the memory allocated to an longopt array. */
4270 static void free_longopts(opt_struct *longopts)
4271 {
4272 opt_struct *p;
4273
4274 if (longopts) {
4275 for (p = longopts; p && p->opt_char != '-'; p++) {
4276 if (p->opt_name != NULL) {
4277 efree((char *)(p->opt_name));
4278 }
4279 }
4280 }
4281 }
4282 /* }}} */
4283
4284 /* {{{ parse_opts()
4285 Convert the typical getopt input characters to the php_getopt struct array */
4286 static int parse_opts(char * opts, opt_struct ** result)
4287 {
4288 opt_struct * paras = NULL;
4289 unsigned int i, count = 0;
4290 unsigned int opts_len = (unsigned int)strlen(opts);
4291
4292 for (i = 0; i < opts_len; i++) {
4293 if ((opts[i] >= 48 && opts[i] <= 57) ||
4294 (opts[i] >= 65 && opts[i] <= 90) ||
4295 (opts[i] >= 97 && opts[i] <= 122)
4296 ) {
4297 count++;
4298 }
4299 }
4300
4301 paras = safe_emalloc(sizeof(opt_struct), count, 0);
4302 memset(paras, 0, sizeof(opt_struct) * count);
4303 *result = paras;
4304 while ( (*opts >= 48 && *opts <= 57) || /* 0 - 9 */
4305 (*opts >= 65 && *opts <= 90) || /* A - Z */
4306 (*opts >= 97 && *opts <= 122) /* a - z */
4307 ) {
4308 paras->opt_char = *opts;
4309 paras->need_param = (*(++opts) == ':') ? 1 : 0;
4310 paras->opt_name = NULL;
4311 if (paras->need_param == 1) {
4312 opts++;
4313 if (*opts == ':') {
4314 paras->need_param++;
4315 opts++;
4316 }
4317 }
4318 paras++;
4319 }
4320 return count;
4321 }
4322 /* }}} */
4323
4324 /* {{{ proto array getopt(string options [, array longopts [, int &optind]])
4325 Get options from the command line argument list */
4326 PHP_FUNCTION(getopt)
4327 {
4328 char *options = NULL, **argv = NULL;
4329 char opt[2] = { '\0' };
4330 char *optname;
4331 int argc = 0, len, o;
4332 size_t options_len = 0;
4333 char *php_optarg = NULL;
4334 int php_optind = 1;
4335 zval val, *args = NULL, *p_longopts = NULL;
4336 zval *zoptind = NULL;
4337 int optname_len = 0;
4338 opt_struct *opts, *orig_opts;
4339
4340 if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|az/", &options, &options_len, &p_longopts, &zoptind) == FAILURE) {
4341 RETURN_FALSE;
4342 }
4343
4344 /* Init zoptind to 1 */
4345 if (zoptind) {
4346 zval_dtor(zoptind);
4347 ZVAL_LONG(zoptind, 1);
4348 }
4349
4350 /* Get argv from the global symbol table. We calculate argc ourselves
4351 * in order to be on the safe side, even though it is also available
4352 * from the symbol table. */
4353 if ((Z_TYPE(PG(http_globals)[TRACK_VARS_SERVER]) == IS_ARRAY || zend_is_auto_global_str(ZEND_STRL("_SERVER"))) &&
4354 ((args = zend_hash_str_find_ind(Z_ARRVAL_P(&PG(http_globals)[TRACK_VARS_SERVER]), "argv", sizeof("argv")-1)) != NULL ||
4355 (args = zend_hash_str_find_ind(&EG(symbol_table), "argv", sizeof("argv")-1)) != NULL)
4356 ) {
4357 int pos = 0;
4358 zval *entry;
4359
4360 if (Z_TYPE_P(args) != IS_ARRAY) {
4361 RETURN_FALSE;
4362 }
4363 argc = zend_hash_num_elements(Z_ARRVAL_P(args));
4364
4365 /* Attempt to allocate enough memory to hold all of the arguments
4366 * and a trailing NULL */
4367 argv = (char **) safe_emalloc(sizeof(char *), (argc + 1), 0);
4368
4369 /* Iterate over the hash to construct the argv array. */
4370 ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(args), entry) {
4371 zend_string *arg_str = zval_get_string(entry);
4372
4373 argv[pos++] = estrdup(ZSTR_VAL(arg_str));
4374
4375 zend_string_release(arg_str);
4376 } ZEND_HASH_FOREACH_END();
4377
4378 /* The C Standard requires argv[argc] to be NULL - this might
4379 * keep some getopt implementations happy. */
4380 argv[argc] = NULL;
4381 } else {
4382 /* Return false if we can't find argv. */
4383 RETURN_FALSE;
4384 }
4385
4386 len = parse_opts(options, &opts);
4387
4388 if (p_longopts) {
4389 int count;
4390 zval *entry;
4391
4392 count = zend_hash_num_elements(Z_ARRVAL_P(p_longopts));
4393
4394 /* the first <len> slots are filled by the one short ops
4395 * we now extend our array and jump to the new added structs */
4396 opts = (opt_struct *) erealloc(opts, sizeof(opt_struct) * (len + count + 1));
4397 orig_opts = opts;
4398 opts += len;
4399
4400 memset(opts, 0, count * sizeof(opt_struct));
4401
4402 /* Iterate over the hash to construct the argv array. */
4403 ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(p_longopts), entry) {
4404 zend_string *arg_str = zval_get_string(entry);
4405
4406 opts->need_param = 0;
4407 opts->opt_name = estrdup(ZSTR_VAL(arg_str));
4408 len = (int)strlen(opts->opt_name);
4409 if ((len > 0) && (opts->opt_name[len - 1] == ':')) {
4410 opts->need_param++;
4411 opts->opt_name[len - 1] = '\0';
4412 if ((len > 1) && (opts->opt_name[len - 2] == ':')) {
4413 opts->need_param++;
4414 opts->opt_name[len - 2] = '\0';
4415 }
4416 }
4417 opts->opt_char = 0;
4418 opts++;
4419
4420 zend_string_release(arg_str);
4421 } ZEND_HASH_FOREACH_END();
4422 } else {
4423 opts = (opt_struct*) erealloc(opts, sizeof(opt_struct) * (len + 1));
4424 orig_opts = opts;
4425 opts += len;
4426 }
4427
4428 /* php_getopt want to identify the last param */
4429 opts->opt_char = '-';
4430 opts->need_param = 0;
4431 opts->opt_name = NULL;
4432
4433 /* Initialize the return value as an array. */
4434 array_init(return_value);
4435
4436 /* after our pointer arithmetic jump back to the first element */
4437 opts = orig_opts;
4438
4439 while ((o = php_getopt(argc, argv, opts, &php_optarg, &php_optind, 0, 1)) != -1) {
4440 /* Skip unknown arguments. */
4441 if (o == '?') {
4442 continue;
4443 }
4444
4445 /* Prepare the option character and the argument string. */
4446 if (o == 0) {
4447 optname = opts[php_optidx].opt_name;
4448 } else {
4449 if (o == 1) {
4450 o = '-';
4451 }
4452 opt[0] = o;
4453 optname = opt;
4454 }
4455
4456 if (php_optarg != NULL) {
4457 /* keep the arg as binary, since the encoding is not known */
4458 ZVAL_STRING(&val, php_optarg);
4459 } else {
4460 ZVAL_FALSE(&val);
4461 }
4462
4463 /* Add this option / argument pair to the result hash. */
4464 optname_len = (int)strlen(optname);
4465 if (!(optname_len > 1 && optname[0] == '0') && is_numeric_string(optname, optname_len, NULL, NULL, 0) == IS_LONG) {
4466 /* numeric string */
4467 int optname_int = atoi(optname);
4468 if ((args = zend_hash_index_find(Z_ARRVAL_P(return_value), optname_int)) != NULL) {
4469 if (Z_TYPE_P(args) != IS_ARRAY) {
4470 convert_to_array_ex(args);
4471 }
4472 zend_hash_next_index_insert(Z_ARRVAL_P(args), &val);
4473 } else {
4474 zend_hash_index_update(Z_ARRVAL_P(return_value), optname_int, &val);
4475 }
4476 } else {
4477 /* other strings */
4478 if ((args = zend_hash_str_find(Z_ARRVAL_P(return_value), optname, strlen(optname))) != NULL) {
4479 if (Z_TYPE_P(args) != IS_ARRAY) {
4480 convert_to_array_ex(args);
4481 }
4482 zend_hash_next_index_insert(Z_ARRVAL_P(args), &val);
4483 } else {
4484 zend_hash_str_add(Z_ARRVAL_P(return_value), optname, strlen(optname), &val);
4485 }
4486 }
4487
4488 php_optarg = NULL;
4489 }
4490
4491 /* Set zoptind to php_optind */
4492 if (zoptind) {
4493 ZVAL_LONG(zoptind, php_optind);
4494 }
4495
4496 free_longopts(orig_opts);
4497 efree(orig_opts);
4498 free_argv(argv, argc);
4499 }
4500 /* }}} */
4501
4502 /* {{{ proto void flush(void)
4503 Flush the output buffer */
4504 PHP_FUNCTION(flush)
4505 {
4506 if (zend_parse_parameters_none() == FAILURE) {
4507 return;
4508 }
4509
4510 sapi_flush();
4511 }
4512 /* }}} */
4513
4514 /* {{{ proto void sleep(int seconds)
4515 Delay for a given number of seconds */
4516 PHP_FUNCTION(sleep)
4517 {
4518 zend_long num;
4519
4520 if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &num) == FAILURE) {
4521 RETURN_FALSE;
4522 }
4523 if (num < 0) {
4524 php_error_docref(NULL, E_WARNING, "Number of seconds must be greater than or equal to 0");
4525 RETURN_FALSE;
4526 }
4527 #ifdef PHP_SLEEP_NON_VOID
4528 RETURN_LONG(php_sleep((unsigned int)num));
4529 #else
4530 php_sleep((unsigned int)num);
4531 #endif
4532
4533 }
4534 /* }}} */
4535
4536 /* {{{ proto void usleep(int micro_seconds)
4537 Delay for a given number of micro seconds */
4538 PHP_FUNCTION(usleep)
4539 {
4540 #if HAVE_USLEEP
4541 zend_long num;
4542
4543 if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &num) == FAILURE) {
4544 return;
4545 }
4546 if (num < 0) {
4547 php_error_docref(NULL, E_WARNING, "Number of microseconds must be greater than or equal to 0");
4548 RETURN_FALSE;
4549 }
4550 usleep((unsigned int)num);
4551 #endif
4552 }
4553 /* }}} */
4554
4555 #if HAVE_NANOSLEEP
4556 /* {{{ proto mixed time_nanosleep(long seconds, long nanoseconds)
4557 Delay for a number of seconds and nano seconds */
4558 PHP_FUNCTION(time_nanosleep)
4559 {
4560 zend_long tv_sec, tv_nsec;
4561 struct timespec php_req, php_rem;
4562
4563 if (zend_parse_parameters(ZEND_NUM_ARGS(), "ll", &tv_sec, &tv_nsec) == FAILURE) {
4564 return;
4565 }
4566
4567 if (tv_sec < 0) {
4568 php_error_docref(NULL, E_WARNING, "The seconds value must be greater than 0");
4569 RETURN_FALSE;
4570 }
4571 if (tv_nsec < 0) {
4572 php_error_docref(NULL, E_WARNING, "The nanoseconds value must be greater than 0");
4573 RETURN_FALSE;
4574 }
4575
4576 php_req.tv_sec = (time_t) tv_sec;
4577 php_req.tv_nsec = (long)tv_nsec;
4578 if (!nanosleep(&php_req, &php_rem)) {
4579 RETURN_TRUE;
4580 } else if (errno == EINTR) {
4581 array_init(return_value);
4582 add_assoc_long_ex(return_value, "seconds", sizeof("seconds")-1, php_rem.tv_sec);
4583 add_assoc_long_ex(return_value, "nanoseconds", sizeof("nanoseconds")-1, php_rem.tv_nsec);
4584 return;
4585 } else if (errno == EINVAL) {
4586 php_error_docref(NULL, E_WARNING, "nanoseconds was not in the range 0 to 999 999 999 or seconds was negative");
4587 }
4588
4589 RETURN_FALSE;
4590 }
4591 /* }}} */
4592
4593 /* {{{ proto mixed time_sleep_until(float timestamp)
4594 Make the script sleep until the specified time */
4595 PHP_FUNCTION(time_sleep_until)
4596 {
4597 double d_ts, c_ts;
4598 struct timeval tm;
4599 struct timespec php_req, php_rem;
4600
4601 if (zend_parse_parameters(ZEND_NUM_ARGS(), "d", &d_ts) == FAILURE) {
4602 return;
4603 }
4604
4605 if (gettimeofday((struct timeval *) &tm, NULL) != 0) {
4606 RETURN_FALSE;
4607 }
4608
4609 c_ts = (double)(d_ts - tm.tv_sec - tm.tv_usec / 1000000.00);
4610 if (c_ts < 0) {
4611 php_error_docref(NULL, E_WARNING, "Sleep until to time is less than current time");
4612 RETURN_FALSE;
4613 }
4614
4615 php_req.tv_sec = (time_t) c_ts;
4616 if (php_req.tv_sec > c_ts) { /* rounding up occurred */
4617 php_req.tv_sec--;
4618 }
4619 /* 1sec = 1000000000 nanoseconds */
4620 php_req.tv_nsec = (long) ((c_ts - php_req.tv_sec) * 1000000000.00);
4621
4622 while (nanosleep(&php_req, &php_rem)) {
4623 if (errno == EINTR) {
4624 php_req.tv_sec = php_rem.tv_sec;
4625 php_req.tv_nsec = php_rem.tv_nsec;
4626 } else {
4627 RETURN_FALSE;
4628 }
4629 }
4630
4631 RETURN_TRUE;
4632 }
4633 /* }}} */
4634 #endif
4635
4636 /* {{{ proto string get_current_user(void)
4637 Get the name of the owner of the current PHP script */
4638 PHP_FUNCTION(get_current_user)
4639 {
4640 if (zend_parse_parameters_none() == FAILURE) {
4641 return;
4642 }
4643
4644 RETURN_STRING(php_get_current_user());
4645 }
4646 /* }}} */
4647
4648 /* {{{ add_config_entry_cb
4649 */
4650 static int add_config_entry_cb(zval *entry, int num_args, va_list args, zend_hash_key *hash_key)
4651 {
4652 zval *retval = (zval *)va_arg(args, zval*);
4653 zval tmp;
4654
4655 if (Z_TYPE_P(entry) == IS_STRING) {
4656 if (hash_key->key) {
4657 add_assoc_str_ex(retval, ZSTR_VAL(hash_key->key), ZSTR_LEN(hash_key->key), zend_string_copy(Z_STR_P(entry)));
4658 } else {
4659 add_index_str(retval, hash_key->h, zend_string_copy(Z_STR_P(entry)));
4660 }
4661 } else if (Z_TYPE_P(entry) == IS_ARRAY) {
4662 array_init(&tmp);
4663 zend_hash_apply_with_arguments(Z_ARRVAL_P(entry), add_config_entry_cb, 1, tmp);
4664 zend_hash_update(Z_ARRVAL_P(retval), hash_key->key, &tmp);
4665 }
4666 return 0;
4667 }
4668 /* }}} */
4669
4670 /* {{{ proto mixed get_cfg_var(string option_name)
4671 Get the value of a PHP configuration option */
4672 PHP_FUNCTION(get_cfg_var)
4673 {
4674 char *varname;
4675 size_t varname_len;
4676 zval *retval;
4677
4678 if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &varname, &varname_len) == FAILURE) {
4679 return;
4680 }
4681
4682 retval = cfg_get_entry(varname, (uint)varname_len);
4683
4684 if (retval) {
4685 if (Z_TYPE_P(retval) == IS_ARRAY) {
4686 array_init(return_value);
4687 zend_hash_apply_with_arguments(Z_ARRVAL_P(retval), add_config_entry_cb, 1, return_value);
4688 return;
4689 } else {
4690 RETURN_STRING(Z_STRVAL_P(retval));
4691 }
4692 } else {
4693 RETURN_FALSE;
4694 }
4695 }
4696 /* }}} */
4697
4698 /* {{{ proto int get_magic_quotes_runtime(void)
4699 Get the current active configuration setting of magic_quotes_runtime */
4700 PHP_FUNCTION(get_magic_quotes_runtime)
4701 {
4702 if (zend_parse_parameters_none() == FAILURE) {
4703 return;
4704 }
4705 RETURN_FALSE;
4706 }
4707 /* }}} */
4708
4709 /* {{{ proto int get_magic_quotes_gpc(void)
4710 Get the current active configuration setting of magic_quotes_gpc */
4711 PHP_FUNCTION(get_magic_quotes_gpc)
4712 {
4713 if (zend_parse_parameters_none() == FAILURE) {
4714 return;
4715 }
4716 RETURN_FALSE;
4717 }
4718 /* }}} */
4719
4720 /*
4721 1st arg = error message
4722 2nd arg = error option
4723 3rd arg = optional parameters (email address or tcp address)
4724 4th arg = used for additional headers if email
4725
4726 error options:
4727 0 = send to php_error_log (uses syslog or file depending on ini setting)
4728 1 = send via email to 3rd parameter 4th option = additional headers
4729 2 = send via tcp/ip to 3rd parameter (name or ip:port)
4730 3 = save to file in 3rd parameter
4731 4 = send to SAPI logger directly
4732 */
4733
4734 /* {{{ proto bool error_log(string message [, int message_type [, string destination [, string extra_headers]]])
4735 Send an error message somewhere */
4736 PHP_FUNCTION(error_log)
4737 {
4738 char *message, *opt = NULL, *headers = NULL;
4739 size_t message_len, opt_len = 0, headers_len = 0;
4740 int opt_err = 0, argc = ZEND_NUM_ARGS();
4741 zend_long erropt = 0;
4742
4743 if (zend_parse_parameters(argc, "s|lps", &message, &message_len, &erropt, &opt, &opt_len, &headers, &headers_len) == FAILURE) {
4744 return;
4745 }
4746
4747 if (argc > 1) {
4748 opt_err = (int)erropt;
4749 }
4750
4751 if (_php_error_log_ex(opt_err, message, message_len, opt, headers) == FAILURE) {
4752 RETURN_FALSE;
4753 }
4754
4755 RETURN_TRUE;
4756 }
4757 /* }}} */
4758
4759 /* For BC (not binary-safe!) */
4760 PHPAPI int _php_error_log(int opt_err, char *message, char *opt, char *headers) /* {{{ */
4761 {
4762 return _php_error_log_ex(opt_err, message, (opt_err == 3) ? strlen(message) : 0, opt, headers);
4763 }
4764 /* }}} */
4765
4766 PHPAPI int _php_error_log_ex(int opt_err, char *message, size_t message_len, char *opt, char *headers) /* {{{ */
4767 {
4768 php_stream *stream = NULL;
4769 size_t nbytes;
4770
4771 switch (opt_err)
4772 {
4773 case 1: /*send an email */
4774 if (!php_mail(opt, "PHP error_log message", message, headers, NULL)) {
4775 return FAILURE;
4776 }
4777 break;
4778
4779 case 2: /*send to an address */
4780 php_error_docref(NULL, E_WARNING, "TCP/IP option not available!");
4781 return FAILURE;
4782 break;
4783
4784 case 3: /*save to a file */
4785 stream = php_stream_open_wrapper(opt, "a", IGNORE_URL_WIN | REPORT_ERRORS, NULL);
4786 if (!stream) {
4787 return FAILURE;
4788 }
4789 nbytes = php_stream_write(stream, message, message_len);
4790 php_stream_close(stream);
4791 if (nbytes != message_len) {
4792 return FAILURE;
4793 }
4794 break;
4795
4796 case 4: /* send to SAPI */
4797 if (sapi_module.log_message) {
4798 sapi_module.log_message(message, -1);
4799 } else {
4800 return FAILURE;
4801 }
4802 break;
4803
4804 default:
4805 php_log_err_with_severity(message, LOG_NOTICE);
4806 break;
4807 }
4808 return SUCCESS;
4809 }
4810 /* }}} */
4811
4812 /* {{{ proto array error_get_last()
4813 Get the last occurred error as associative array. Returns NULL if there hasn't been an error yet. */
4814 PHP_FUNCTION(error_get_last)
4815 {
4816 if (zend_parse_parameters_none() == FAILURE) {
4817 return;
4818 }
4819
4820 if (PG(last_error_message)) {
4821 array_init(return_value);
4822 add_assoc_long_ex(return_value, "type", sizeof("type")-1, PG(last_error_type));
4823 add_assoc_string_ex(return_value, "message", sizeof("message")-1, PG(last_error_message));
4824 add_assoc_string_ex(return_value, "file", sizeof("file")-1, PG(last_error_file)?PG(last_error_file):"-");
4825 add_assoc_long_ex(return_value, "line", sizeof("line")-1, PG(last_error_lineno));
4826 }
4827 }
4828 /* }}} */
4829
4830 /* {{{ proto void error_clear_last(void)
4831 Clear the last occurred error. */
4832 PHP_FUNCTION(error_clear_last)
4833 {
4834 if (zend_parse_parameters_none() == FAILURE) {
4835 return;
4836 }
4837
4838 if (PG(last_error_message)) {
4839 PG(last_error_type) = 0;
4840 PG(last_error_lineno) = 0;
4841
4842 free(PG(last_error_message));
4843 PG(last_error_message) = NULL;
4844
4845 if (PG(last_error_file)) {
4846 free(PG(last_error_file));
4847 PG(last_error_file) = NULL;
4848 }
4849 }
4850 }
4851 /* }}} */
4852
4853 /* {{{ proto mixed call_user_func(mixed function_name [, mixed parmeter] [, mixed ...])
4854 Call a user function which is the first parameter
4855 Warning: This function is special-cased by zend_compile.c and so is usually bypassed */
4856 PHP_FUNCTION(call_user_func)
4857 {
4858 zval retval;
4859 zend_fcall_info fci;
4860 zend_fcall_info_cache fci_cache;
4861
4862 ZEND_PARSE_PARAMETERS_START(1, -1)
4863 Z_PARAM_FUNC(fci, fci_cache)
4864 Z_PARAM_VARIADIC('*', fci.params, fci.param_count)
4865 ZEND_PARSE_PARAMETERS_END();
4866
4867 fci.retval = &retval;
4868
4869 if (zend_call_function(&fci, &fci_cache) == SUCCESS && Z_TYPE(retval) != IS_UNDEF) {
4870 if (Z_ISREF(retval)) {
4871 zend_unwrap_reference(&retval);
4872 }
4873 ZVAL_COPY_VALUE(return_value, &retval);
4874 }
4875 }
4876 /* }}} */
4877
4878 /* {{{ proto mixed call_user_func_array(string function_name, array parameters)
4879 Call a user function which is the first parameter with the arguments contained in array
4880 Warning: This function is special-cased by zend_compile.c and so is usually bypassed */
4881 PHP_FUNCTION(call_user_func_array)
4882 {
4883 zval *params, retval;
4884 zend_fcall_info fci;
4885 zend_fcall_info_cache fci_cache;
4886
4887 ZEND_PARSE_PARAMETERS_START(2, 2)
4888 Z_PARAM_FUNC(fci, fci_cache)
4889 Z_PARAM_ARRAY_EX(params, 0, 1)
4890 ZEND_PARSE_PARAMETERS_END();
4891
4892 zend_fcall_info_args(&fci, params);
4893 fci.retval = &retval;
4894
4895 if (zend_call_function(&fci, &fci_cache) == SUCCESS && Z_TYPE(retval) != IS_UNDEF) {
4896 if (Z_ISREF(retval)) {
4897 zend_unwrap_reference(&retval);
4898 }
4899 ZVAL_COPY_VALUE(return_value, &retval);
4900 }
4901
4902 zend_fcall_info_args_clear(&fci, 1);
4903 }
4904 /* }}} */
4905
4906 /* {{{ proto mixed forward_static_call(mixed function_name [, mixed parmeter] [, mixed ...]) U
4907 Call a user function which is the first parameter */
4908 PHP_FUNCTION(forward_static_call)
4909 {
4910 zval retval;
4911 zend_fcall_info fci;
4912 zend_fcall_info_cache fci_cache;
4913 zend_class_entry *called_scope;
4914
4915 if (zend_parse_parameters(ZEND_NUM_ARGS(), "f*", &fci, &fci_cache, &fci.params, &fci.param_count) == FAILURE) {
4916 return;
4917 }
4918
4919 if (!EX(prev_execute_data)->func->common.scope) {
4920 zend_throw_error(NULL, "Cannot call forward_static_call() when no class scope is active");
4921 return;
4922 }
4923
4924 fci.retval = &retval;
4925
4926 called_scope = zend_get_called_scope(execute_data);
4927 if (called_scope && fci_cache.calling_scope &&
4928 instanceof_function(called_scope, fci_cache.calling_scope)) {
4929 fci_cache.called_scope = called_scope;
4930 }
4931
4932 if (zend_call_function(&fci, &fci_cache) == SUCCESS && Z_TYPE(retval) != IS_UNDEF) {
4933 if (Z_ISREF(retval)) {
4934 zend_unwrap_reference(&retval);
4935 }
4936 ZVAL_COPY_VALUE(return_value, &retval);
4937 }
4938 }
4939 /* }}} */
4940
4941 /* {{{ proto mixed call_user_func_array(string function_name, array parameters) U
4942 Call a user function which is the first parameter with the arguments contained in array */
4943 PHP_FUNCTION(forward_static_call_array)
4944 {
4945 zval *params, retval;
4946 zend_fcall_info fci;
4947 zend_fcall_info_cache fci_cache;
4948 zend_class_entry *called_scope;
4949
4950 if (zend_parse_parameters(ZEND_NUM_ARGS(), "fa/", &fci, &fci_cache, ¶ms) == FAILURE) {
4951 return;
4952 }
4953
4954 zend_fcall_info_args(&fci, params);
4955 fci.retval = &retval;
4956
4957 called_scope = zend_get_called_scope(execute_data);
4958 if (called_scope && fci_cache.calling_scope &&
4959 instanceof_function(called_scope, fci_cache.calling_scope)) {
4960 fci_cache.called_scope = called_scope;
4961 }
4962
4963 if (zend_call_function(&fci, &fci_cache) == SUCCESS && Z_TYPE(retval) != IS_UNDEF) {
4964 if (Z_ISREF(retval)) {
4965 zend_unwrap_reference(&retval);
4966 }
4967 ZVAL_COPY_VALUE(return_value, &retval);
4968 }
4969
4970 zend_fcall_info_args_clear(&fci, 1);
4971 }
4972 /* }}} */
4973
4974 void user_shutdown_function_dtor(zval *zv) /* {{{ */
4975 {
4976 int i;
4977 php_shutdown_function_entry *shutdown_function_entry = Z_PTR_P(zv);
4978
4979 for (i = 0; i < shutdown_function_entry->arg_count; i++) {
4980 zval_ptr_dtor(&shutdown_function_entry->arguments[i]);
4981 }
4982 efree(shutdown_function_entry->arguments);
4983 efree(shutdown_function_entry);
4984 }
4985 /* }}} */
4986
4987 void user_tick_function_dtor(user_tick_function_entry *tick_function_entry) /* {{{ */
4988 {
4989 int i;
4990
4991 for (i = 0; i < tick_function_entry->arg_count; i++) {
4992 zval_ptr_dtor(&tick_function_entry->arguments[i]);
4993 }
4994 efree(tick_function_entry->arguments);
4995 }
4996 /* }}} */
4997
4998 static int user_shutdown_function_call(zval *zv) /* {{{ */
4999 {
5000 php_shutdown_function_entry *shutdown_function_entry = Z_PTR_P(zv);
5001 zval retval;
5002 zend_string *function_name;
5003
5004 if (!zend_is_callable(&shutdown_function_entry->arguments[0], 0, &function_name)) {
5005 if (function_name) {
5006 php_error(E_WARNING, "(Registered shutdown functions) Unable to call %s() - function does not exist", ZSTR_VAL(function_name));
5007 zend_string_release(function_name);
5008 } else {
5009 php_error(E_WARNING, "(Registered shutdown functions) Unable to call - function does not exist");
5010 }
5011 return 0;
5012 }
5013 if (function_name) {
5014 zend_string_release(function_name);
5015 }
5016
5017 if (call_user_function(EG(function_table), NULL,
5018 &shutdown_function_entry->arguments[0],
5019 &retval,
5020 shutdown_function_entry->arg_count - 1,
5021 shutdown_function_entry->arguments + 1) == SUCCESS)
5022 {
5023 zval_dtor(&retval);
5024 }
5025 return 0;
5026 }
5027 /* }}} */
5028
5029 static void user_tick_function_call(user_tick_function_entry *tick_fe) /* {{{ */
5030 {
5031 zval retval;
5032 zval *function = &tick_fe->arguments[0];
5033
5034 /* Prevent reentrant calls to the same user ticks function */
5035 if (! tick_fe->calling) {
5036 tick_fe->calling = 1;
5037
5038 if (call_user_function( EG(function_table), NULL,
5039 function,
5040 &retval,
5041 tick_fe->arg_count - 1,
5042 tick_fe->arguments + 1
5043 ) == SUCCESS) {
5044 zval_dtor(&retval);
5045
5046 } else {
5047 zval *obj, *method;
5048
5049 if (Z_TYPE_P(function) == IS_STRING) {
5050 php_error_docref(NULL, E_WARNING, "Unable to call %s() - function does not exist", Z_STRVAL_P(function));
5051 } else if ( Z_TYPE_P(function) == IS_ARRAY
5052 && (obj = zend_hash_index_find(Z_ARRVAL_P(function), 0)) != NULL
5053 && (method = zend_hash_index_find(Z_ARRVAL_P(function), 1)) != NULL
5054 && Z_TYPE_P(obj) == IS_OBJECT
5055 && Z_TYPE_P(method) == IS_STRING) {
5056 php_error_docref(NULL, E_WARNING, "Unable to call %s::%s() - function does not exist", ZSTR_VAL(Z_OBJCE_P(obj)->name), Z_STRVAL_P(method));
5057 } else {
5058 php_error_docref(NULL, E_WARNING, "Unable to call tick function");
5059 }
5060 }
5061
5062 tick_fe->calling = 0;
5063 }
5064 }
5065 /* }}} */
5066
5067 static void run_user_tick_functions(int tick_count, void *arg) /* {{{ */
5068 {
5069 zend_llist_apply(BG(user_tick_functions), (llist_apply_func_t) user_tick_function_call);
5070 }
5071 /* }}} */
5072
5073 static int user_tick_function_compare(user_tick_function_entry * tick_fe1, user_tick_function_entry * tick_fe2) /* {{{ */
5074 {
5075 zval *func1 = &tick_fe1->arguments[0];
5076 zval *func2 = &tick_fe2->arguments[0];
5077 int ret;
5078
5079 if (Z_TYPE_P(func1) == IS_STRING && Z_TYPE_P(func2) == IS_STRING) {
5080 ret = zend_binary_zval_strcmp(func1, func2) == 0;
5081 } else if (Z_TYPE_P(func1) == IS_ARRAY && Z_TYPE_P(func2) == IS_ARRAY) {
5082 ret = zend_compare_arrays(func1, func2) == 0;
5083 } else if (Z_TYPE_P(func1) == IS_OBJECT && Z_TYPE_P(func2) == IS_OBJECT) {
5084 ret = zend_compare_objects(func1, func2) == 0;
5085 } else {
5086 ret = 0;
5087 }
5088
5089 if (ret && tick_fe1->calling) {
5090 php_error_docref(NULL, E_WARNING, "Unable to delete tick function executed at the moment");
5091 return 0;
5092 }
5093 return ret;
5094 }
5095 /* }}} */
5096
5097 PHPAPI void php_call_shutdown_functions(void) /* {{{ */
5098 {
5099 if (BG(user_shutdown_function_names)) {
5100 zend_try {
5101 zend_hash_apply(BG(user_shutdown_function_names), user_shutdown_function_call);
5102 }
5103 zend_end_try();
5104 }
5105 }
5106 /* }}} */
5107
5108 PHPAPI void php_free_shutdown_functions(void) /* {{{ */
5109 {
5110 if (BG(user_shutdown_function_names))
5111 zend_try {
5112 zend_hash_destroy(BG(user_shutdown_function_names));
5113 FREE_HASHTABLE(BG(user_shutdown_function_names));
5114 BG(user_shutdown_function_names) = NULL;
5115 } zend_catch {
5116 /* maybe shutdown method call exit, we just ignore it */
5117 FREE_HASHTABLE(BG(user_shutdown_function_names));
5118 BG(user_shutdown_function_names) = NULL;
5119 } zend_end_try();
5120 }
5121 /* }}} */
5122
5123 /* {{{ proto void register_shutdown_function(callback function) U
5124 Register a user-level function to be called on request termination */
5125 PHP_FUNCTION(register_shutdown_function)
5126 {
5127 php_shutdown_function_entry shutdown_function_entry;
5128 zend_string *callback_name = NULL;
5129 int i;
5130
5131 shutdown_function_entry.arg_count = ZEND_NUM_ARGS();
5132
5133 if (shutdown_function_entry.arg_count < 1) {
5134 WRONG_PARAM_COUNT;
5135 }
5136
5137 shutdown_function_entry.arguments = (zval *) safe_emalloc(sizeof(zval), shutdown_function_entry.arg_count, 0);
5138
5139 if (zend_get_parameters_array(ZEND_NUM_ARGS(), shutdown_function_entry.arg_count, shutdown_function_entry.arguments) == FAILURE) {
5140 efree(shutdown_function_entry.arguments);
5141 RETURN_FALSE;
5142 }
5143
5144 /* Prevent entering of anything but valid callback (syntax check only!) */
5145 if (!zend_is_callable(&shutdown_function_entry.arguments[0], 0, &callback_name)) {
5146 if (callback_name) {
5147 php_error_docref(NULL, E_WARNING, "Invalid shutdown callback '%s' passed", ZSTR_VAL(callback_name));
5148 } else {
5149 php_error_docref(NULL, E_WARNING, "Invalid shutdown callback passed");
5150 }
5151 efree(shutdown_function_entry.arguments);
5152 RETVAL_FALSE;
5153 } else {
5154 if (!BG(user_shutdown_function_names)) {
5155 ALLOC_HASHTABLE(BG(user_shutdown_function_names));
5156 zend_hash_init(BG(user_shutdown_function_names), 0, NULL, user_shutdown_function_dtor, 0);
5157 }
5158
5159 for (i = 0; i < shutdown_function_entry.arg_count; i++) {
5160 if (Z_REFCOUNTED(shutdown_function_entry.arguments[i])) Z_ADDREF(shutdown_function_entry.arguments[i]);
5161 }
5162 zend_hash_next_index_insert_mem(BG(user_shutdown_function_names), &shutdown_function_entry, sizeof(php_shutdown_function_entry));
5163 }
5164 if (callback_name) {
5165 zend_string_release(callback_name);
5166 }
5167 }
5168 /* }}} */
5169
5170 PHPAPI zend_bool register_user_shutdown_function(char *function_name, size_t function_len, php_shutdown_function_entry *shutdown_function_entry) /* {{{ */
5171 {
5172 if (!BG(user_shutdown_function_names)) {
5173 ALLOC_HASHTABLE(BG(user_shutdown_function_names));
5174 zend_hash_init(BG(user_shutdown_function_names), 0, NULL, user_shutdown_function_dtor, 0);
5175 }
5176
5177 return zend_hash_str_update_mem(BG(user_shutdown_function_names), function_name, function_len, shutdown_function_entry, sizeof(php_shutdown_function_entry)) != NULL;
5178 }
5179 /* }}} */
5180
5181 PHPAPI zend_bool remove_user_shutdown_function(char *function_name, size_t function_len) /* {{{ */
5182 {
5183 if (BG(user_shutdown_function_names)) {
5184 return zend_hash_str_del(BG(user_shutdown_function_names), function_name, function_len) != FAILURE;
5185 }
5186
5187 return 0;
5188 }
5189 /* }}} */
5190
5191 PHPAPI zend_bool append_user_shutdown_function(php_shutdown_function_entry shutdown_function_entry) /* {{{ */
5192 {
5193 if (!BG(user_shutdown_function_names)) {
5194 ALLOC_HASHTABLE(BG(user_shutdown_function_names));
5195 zend_hash_init(BG(user_shutdown_function_names), 0, NULL, user_shutdown_function_dtor, 0);
5196 }
5197
5198 return zend_hash_next_index_insert_mem(BG(user_shutdown_function_names), &shutdown_function_entry, sizeof(php_shutdown_function_entry)) != NULL;
5199 }
5200 /* }}} */
5201
5202 ZEND_API void php_get_highlight_struct(zend_syntax_highlighter_ini *syntax_highlighter_ini) /* {{{ */
5203 {
5204 syntax_highlighter_ini->highlight_comment = INI_STR("highlight.comment");
5205 syntax_highlighter_ini->highlight_default = INI_STR("highlight.default");
5206 syntax_highlighter_ini->highlight_html = INI_STR("highlight.html");
5207 syntax_highlighter_ini->highlight_keyword = INI_STR("highlight.keyword");
5208 syntax_highlighter_ini->highlight_string = INI_STR("highlight.string");
5209 }
5210 /* }}} */
5211
5212 /* {{{ proto bool highlight_file(string file_name [, bool return] )
5213 Syntax highlight a source file */
5214 PHP_FUNCTION(highlight_file)
5215 {
5216 char *filename;
5217 size_t filename_len;
5218 int ret;
5219 zend_syntax_highlighter_ini syntax_highlighter_ini;
5220 zend_bool i = 0;
5221
5222 if (zend_parse_parameters(ZEND_NUM_ARGS(), "p|b", &filename, &filename_len, &i) == FAILURE) {
5223 RETURN_FALSE;
5224 }
5225
5226 if (php_check_open_basedir(filename)) {
5227 RETURN_FALSE;
5228 }
5229
5230 if (i) {
5231 php_output_start_default();
5232 }
5233
5234 php_get_highlight_struct(&syntax_highlighter_ini);
5235
5236 ret = highlight_file(filename, &syntax_highlighter_ini);
5237
5238 if (ret == FAILURE) {
5239 if (i) {
5240 php_output_end();
5241 }
5242 RETURN_FALSE;
5243 }
5244
5245 if (i) {
5246 php_output_get_contents(return_value);
5247 php_output_discard();
5248 } else {
5249 RETURN_TRUE;
5250 }
5251 }
5252 /* }}} */
5253
5254 /* {{{ proto string php_strip_whitespace(string file_name)
5255 Return source with stripped comments and whitespace */
5256 PHP_FUNCTION(php_strip_whitespace)
5257 {
5258 char *filename;
5259 size_t filename_len;
5260 zend_lex_state original_lex_state;
5261 zend_file_handle file_handle;
5262
5263 if (zend_parse_parameters(ZEND_NUM_ARGS(), "p", &filename, &filename_len) == FAILURE) {
5264 RETURN_FALSE;
5265 }
5266
5267 php_output_start_default();
5268
5269 memset(&file_handle, 0, sizeof(file_handle));
5270 file_handle.type = ZEND_HANDLE_FILENAME;
5271 file_handle.filename = filename;
5272 file_handle.free_filename = 0;
5273 file_handle.opened_path = NULL;
5274 zend_save_lexical_state(&original_lex_state);
5275 if (open_file_for_scanning(&file_handle) == FAILURE) {
5276 zend_restore_lexical_state(&original_lex_state);
5277 php_output_end();
5278 RETURN_EMPTY_STRING();
5279 }
5280
5281 zend_strip();
5282
5283 zend_destroy_file_handle(&file_handle);
5284 zend_restore_lexical_state(&original_lex_state);
5285
5286 php_output_get_contents(return_value);
5287 php_output_discard();
5288 }
5289 /* }}} */
5290
5291 /* {{{ proto bool highlight_string(string string [, bool return] )
5292 Syntax highlight a string or optionally return it */
5293 PHP_FUNCTION(highlight_string)
5294 {
5295 zval *expr;
5296 zend_syntax_highlighter_ini syntax_highlighter_ini;
5297 char *hicompiled_string_description;
5298 zend_bool i = 0;
5299 int old_error_reporting = EG(error_reporting);
5300
5301 if (zend_parse_parameters(ZEND_NUM_ARGS(), "z|b", &expr, &i) == FAILURE) {
5302 RETURN_FALSE;
5303 }
5304 convert_to_string_ex(expr);
5305
5306 if (i) {
5307 php_output_start_default();
5308 }
5309
5310 EG(error_reporting) = E_ERROR;
5311
5312 php_get_highlight_struct(&syntax_highlighter_ini);
5313
5314 hicompiled_string_description = zend_make_compiled_string_description("highlighted code");
5315
5316 if (highlight_string(expr, &syntax_highlighter_ini, hicompiled_string_description) == FAILURE) {
5317 efree(hicompiled_string_description);
5318 EG(error_reporting) = old_error_reporting;
5319 if (i) {
5320 php_output_end();
5321 }
5322 RETURN_FALSE;
5323 }
5324 efree(hicompiled_string_description);
5325
5326 EG(error_reporting) = old_error_reporting;
5327
5328 if (i) {
5329 php_output_get_contents(return_value);
5330 php_output_discard();
5331 } else {
5332 RETURN_TRUE;
5333 }
5334 }
5335 /* }}} */
5336
5337 /* {{{ proto string ini_get(string varname)
5338 Get a configuration option */
5339 PHP_FUNCTION(ini_get)
5340 {
5341 char *varname, *str;
5342 size_t varname_len;
5343
5344 if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &varname, &varname_len) == FAILURE) {
5345 return;
5346 }
5347
5348 str = zend_ini_string(varname, (uint)varname_len, 0);
5349
5350 if (!str) {
5351 RETURN_FALSE;
5352 }
5353
5354 RETURN_STRING(str);
5355 }
5356 /* }}} */
5357
5358 static int php_ini_get_option(zval *zv, int num_args, va_list args, zend_hash_key *hash_key) /* {{{ */
5359 {
5360 zend_ini_entry *ini_entry = Z_PTR_P(zv);
5361 zval *ini_array = va_arg(args, zval *);
5362 int module_number = va_arg(args, int);
5363 int details = va_arg(args, int);
5364 zval option;
5365
5366 if (module_number != 0 && ini_entry->module_number != module_number) {
5367 return 0;
5368 }
5369
5370 if (hash_key->key == NULL ||
5371 ZSTR_VAL(hash_key->key)[0] != 0
5372 ) {
5373 if (details) {
5374 array_init(&option);
5375
5376 if (ini_entry->orig_value) {
5377 add_assoc_str(&option, "global_value", zend_string_copy(ini_entry->orig_value));
5378 } else if (ini_entry->value) {
5379 add_assoc_str(&option, "global_value", zend_string_copy(ini_entry->value));
5380 } else {
5381 add_assoc_null(&option, "global_value");
5382 }
5383
5384 if (ini_entry->value) {
5385 add_assoc_str(&option, "local_value", zend_string_copy(ini_entry->value));
5386 } else {
5387 add_assoc_null(&option, "local_value");
5388 }
5389
5390 add_assoc_long(&option, "access", ini_entry->modifiable);
5391
5392 zend_symtable_update(Z_ARRVAL_P(ini_array), ini_entry->name, &option);
5393 } else {
5394 if (ini_entry->value) {
5395 zval zv;
5396
5397 ZVAL_STR_COPY(&zv, ini_entry->value);
5398 zend_symtable_update(Z_ARRVAL_P(ini_array), ini_entry->name, &zv);
5399 } else {
5400 zend_symtable_update(Z_ARRVAL_P(ini_array), ini_entry->name, &EG(uninitialized_zval));
5401 }
5402 }
5403 }
5404 return 0;
5405 }
5406 /* }}} */
5407
5408 /* {{{ proto array ini_get_all([string extension[, bool details = true]])
5409 Get all configuration options */
5410 PHP_FUNCTION(ini_get_all)
5411 {
5412 char *extname = NULL;
5413 size_t extname_len = 0, extnumber = 0;
5414 zend_module_entry *module;
5415 zend_bool details = 1;
5416
5417 if (zend_parse_parameters(ZEND_NUM_ARGS(), "|s!b", &extname, &extname_len, &details) == FAILURE) {
5418 return;
5419 }
5420
5421 zend_ini_sort_entries();
5422
5423 if (extname) {
5424 if ((module = zend_hash_str_find_ptr(&module_registry, extname, extname_len)) == NULL) {
5425 php_error_docref(NULL, E_WARNING, "Unable to find extension '%s'", extname);
5426 RETURN_FALSE;
5427 }
5428 extnumber = module->module_number;
5429 }
5430
5431 array_init(return_value);
5432 zend_hash_apply_with_arguments(EG(ini_directives), php_ini_get_option, 2, return_value, extnumber, details);
5433 }
5434 /* }}} */
5435
5436 static int php_ini_check_path(char *option_name, int option_len, char *new_option_name, int new_option_len) /* {{{ */
5437 {
5438 if (option_len != (new_option_len - 1)) {
5439 return 0;
5440 }
5441
5442 return !strncmp(option_name, new_option_name, option_len);
5443 }
5444 /* }}} */
5445
5446 /* {{{ proto string ini_set(string varname, string newvalue)
5447 Set a configuration option, returns false on error and the old value of the configuration option on success */
5448 PHP_FUNCTION(ini_set)
5449 {
5450 zend_string *varname;
5451 zend_string *new_value;
5452 char *old_value;
5453
5454 if (zend_parse_parameters(ZEND_NUM_ARGS(), "SS", &varname, &new_value) == FAILURE) {
5455 return;
5456 }
5457
5458 old_value = zend_ini_string(ZSTR_VAL(varname), (int)ZSTR_LEN(varname), 0);
5459
5460 /* copy to return here, because alter might free it! */
5461 if (old_value) {
5462 RETVAL_STRING(old_value);
5463 } else {
5464 RETVAL_FALSE;
5465 }
5466
5467 #define _CHECK_PATH(var, var_len, ini) php_ini_check_path(var, (int)var_len, ini, sizeof(ini))
5468 /* open basedir check */
5469 if (PG(open_basedir)) {
5470 if (_CHECK_PATH(ZSTR_VAL(varname), ZSTR_LEN(varname), "error_log") ||
5471 _CHECK_PATH(ZSTR_VAL(varname), ZSTR_LEN(varname), "java.class.path") ||
5472 _CHECK_PATH(ZSTR_VAL(varname), ZSTR_LEN(varname), "java.home") ||
5473 _CHECK_PATH(ZSTR_VAL(varname), ZSTR_LEN(varname), "mail.log") ||
5474 _CHECK_PATH(ZSTR_VAL(varname), ZSTR_LEN(varname), "java.library.path") ||
5475 _CHECK_PATH(ZSTR_VAL(varname), ZSTR_LEN(varname), "vpopmail.directory")) {
5476 if (php_check_open_basedir(ZSTR_VAL(new_value))) {
5477 zval_dtor(return_value);
5478 RETURN_FALSE;
5479 }
5480 }
5481 }
5482
5483 if (zend_alter_ini_entry_ex(varname, new_value, PHP_INI_USER, PHP_INI_STAGE_RUNTIME, 0) == FAILURE) {
5484 zval_dtor(return_value);
5485 RETURN_FALSE;
5486 }
5487 }
5488 /* }}} */
5489
5490 /* {{{ proto void ini_restore(string varname)
5491 Restore the value of a configuration option specified by varname */
5492 PHP_FUNCTION(ini_restore)
5493 {
5494 zend_string *varname;
5495
5496 if (zend_parse_parameters(ZEND_NUM_ARGS(), "S", &varname) == FAILURE) {
5497 return;
5498 }
5499
5500 zend_restore_ini_entry(varname, PHP_INI_STAGE_RUNTIME);
5501 }
5502 /* }}} */
5503
5504 /* {{{ proto string set_include_path(string new_include_path)
5505 Sets the include_path configuration option */
5506 PHP_FUNCTION(set_include_path)
5507 {
5508 zend_string *new_value;
5509 char *old_value;
5510 zend_string *key;
5511
5512 if (zend_parse_parameters(ZEND_NUM_ARGS(), "P", &new_value) == FAILURE) {
5513 return;
5514 }
5515
5516 old_value = zend_ini_string("include_path", sizeof("include_path") - 1, 0);
5517 /* copy to return here, because alter might free it! */
5518 if (old_value) {
5519 RETVAL_STRING(old_value);
5520 } else {
5521 RETVAL_FALSE;
5522 }
5523
5524 key = zend_string_init("include_path", sizeof("include_path") - 1, 0);
5525 if (zend_alter_ini_entry_ex(key, new_value, PHP_INI_USER, PHP_INI_STAGE_RUNTIME, 0) == FAILURE) {
5526 zend_string_release(key);
5527 zval_dtor(return_value);
5528 RETURN_FALSE;
5529 }
5530 zend_string_release(key);
5531 }
5532 /* }}} */
5533
5534 /* {{{ proto string get_include_path()
5535 Get the current include_path configuration option */
5536 PHP_FUNCTION(get_include_path)
5537 {
5538 char *str;
5539
5540 if (zend_parse_parameters(ZEND_NUM_ARGS(), "") == FAILURE) {
5541 return;
5542 }
5543
5544 str = zend_ini_string("include_path", sizeof("include_path") - 1, 0);
5545
5546 if (str == NULL) {
5547 RETURN_FALSE;
5548 }
5549
5550 RETURN_STRING(str);
5551 }
5552 /* }}} */
5553
5554 /* {{{ proto void restore_include_path()
5555 Restore the value of the include_path configuration option */
5556 PHP_FUNCTION(restore_include_path)
5557 {
5558 zend_string *key;
5559
5560 if (zend_parse_parameters(ZEND_NUM_ARGS(), "") == FAILURE) {
5561 return;
5562 }
5563 key = zend_string_init("include_path", sizeof("include_path")-1, 0);
5564 zend_restore_ini_entry(key, PHP_INI_STAGE_RUNTIME);
5565 zend_string_free(key);
5566 }
5567 /* }}} */
5568
5569 /* {{{ proto mixed print_r(mixed var [, bool return])
5570 Prints out or returns information about the specified variable */
5571 PHP_FUNCTION(print_r)
5572 {
5573 zval *var;
5574 zend_bool do_return = 0;
5575
5576 if (zend_parse_parameters(ZEND_NUM_ARGS(), "z|b", &var, &do_return) == FAILURE) {
5577 RETURN_FALSE;
5578 }
5579
5580 if (do_return) {
5581 RETURN_STR(zend_print_zval_r_to_str(var, 0));
5582 } else {
5583 zend_print_zval_r(var, 0);
5584 RETURN_TRUE;
5585 }
5586 }
5587 /* }}} */
5588
5589 /* {{{ proto int connection_aborted(void)
5590 Returns true if client disconnected */
5591 PHP_FUNCTION(connection_aborted)
5592 {
5593 RETURN_LONG(PG(connection_status) & PHP_CONNECTION_ABORTED);
5594 }
5595 /* }}} */
5596
5597 /* {{{ proto int connection_status(void)
5598 Returns the connection status bitfield */
5599 PHP_FUNCTION(connection_status)
5600 {
5601 RETURN_LONG(PG(connection_status));
5602 }
5603 /* }}} */
5604
5605 /* {{{ proto int ignore_user_abort([bool value])
5606 Set whether we want to ignore a user abort event or not */
5607 PHP_FUNCTION(ignore_user_abort)
5608 {
5609 zend_bool arg = 0;
5610 int old_setting;
5611
5612 if (zend_parse_parameters(ZEND_NUM_ARGS(), "|b", &arg) == FAILURE) {
5613 return;
5614 }
5615
5616 old_setting = (unsigned short)PG(ignore_user_abort);
5617
5618 if (ZEND_NUM_ARGS()) {
5619 zend_string *key = zend_string_init("ignore_user_abort", sizeof("ignore_user_abort") - 1, 0);
5620 zend_alter_ini_entry_chars(key, arg ? "1" : "0", 1, PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
5621 zend_string_release(key);
5622 }
5623
5624 RETURN_LONG(old_setting);
5625 }
5626 /* }}} */
5627
5628 #if HAVE_GETSERVBYNAME
5629 /* {{{ proto int getservbyname(string service, string protocol)
5630 Returns port associated with service. Protocol must be "tcp" or "udp" */
5631 PHP_FUNCTION(getservbyname)
5632 {
5633 char *name, *proto;
5634 size_t name_len, proto_len;
5635 struct servent *serv;
5636
5637 if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss", &name, &name_len, &proto, &proto_len) == FAILURE) {
5638 return;
5639 }
5640
5641
5642 /* empty string behaves like NULL on windows implementation of
5643 getservbyname. Let be portable instead. */
5644 #ifdef PHP_WIN32
5645 if (proto_len == 0) {
5646 RETURN_FALSE;
5647 }
5648 #endif
5649
5650 serv = getservbyname(name, proto);
5651
5652 #if defined(_AIX)
5653 /*
5654 On AIX, imap is only known as imap2 in /etc/services, while on Linux imap is an alias for imap2.
5655 If a request for imap gives no result, we try again with imap2.
5656 */
5657 if (serv == NULL && strcmp(name, "imap") == 0) {
5658 serv = getservbyname("imap2", proto);
5659 }
5660 #endif
5661 if (serv == NULL) {
5662 RETURN_FALSE;
5663 }
5664
5665 RETURN_LONG(ntohs(serv->s_port));
5666 }
5667 /* }}} */
5668 #endif
5669
5670 #if HAVE_GETSERVBYPORT
5671 /* {{{ proto string getservbyport(int port, string protocol)
5672 Returns service name associated with port. Protocol must be "tcp" or "udp" */
5673 PHP_FUNCTION(getservbyport)
5674 {
5675 char *proto;
5676 size_t proto_len;
5677 zend_long port;
5678 struct servent *serv;
5679
5680 if (zend_parse_parameters(ZEND_NUM_ARGS(), "ls", &port, &proto, &proto_len) == FAILURE) {
5681 return;
5682 }
5683
5684 serv = getservbyport(htons((unsigned short) port), proto);
5685
5686 if (serv == NULL) {
5687 RETURN_FALSE;
5688 }
5689
5690 RETURN_STRING(serv->s_name);
5691 }
5692 /* }}} */
5693 #endif
5694
5695 #if HAVE_GETPROTOBYNAME
5696 /* {{{ proto int getprotobyname(string name)
5697 Returns protocol number associated with name as per /etc/protocols */
5698 PHP_FUNCTION(getprotobyname)
5699 {
5700 char *name;
5701 size_t name_len;
5702 struct protoent *ent;
5703
5704 if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &name, &name_len) == FAILURE) {
5705 return;
5706 }
5707
5708 ent = getprotobyname(name);
5709
5710 if (ent == NULL) {
5711 RETURN_FALSE;
5712 }
5713
5714 RETURN_LONG(ent->p_proto);
5715 }
5716 /* }}} */
5717 #endif
5718
5719 #if HAVE_GETPROTOBYNUMBER
5720 /* {{{ proto string getprotobynumber(int proto)
5721 Returns protocol name associated with protocol number proto */
5722 PHP_FUNCTION(getprotobynumber)
5723 {
5724 zend_long proto;
5725 struct protoent *ent;
5726
5727 if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &proto) == FAILURE) {
5728 return;
5729 }
5730
5731 ent = getprotobynumber((int)proto);
5732
5733 if (ent == NULL) {
5734 RETURN_FALSE;
5735 }
5736
5737 RETURN_STRING(ent->p_name);
5738 }
5739 /* }}} */
5740 #endif
5741
5742 /* {{{ proto bool register_tick_function(string function_name [, mixed arg [, mixed ... ]])
5743 Registers a tick callback function */
5744 PHP_FUNCTION(register_tick_function)
5745 {
5746 user_tick_function_entry tick_fe;
5747 int i;
5748 zend_string *function_name = NULL;
5749
5750 tick_fe.calling = 0;
5751 tick_fe.arg_count = ZEND_NUM_ARGS();
5752
5753 if (tick_fe.arg_count < 1) {
5754 WRONG_PARAM_COUNT;
5755 }
5756
5757 tick_fe.arguments = (zval *) safe_emalloc(sizeof(zval), tick_fe.arg_count, 0);
5758
5759 if (zend_get_parameters_array(ZEND_NUM_ARGS(), tick_fe.arg_count, tick_fe.arguments) == FAILURE) {
5760 efree(tick_fe.arguments);
5761 RETURN_FALSE;
5762 }
5763
5764 if (!zend_is_callable(&tick_fe.arguments[0], 0, &function_name)) {
5765 efree(tick_fe.arguments);
5766 php_error_docref(NULL, E_WARNING, "Invalid tick callback '%s' passed", ZSTR_VAL(function_name));
5767 zend_string_release(function_name);
5768 RETURN_FALSE;
5769 } else if (function_name) {
5770 zend_string_release(function_name);
5771 }
5772
5773 if (Z_TYPE(tick_fe.arguments[0]) != IS_ARRAY && Z_TYPE(tick_fe.arguments[0]) != IS_OBJECT) {
5774 convert_to_string_ex(&tick_fe.arguments[0]);
5775 }
5776
5777 if (!BG(user_tick_functions)) {
5778 BG(user_tick_functions) = (zend_llist *) emalloc(sizeof(zend_llist));
5779 zend_llist_init(BG(user_tick_functions),
5780 sizeof(user_tick_function_entry),
5781 (llist_dtor_func_t) user_tick_function_dtor, 0);
5782 php_add_tick_function(run_user_tick_functions, NULL);
5783 }
5784
5785 for (i = 0; i < tick_fe.arg_count; i++) {
5786 if (Z_REFCOUNTED(tick_fe.arguments[i])) {
5787 Z_ADDREF(tick_fe.arguments[i]);
5788 }
5789 }
5790
5791 zend_llist_add_element(BG(user_tick_functions), &tick_fe);
5792
5793 RETURN_TRUE;
5794 }
5795 /* }}} */
5796
5797 /* {{{ proto void unregister_tick_function(string function_name)
5798 Unregisters a tick callback function */
5799 PHP_FUNCTION(unregister_tick_function)
5800 {
5801 zval *function;
5802 user_tick_function_entry tick_fe;
5803
5804 if (zend_parse_parameters(ZEND_NUM_ARGS(), "z/", &function) == FAILURE) {
5805 return;
5806 }
5807
5808 if (!BG(user_tick_functions)) {
5809 return;
5810 }
5811
5812 if (Z_TYPE_P(function) != IS_ARRAY && Z_TYPE_P(function) != IS_OBJECT) {
5813 convert_to_string(function);
5814 }
5815
5816 tick_fe.arguments = (zval *) emalloc(sizeof(zval));
5817 ZVAL_COPY_VALUE(&tick_fe.arguments[0], function);
5818 tick_fe.arg_count = 1;
5819 zend_llist_del_element(BG(user_tick_functions), &tick_fe, (int (*)(void *, void *)) user_tick_function_compare);
5820 efree(tick_fe.arguments);
5821 }
5822 /* }}} */
5823
5824 /* {{{ proto bool is_uploaded_file(string path)
5825 Check if file was created by rfc1867 upload */
5826 PHP_FUNCTION(is_uploaded_file)
5827 {
5828 char *path;
5829 size_t path_len;
5830
5831 if (!SG(rfc1867_uploaded_files)) {
5832 RETURN_FALSE;
5833 }
5834
5835 if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &path, &path_len) == FAILURE) {
5836 return;
5837 }
5838
5839 if (zend_hash_str_exists(SG(rfc1867_uploaded_files), path, path_len)) {
5840 RETURN_TRUE;
5841 } else {
5842 RETURN_FALSE;
5843 }
5844 }
5845 /* }}} */
5846
5847 /* {{{ proto bool move_uploaded_file(string path, string new_path)
5848 Move a file if and only if it was created by an upload */
5849 PHP_FUNCTION(move_uploaded_file)
5850 {
5851 char *path, *new_path;
5852 size_t path_len, new_path_len;
5853 zend_bool successful = 0;
5854
5855 #ifndef PHP_WIN32
5856 int oldmask; int ret;
5857 #endif
5858
5859 if (!SG(rfc1867_uploaded_files)) {
5860 RETURN_FALSE;
5861 }
5862
5863 if (zend_parse_parameters(ZEND_NUM_ARGS(), "sp", &path, &path_len, &new_path, &new_path_len) == FAILURE) {
5864 return;
5865 }
5866
5867 if (!zend_hash_str_exists(SG(rfc1867_uploaded_files), path, path_len)) {
5868 RETURN_FALSE;
5869 }
5870
5871 if (php_check_open_basedir(new_path)) {
5872 RETURN_FALSE;
5873 }
5874
5875 if (VCWD_RENAME(path, new_path) == 0) {
5876 successful = 1;
5877 #ifndef PHP_WIN32
5878 oldmask = umask(077);
5879 umask(oldmask);
5880
5881 ret = VCWD_CHMOD(new_path, 0666 & ~oldmask);
5882
5883 if (ret == -1) {
5884 php_error_docref(NULL, E_WARNING, "%s", strerror(errno));
5885 }
5886 #endif
5887 } else if (php_copy_file_ex(path, new_path, STREAM_DISABLE_OPEN_BASEDIR) == SUCCESS) {
5888 VCWD_UNLINK(path);
5889 successful = 1;
5890 }
5891
5892 if (successful) {
5893 zend_hash_str_del(SG(rfc1867_uploaded_files), path, path_len);
5894 } else {
5895 php_error_docref(NULL, E_WARNING, "Unable to move '%s' to '%s'", path, new_path);
5896 }
5897
5898 RETURN_BOOL(successful);
5899 }
5900 /* }}} */
5901
5902 /* {{{ php_simple_ini_parser_cb
5903 */
5904 static void php_simple_ini_parser_cb(zval *arg1, zval *arg2, zval *arg3, int callback_type, zval *arr)
5905 {
5906 switch (callback_type) {
5907
5908 case ZEND_INI_PARSER_ENTRY:
5909 if (!arg2) {
5910 /* bare string - nothing to do */
5911 break;
5912 }
5913 Z_TRY_ADDREF_P(arg2);
5914 zend_symtable_update(Z_ARRVAL_P(arr), Z_STR_P(arg1), arg2);
5915 break;
5916
5917 case ZEND_INI_PARSER_POP_ENTRY:
5918 {
5919 zval hash, *find_hash;
5920
5921 if (!arg2) {
5922 /* bare string - nothing to do */
5923 break;
5924 }
5925
5926 if (!(Z_STRLEN_P(arg1) > 1 && Z_STRVAL_P(arg1)[0] == '0') && is_numeric_string(Z_STRVAL_P(arg1), Z_STRLEN_P(arg1), NULL, NULL, 0) == IS_LONG) {
5927 zend_ulong key = (zend_ulong) zend_atol(Z_STRVAL_P(arg1), (int)Z_STRLEN_P(arg1));
5928 if ((find_hash = zend_hash_index_find(Z_ARRVAL_P(arr), key)) == NULL) {
5929 array_init(&hash);
5930 find_hash = zend_hash_index_update(Z_ARRVAL_P(arr), key, &hash);
5931 }
5932 } else {
5933 if ((find_hash = zend_hash_find(Z_ARRVAL_P(arr), Z_STR_P(arg1))) == NULL) {
5934 array_init(&hash);
5935 find_hash = zend_hash_update(Z_ARRVAL_P(arr), Z_STR_P(arg1), &hash);
5936 }
5937 }
5938
5939 if (Z_TYPE_P(find_hash) != IS_ARRAY) {
5940 zval_dtor(find_hash);
5941 array_init(find_hash);
5942 }
5943
5944 if (!arg3 || (Z_TYPE_P(arg3) == IS_STRING && Z_STRLEN_P(arg3) == 0)) {
5945 Z_TRY_ADDREF_P(arg2);
5946 add_next_index_zval(find_hash, arg2);
5947 } else {
5948 array_set_zval_key(Z_ARRVAL_P(find_hash), arg3, arg2);
5949 }
5950 }
5951 break;
5952
5953 case ZEND_INI_PARSER_SECTION:
5954 break;
5955 }
5956 }
5957 /* }}} */
5958
5959 /* {{{ php_ini_parser_cb_with_sections
5960 */
5961 static void php_ini_parser_cb_with_sections(zval *arg1, zval *arg2, zval *arg3, int callback_type, zval *arr)
5962 {
5963 if (callback_type == ZEND_INI_PARSER_SECTION) {
5964 array_init(&BG(active_ini_file_section));
5965 zend_symtable_update(Z_ARRVAL_P(arr), Z_STR_P(arg1), &BG(active_ini_file_section));
5966 } else if (arg2) {
5967 zval *active_arr;
5968
5969 if (Z_TYPE(BG(active_ini_file_section)) != IS_UNDEF) {
5970 active_arr = &BG(active_ini_file_section);
5971 } else {
5972 active_arr = arr;
5973 }
5974
5975 php_simple_ini_parser_cb(arg1, arg2, arg3, callback_type, active_arr);
5976 }
5977 }
5978 /* }}} */
5979
5980 /* {{{ proto array parse_ini_file(string filename [, bool process_sections [, int scanner_mode]])
5981 Parse configuration file */
5982 PHP_FUNCTION(parse_ini_file)
5983 {
5984 char *filename = NULL;
5985 size_t filename_len = 0;
5986 zend_bool process_sections = 0;
5987 zend_long scanner_mode = ZEND_INI_SCANNER_NORMAL;
5988 zend_file_handle fh;
5989 zend_ini_parser_cb_t ini_parser_cb;
5990
5991 if (zend_parse_parameters(ZEND_NUM_ARGS(), "p|bl", &filename, &filename_len, &process_sections, &scanner_mode) == FAILURE) {
5992 RETURN_FALSE;
5993 }
5994
5995 if (filename_len == 0) {
5996 php_error_docref(NULL, E_WARNING, "Filename cannot be empty!");
5997 RETURN_FALSE;
5998 }
5999
6000 /* Set callback function */
6001 if (process_sections) {
6002 ZVAL_UNDEF(&BG(active_ini_file_section));
6003 ini_parser_cb = (zend_ini_parser_cb_t) php_ini_parser_cb_with_sections;
6004 } else {
6005 ini_parser_cb = (zend_ini_parser_cb_t) php_simple_ini_parser_cb;
6006 }
6007
6008 /* Setup filehandle */
6009 memset(&fh, 0, sizeof(fh));
6010 fh.filename = filename;
6011 fh.type = ZEND_HANDLE_FILENAME;
6012
6013 array_init(return_value);
6014 if (zend_parse_ini_file(&fh, 0, (int)scanner_mode, ini_parser_cb, return_value) == FAILURE) {
6015 zval_dtor(return_value);
6016 RETURN_FALSE;
6017 }
6018 }
6019 /* }}} */
6020
6021 /* {{{ proto array parse_ini_string(string ini_string [, bool process_sections [, int scanner_mode]])
6022 Parse configuration string */
6023 PHP_FUNCTION(parse_ini_string)
6024 {
6025 char *string = NULL, *str = NULL;
6026 size_t str_len = 0;
6027 zend_bool process_sections = 0;
6028 zend_long scanner_mode = ZEND_INI_SCANNER_NORMAL;
6029 zend_ini_parser_cb_t ini_parser_cb;
6030
6031 if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|bl", &str, &str_len, &process_sections, &scanner_mode) == FAILURE) {
6032 RETURN_FALSE;
6033 }
6034
6035 if (INT_MAX - str_len < ZEND_MMAP_AHEAD) {
6036 RETVAL_FALSE;
6037 }
6038
6039 /* Set callback function */
6040 if (process_sections) {
6041 ZVAL_UNDEF(&BG(active_ini_file_section));
6042 ini_parser_cb = (zend_ini_parser_cb_t) php_ini_parser_cb_with_sections;
6043 } else {
6044 ini_parser_cb = (zend_ini_parser_cb_t) php_simple_ini_parser_cb;
6045 }
6046
6047 /* Setup string */
6048 string = (char *) emalloc(str_len + ZEND_MMAP_AHEAD);
6049 memcpy(string, str, str_len);
6050 memset(string + str_len, 0, ZEND_MMAP_AHEAD);
6051
6052 array_init(return_value);
6053 if (zend_parse_ini_string(string, 0, (int)scanner_mode, ini_parser_cb, return_value) == FAILURE) {
6054 zval_dtor(return_value);
6055 RETVAL_FALSE;
6056 }
6057 efree(string);
6058 }
6059 /* }}} */
6060
6061 #if ZEND_DEBUG
6062 /* This function returns an array of ALL valid ini options with values and
6063 * is not the same as ini_get_all() which returns only registered ini options. Only useful for devs to debug php.ini scanner/parser! */
6064 PHP_FUNCTION(config_get_hash) /* {{{ */
6065 {
6066 HashTable *hash = php_ini_get_configuration_hash();
6067
6068 array_init(return_value);
6069 zend_hash_apply_with_arguments(hash, add_config_entry_cb, 1, return_value);
6070 }
6071 /* }}} */
6072 #endif
6073
6074 #ifdef HAVE_GETLOADAVG
6075 /* {{{ proto array sys_getloadavg()
6076 */
6077 PHP_FUNCTION(sys_getloadavg)
6078 {
6079 double load[3];
6080
6081 if (zend_parse_parameters_none() == FAILURE) {
6082 return;
6083 }
6084
6085 if (getloadavg(load, 3) == -1) {
6086 RETURN_FALSE;
6087 } else {
6088 array_init(return_value);
6089 add_index_double(return_value, 0, load[0]);
6090 add_index_double(return_value, 1, load[1]);
6091 add_index_double(return_value, 2, load[2]);
6092 }
6093 }
6094 /* }}} */
6095 #endif
6096
6097 /*
6098 * Local variables:
6099 * tab-width: 4
6100 * c-basic-offset: 4
6101 * End:
6102 * vim600: fdm=marker
6103 * vim: noet sw=4 ts=4
6104 */
6105