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