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