PageRenderTime 70ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/ext/standard/basic_functions.c

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