diff --git a/resources/php_compat_info.json b/resources/php_compat_info.json index 8212da4b..ad4965bb 100644 --- a/resources/php_compat_info.json +++ b/resources/php_compat_info.json @@ -1,6218 +1,12296 @@ { "@generated" : true, "params" : { "array_keys" : [ "4.0.0", "4.0.0", "5.0.0" ], "array_slice" : [ "4.0.0", "4.0.0", "4.0.0", "5.0.2" ], "assert" : [ "4.0.0", "5.4.8" ], "class_exists" : [ "4.0.0", "5.0.0" ], "clearstatcache" : [ "5.3.0", "5.3.0" ], "copy" : [ "4.0.0", "4.0.0", "5.3.0" ], "fgetss" : [ "5.0.0", "4.0.0", "5.0.0" ], "file" : [ "4.0.0", "4.0.0", "5.0.0" ], "file_get_contents" : [ "4.3.0", "4.3.0", "4.3.0", "5.1.0", "5.1.0" ], "get_browser" : [ "4.0.0", "4.3.2" ], "getopt" : [ "4.3.0", "5.3.0" ], "gettimeofday" : [ "5.1.0" ], "htmlentities" : [ "4.0.0", "4.0.3", "4.1.0", "5.2.3" ], "htmlspecialchars" : [ "4.0.0", "4.0.0", "4.1.0", "5.2.3" ], "is_a" : [ "4.2.0", "4.2.0", "5.3.9" ], "json_decode" : [ "5.2.0", "5.2.0", "5.3.0", "5.4.0" ], "md5" : [ "4.0.0", "5.0.0" ], "md5_file" : [ "4.2.0", "5.0.0" ], "memory_get_usage" : [ "5.2.0" ], "microtime" : [ "5.0.0" ], "mkdir" : [ "4.0.0", "4.0.0", "5.0.0", "5.0.0" ], "nl2br" : [ "4.0.0", "5.3.0" ], "opendir" : [ "4.0.0", "5.3.0" ], "parse_url" : [ "4.0.0", "5.1.2" ], "preg_replace" : [ "4.0.0", "4.0.0", "4.0.0", "4.0.1", "5.1.0" ], "preg_replace_callback" : [ "4.0.5", "4.0.5", "4.0.5", "4.0.5", "5.1.0" ], "sha1" : [ "4.3.0", "5.0.0" ], "sha1_file" : [ "4.3.0", "5.0.0" ], "str_replace" : [ "4.0.0", "4.0.0", "4.0.0", "5.0.0" ], "stream_copy_to_stream" : [ "5.0.0", "5.0.0", "5.0.0", "5.1.0" ], "stream_get_contents" : [ "5.0.0", "5.0.0", "5.1.0" ], "substr_count" : [ "4.0.0", "4.0.0", "5.1.0", "5.1.0" ] }, "functions" : { "_" : { "min" : "4.0.0", "max" : null }, "abs" : { "min" : "4.0.0", "max" : null }, "acos" : { "min" : "4.0.0", "max" : null }, "acosh" : { "min" : "4.0.7", "max" : null }, "addcslashes" : { "min" : "4.0.0", "max" : null }, "addslashes" : { "min" : "4.0.0", "max" : null }, "apc_add" : { "min" : "4.3.0", "max" : null }, "apc_bin_dump" : { "min" : "5.1.0", "max" : null }, "apc_bin_dumpfile" : { "min" : "5.1.0", "max" : null }, "apc_bin_load" : { "min" : "5.1.0", "max" : null }, "apc_bin_loadfile" : { "min" : "5.1.0", "max" : null }, "apc_cache_info" : { "min" : "4.0.0", "max" : null }, "apc_cas" : { "min" : "5.1.0", "max" : null }, "apc_clear_cache" : { "min" : "4.0.0", "max" : null }, "apc_compile_file" : { "min" : "4.3.0", "max" : null }, "apc_dec" : { "min" : "5.1.0", "max" : null }, "apc_define_constants" : { "min" : "4.3.0", "max" : null }, "apc_delete" : { "min" : "4.3.0", "max" : null }, "apc_delete_file" : { "min" : "5.1.0", "max" : null }, "apc_exists" : { "min" : "5.1.0", "max" : null }, "apc_fetch" : { "min" : "4.3.0", "max" : null }, "apc_inc" : { "min" : "5.1.0", "max" : null }, "apc_load_constants" : { "min" : "4.3.0", "max" : null }, "apc_sma_info" : { "min" : "4.0.0", "max" : null }, "apc_store" : { "min" : "4.3.0", "max" : null }, "array_change_key_case" : { "min" : "4.2.0", "max" : null }, "array_chunk" : { "min" : "4.2.0", "max" : null }, "array_column" : { "min" : "5.5.0", "max" : null }, "array_combine" : { "min" : "5.0.0", "max" : null }, "array_count_values" : { "min" : "4.0.0", "max" : null }, "array_diff" : { "min" : "4.0.1", "max" : null }, "array_diff_assoc" : { "min" : "4.3.0", "max" : null }, "array_diff_key" : { "min" : "5.1.0", "max" : null }, "array_diff_uassoc" : { "min" : "5.0.0", "max" : null }, "array_diff_ukey" : { "min" : "5.1.0", "max" : null }, "array_fill" : { "min" : "4.2.0", "max" : null }, "array_fill_keys" : { "min" : "5.2.0", "max" : null }, "array_filter" : { "min" : "4.0.6", "max" : null }, "array_flip" : { "min" : "4.0.0", "max" : null }, "array_intersect" : { "min" : "4.0.1", "max" : null }, "array_intersect_assoc" : { "min" : "4.3.0", "max" : null }, "array_intersect_key" : { "min" : "5.1.0", "max" : null }, "array_intersect_uassoc" : { "min" : "5.0.0", "max" : null }, "array_intersect_ukey" : { "min" : "5.1.0", "max" : null }, "array_key_exists" : { "min" : "4.0.7", "max" : null }, "array_keys" : { "min" : "4.0.0", "max" : null }, "array_map" : { "min" : "4.0.6", "max" : null }, "array_merge" : { "min" : "4.0.0", "max" : null }, "array_merge_recursive" : { "min" : "4.0.1", "max" : null }, "array_multisort" : { "min" : "4.0.0", "max" : null }, "array_pad" : { "min" : "4.0.0", "max" : null }, "array_pop" : { "min" : "4.0.0", "max" : null }, "array_product" : { "min" : "5.1.0", "max" : null }, "array_push" : { "min" : "4.0.0", "max" : null }, "array_rand" : { "min" : "4.0.0", "max" : null }, "array_reduce" : { "min" : "4.0.5", "max" : null }, "array_replace" : { "min" : "5.3.0", "max" : null }, "array_replace_recursive" : { "min" : "5.3.0", "max" : null }, "array_reverse" : { "min" : "4.0.0", "max" : null }, "array_search" : { "min" : "4.0.5", "max" : null }, "array_shift" : { "min" : "4.0.0", "max" : null }, "array_slice" : { "min" : "4.0.0", "max" : null }, "array_splice" : { "min" : "4.0.0", "max" : null }, "array_sum" : { "min" : "4.0.4", "max" : null }, "array_udiff" : { "min" : "5.0.0", "max" : null }, "array_udiff_assoc" : { "min" : "4.0.0", "max" : null }, "array_udiff_uassoc" : { "min" : "4.0.0", "max" : null }, "array_uintersect" : { "min" : "4.0.0", "max" : null }, "array_uintersect_assoc" : { "min" : "4.0.0", "max" : null }, "array_uintersect_uassoc" : { "min" : "4.0.0", "max" : null }, "array_unique" : { "min" : "4.0.1", "max" : null }, "array_unshift" : { "min" : "4.0.0", "max" : null }, "array_values" : { "min" : "4.0.0", "max" : null }, "array_walk" : { "min" : "4.0.0", "max" : null }, "array_walk_recursive" : { "min" : "5.0.0", "max" : null }, "arsort" : { "min" : "4.0.0", "max" : null }, "asin" : { "min" : "4.0.0", "max" : null }, "asinh" : { "min" : "4.0.7", "max" : null }, "asort" : { "min" : "4.0.0", "max" : null }, "assert" : { "min" : "4.0.0", "max" : null }, "assert_options" : { "min" : "4.0.0", "max" : null }, "atan" : { "min" : "4.0.0", "max" : null }, "atan2" : { "min" : "4.0.0", "max" : null }, "atanh" : { "min" : "4.0.7", "max" : null }, "base64_decode" : { "min" : "4.0.0", "max" : null }, "base64_encode" : { "min" : "4.0.0", "max" : null }, "base_convert" : { "min" : "4.0.0", "max" : null }, "basename" : { "min" : "4.0.0", "max" : null }, "bin2hex" : { "min" : "4.0.0", "max" : null }, "bind_textdomain_codeset" : { "min" : "4.2.0", "max" : null }, "bindec" : { "min" : "4.0.0", "max" : null }, "bindtextdomain" : { "min" : "4.0.0", "max" : null }, "boolval" : { "min" : "5.5.0", "max" : null }, "call_user_func" : { "min" : "4.0.0", "max" : null }, "call_user_func_array" : { "min" : "4.0.4", "max" : null }, "call_user_method" : { "min" : "4.0.0", "max" : null }, "call_user_method_array" : { "min" : "4.0.5", "max" : null }, "ceil" : { "min" : "4.0.0", "max" : null }, "chdir" : { "min" : "4.0.0", "max" : null }, "checkdate" : { "min" : "4.0.0", "max" : null }, "checkdnsrr" : { "min" : "4.0.0", "max" : null }, "chgrp" : { "min" : "4.0.0", "max" : null }, "chmod" : { "min" : "4.0.0", "max" : null }, "chop" : { "min" : "4.0.0", "max" : null }, "chown" : { "min" : "4.0.0", "max" : null }, "chr" : { "min" : "4.0.0", "max" : null }, "chroot" : { "min" : "4.0.5", "max" : null }, "chunk_split" : { "min" : "4.0.0", "max" : null }, "class_alias" : { "min" : "5.3.0", "max" : null }, "class_exists" : { "min" : "4.0.0", "max" : null }, "class_implements" : { "min" : "5.1.0", "max" : null }, "class_parents" : { "min" : "5.1.0", "max" : null }, "class_uses" : { "min" : "5.4.0", "max" : null }, "clearstatcache" : { "min" : "4.0.0", "max" : null }, "cli_get_process_title" : { "min" : "5.5.0", "max" : null }, "cli_set_process_title" : { "min" : "5.5.0", "max" : null }, "closedir" : { "min" : "4.0.0", "max" : null }, "closelog" : { "min" : "4.0.0", "max" : null }, "collator_asort" : { "min" : "5.2.0", "max" : null }, "collator_compare" : { "min" : "5.2.0", "max" : null }, "collator_create" : { "min" : "5.2.0", "max" : null }, "collator_get_attribute" : { "min" : "5.2.0", "max" : null }, "collator_get_error_code" : { "min" : "5.2.0", "max" : null }, "collator_get_error_message" : { "min" : "5.2.0", "max" : null }, "collator_get_locale" : { "min" : "5.2.0", "max" : null }, "collator_get_sort_key" : { "min" : "5.2.4", "max" : null }, "collator_get_strength" : { "min" : "5.2.0", "max" : null }, "collator_set_attribute" : { "min" : "5.2.0", "max" : null }, "collator_set_strength" : { "min" : "5.2.0", "max" : null }, "collator_sort" : { "min" : "5.2.0", "max" : null }, "collator_sort_with_sort_keys" : { "min" : "5.2.0", "max" : null }, "compact" : { "min" : "4.0.0", "max" : null }, "connection_aborted" : { "min" : "4.0.0", "max" : null }, "connection_status" : { "min" : "4.0.0", "max" : null }, "connection_timeout" : { "min" : "4.0.0", "max" : "4.0.4" }, "constant" : { "min" : "4.0.4", "max" : null }, "convert_cyr_string" : { "min" : "4.0.0", "max" : null }, "convert_uudecode" : { "min" : "5.0.0", "max" : null }, "convert_uuencode" : { "min" : "5.0.0", "max" : null }, "copy" : { "min" : "4.0.0", "max" : null }, "cos" : { "min" : "4.0.0", "max" : null }, "cosh" : { "min" : "4.0.7", "max" : null }, "count" : { "min" : "4.0.0", "max" : null }, "count_chars" : { "min" : "4.0.0", "max" : null }, "crc32" : { "min" : "4.0.1", "max" : null }, "create_function" : { "min" : "4.0.1", "max" : null }, "crypt" : { "min" : "4.0.0", "max" : null }, "curl_close" : { "min" : "4.0.2", "max" : null }, "curl_copy_handle" : { "min" : "5.0.0", "max" : null }, "curl_errno" : { "min" : "4.0.3", "max" : null }, "curl_error" : { "min" : "4.0.3", "max" : null }, "curl_escape" : { "min" : "5.5.0", "max" : null }, "curl_exec" : { "min" : "4.0.2", "max" : null }, "curl_file_create" : { "min" : "5.5.0", "max" : null }, "curl_getinfo" : { "min" : "4.0.4", "max" : null }, "curl_init" : { "min" : "4.0.2", "max" : null }, "curl_multi_add_handle" : { "min" : "5.0.0", "max" : null }, "curl_multi_close" : { "min" : "5.0.0", "max" : null }, "curl_multi_exec" : { "min" : "5.0.0", "max" : null }, "curl_multi_getcontent" : { "min" : "5.0.0", "max" : null }, "curl_multi_info_read" : { "min" : "5.0.0", "max" : null }, "curl_multi_init" : { "min" : "5.0.0", "max" : null }, "curl_multi_remove_handle" : { "min" : "5.0.0", "max" : null }, "curl_multi_select" : { "min" : "5.0.0", "max" : null }, "curl_multi_setopt" : { "min" : "5.5.0", "max" : null }, "curl_multi_strerror" : { "min" : "5.5.0", "max" : null }, "curl_pause" : { "min" : "5.5.0", "max" : null }, "curl_reset" : { "min" : "5.5.0", "max" : null }, "curl_setopt" : { "min" : "4.0.2", "max" : null }, "curl_setopt_array" : { "min" : "5.1.3", "max" : null }, "curl_share_close" : { "min" : "5.5.0", "max" : null }, "curl_share_init" : { "min" : "5.5.0", "max" : null }, "curl_share_setopt" : { "min" : "5.5.0", "max" : null }, "curl_strerror" : { "min" : "5.5.0", "max" : null }, "curl_unescape" : { "min" : "5.5.0", "max" : null }, "curl_version" : { "min" : "4.0.2", "max" : null }, "current" : { "min" : "4.0.0", "max" : null }, "date" : { "min" : "4.0.0", "max" : null }, "date_add" : { "min" : "5.3.0", "max" : null }, "date_create" : { "min" : "5.2.0", "max" : null }, "date_create_from_format" : { "min" : "5.3.0", "max" : null }, "date_create_immutable" : { "min" : "5.5.0", "max" : null }, "date_create_immutable_from_format" : { "min" : "5.5.0", "max" : null }, "date_date_set" : { "min" : "5.2.0", "max" : null }, "date_default_timezone_get" : { "min" : "5.1.0", "max" : null }, "date_default_timezone_set" : { "min" : "5.1.0", "max" : null }, "date_diff" : { "min" : "5.3.0", "max" : null }, "date_format" : { "min" : "5.2.0", "max" : null }, "date_get_last_errors" : { "min" : "5.3.0", "max" : null }, "date_interval_create_from_date_string" : { "min" : "5.3.0", "max" : null }, "date_interval_format" : { "min" : "5.3.0", "max" : null }, "date_isodate_set" : { "min" : "5.2.0", "max" : null }, "date_modify" : { "min" : "5.2.0", "max" : null }, "date_offset_get" : { "min" : "5.2.0", "max" : null }, "date_parse" : { "min" : "5.2.0", "max" : null }, "date_parse_from_format" : { "min" : "5.3.0", "max" : null }, "date_sub" : { "min" : "5.3.0", "max" : null }, "date_sun_info" : { "min" : "5.1.2", "max" : null }, "date_sunrise" : { "min" : "5.0.0", "max" : null }, "date_sunset" : { "min" : "5.0.0", "max" : null }, "date_time_set" : { "min" : "5.2.0", "max" : null }, "date_timestamp_get" : { "min" : "5.3.0", "max" : null }, "date_timestamp_set" : { "min" : "5.3.0", "max" : null }, "date_timezone_get" : { "min" : "5.2.0", "max" : null }, "date_timezone_set" : { "min" : "5.2.0", "max" : null }, "datefmt_create" : { "min" : "5.2.4", "max" : null }, "datefmt_format" : { "min" : "5.2.4", "max" : null }, "datefmt_format_object" : { "min" : "5.5.0", "max" : null }, "datefmt_get_calendar" : { "min" : "5.2.4", "max" : null }, "datefmt_get_calendar_object" : { "min" : "5.5.0", "max" : null }, "datefmt_get_datetype" : { "min" : "5.2.4", "max" : null }, "datefmt_get_error_code" : { "min" : "5.2.4", "max" : null }, "datefmt_get_error_message" : { "min" : "5.2.4", "max" : null }, "datefmt_get_locale" : { "min" : "5.2.4", "max" : null }, "datefmt_get_pattern" : { "min" : "5.2.4", "max" : null }, "datefmt_get_timetype" : { "min" : "5.2.4", "max" : null }, "datefmt_get_timezone" : { "min" : "5.5.0", "max" : null }, "datefmt_get_timezone_id" : { "min" : "5.2.4", "max" : null }, "datefmt_is_lenient" : { "min" : "5.2.4", "max" : null }, "datefmt_localtime" : { "min" : "5.2.4", "max" : null }, "datefmt_parse" : { "min" : "5.2.4", "max" : null }, "datefmt_set_calendar" : { "min" : "5.2.4", "max" : null }, "datefmt_set_lenient" : { "min" : "5.2.4", "max" : null }, "datefmt_set_pattern" : { "min" : "5.2.4", "max" : null }, "datefmt_set_timezone" : { "min" : "5.5.0", "max" : null }, "datefmt_set_timezone_id" : { "min" : "5.2.4", "max" : null }, "dcgettext" : { "min" : "4.0.0", "max" : null }, "dcngettext" : { "min" : "4.2.0", "max" : null }, "debug_backtrace" : { "min" : "4.3.0", "max" : null }, "debug_print_backtrace" : { "min" : "5.0.0", "max" : null }, "debug_zval_dump" : { "min" : "4.2.0", "max" : null }, "decbin" : { "min" : "4.0.0", "max" : null }, "dechex" : { "min" : "4.0.0", "max" : null }, "decoct" : { "min" : "4.0.0", "max" : null }, "define" : { "min" : "4.0.0", "max" : null }, "define_syslog_variables" : { "min" : "4.0.0", "max" : "5.3.28" }, "defined" : { "min" : "4.0.0", "max" : null }, "deg2rad" : { "min" : "4.0.0", "max" : null }, "dgettext" : { "min" : "4.0.0", "max" : null }, "dir" : { "min" : "4.0.0", "max" : null }, "dirname" : { "min" : "4.0.0", "max" : null }, "disk_free_space" : { "min" : "4.1.0", "max" : null }, "disk_total_space" : { "min" : "4.0.0", "max" : null }, "diskfreespace" : { "min" : "4.1.0", "max" : null }, "dl" : { "min" : "4.0.0", "max" : null }, "dngettext" : { "min" : "4.2.0", "max" : null }, "dns_check_record" : { "min" : "5.0.0", "max" : null }, "dns_get_mx" : { "min" : "5.0.0", "max" : null }, "dns_get_record" : { "min" : "5.0.0", "max" : null }, "doubleval" : { "min" : "4.0.0", "max" : null }, "each" : { "min" : "4.0.0", "max" : null }, "empty" : { "min" : "4.0.0", "max" : null }, "end" : { "min" : "4.0.0", "max" : null }, "error_get_last" : { "min" : "5.2.0", "max" : null }, "error_log" : { "min" : "4.0.0", "max" : null }, "error_reporting" : { "min" : "4.0.0", "max" : null }, "escapeshellarg" : { "min" : "4.0.3", "max" : null }, "escapeshellcmd" : { "min" : "4.0.0", "max" : null }, "exec" : { "min" : "4.0.0", "max" : null }, "exp" : { "min" : "4.0.0", "max" : null }, "explode" : { "min" : "4.0.0", "max" : null }, "expm1" : { "min" : "4.0.7", "max" : null }, "extension_loaded" : { "min" : "4.0.0", "max" : null }, "extract" : { "min" : "4.0.0", "max" : null }, "ezmlm_hash" : { "min" : "4.0.2", "max" : null }, "fclose" : { "min" : "4.0.0", "max" : null }, "feof" : { "min" : "4.0.0", "max" : null }, "fflush" : { "min" : "4.0.1", "max" : null }, "fgetc" : { "min" : "4.0.0", "max" : null }, "fgetcsv" : { "min" : "4.0.0", "max" : null }, "fgets" : { "min" : "4.0.0", "max" : null }, "fgetss" : { "min" : "4.0.0", "max" : null }, "file" : { "min" : "4.0.0", "max" : null }, "file_exists" : { "min" : "4.0.0", "max" : null }, "file_get_contents" : { "min" : "4.3.0", "max" : null }, "file_put_contents" : { "min" : "5.0.0", "max" : null }, "fileatime" : { "min" : "4.0.0", "max" : null }, "filectime" : { "min" : "4.0.0", "max" : null }, "filegroup" : { "min" : "4.0.0", "max" : null }, "fileinode" : { "min" : "4.0.0", "max" : null }, "filemtime" : { "min" : "4.0.0", "max" : null }, "fileowner" : { "min" : "4.0.0", "max" : null }, "fileperms" : { "min" : "4.0.0", "max" : null }, "filesize" : { "min" : "4.0.0", "max" : null }, "filetype" : { "min" : "4.0.0", "max" : null }, "finfo_buffer" : { "min" : "4.0.0", "max" : null }, "finfo_close" : { "min" : "4.0.0", "max" : null }, "finfo_file" : { "min" : "4.0.0", "max" : null }, "finfo_open" : { "min" : "4.0.0", "max" : null }, "finfo_set_flags" : { "min" : "4.0.0", "max" : null }, "floatval" : { "min" : "4.2.0", "max" : null }, "flock" : { "min" : "4.0.0", "max" : null }, "floor" : { "min" : "4.0.0", "max" : null }, "flush" : { "min" : "4.0.0", "max" : null }, "fmod" : { "min" : "4.2.0", "max" : null }, "fnmatch" : { "min" : "4.3.0", "max" : null }, "fopen" : { "min" : "4.0.0", "max" : null }, "forward_static_call" : { "min" : "5.3.0", "max" : null }, "forward_static_call_array" : { "min" : "5.3.0", "max" : null }, "fpassthru" : { "min" : "4.0.0", "max" : null }, "fprintf" : { "min" : "5.0.0", "max" : null }, "fputcsv" : { "min" : "5.1.0", "max" : null }, "fputs" : { "min" : "4.0.0", "max" : null }, "fread" : { "min" : "4.0.0", "max" : null }, "fscanf" : { "min" : "4.0.1", "max" : null }, "fseek" : { "min" : "4.0.0", "max" : null }, "fsockopen" : { "min" : "4.0.0", "max" : null }, "fstat" : { "min" : "4.0.0", "max" : null }, "ftell" : { "min" : "4.0.0", "max" : null }, "ftok" : { "min" : "4.2.0", "max" : null }, "ftruncate" : { "min" : "4.0.0", "max" : null }, "func_get_arg" : { "min" : "4.0.0", "max" : null }, "func_get_args" : { "min" : "4.0.0", "max" : null }, "func_num_args" : { "min" : "4.0.0", "max" : null }, "function_exists" : { "min" : "4.0.0", "max" : null }, "fwrite" : { "min" : "4.0.0", "max" : null }, "gc_collect_cycles" : { "min" : "5.3.0", "max" : null }, "gc_disable" : { "min" : "5.3.0", "max" : null }, "gc_enable" : { "min" : "5.3.0", "max" : null }, "gc_enabled" : { "min" : "5.3.0", "max" : null }, "gd_info" : { "min" : "4.3.0", "max" : null }, "get_browser" : { "min" : "4.0.0", "max" : null }, "get_called_class" : { "min" : "5.3.0", "max" : null }, "get_cfg_var" : { "min" : "4.0.0", "max" : null }, "get_class" : { "min" : "4.0.0", "max" : null }, "get_class_methods" : { "min" : "4.0.0", "max" : null }, "get_class_vars" : { "min" : "4.0.0", "max" : null }, "get_current_user" : { "min" : "4.0.0", "max" : null }, "get_declared_classes" : { "min" : "4.0.0", "max" : null }, "get_declared_interfaces" : { "min" : "5.0.0", "max" : null }, "get_declared_traits" : { "min" : "5.4.0", "max" : null }, "get_defined_constants" : { "min" : "4.0.7", "max" : null }, "get_defined_functions" : { "min" : "4.0.4", "max" : null }, "get_defined_vars" : { "min" : "4.0.4", "max" : null }, "get_extension_funcs" : { "min" : "4.0.0", "max" : null }, "get_headers" : { "min" : "5.0.0", "max" : null }, "get_html_translation_table" : { "min" : "4.0.0", "max" : null }, "get_include_path" : { "min" : "4.3.0", "max" : null }, "get_included_files" : { "min" : "4.0.0", "max" : null }, "get_loaded_extensions" : { "min" : "4.0.0", "max" : null }, "get_magic_quotes_gpc" : { "min" : "4.0.0", "max" : null }, "get_magic_quotes_runtime" : { "min" : "4.0.0", "max" : null }, "get_meta_tags" : { "min" : "4.0.0", "max" : null }, "get_object_vars" : { "min" : "4.0.0", "max" : null }, "get_parent_class" : { "min" : "4.0.0", "max" : null }, "get_required_files" : { "min" : "4.0.0", "max" : null }, "get_resource_type" : { "min" : "4.0.2", "max" : null }, "getcwd" : { "min" : "4.0.0", "max" : null }, "getdate" : { "min" : "4.0.0", "max" : null }, "getenv" : { "min" : "4.0.0", "max" : null }, "gethostbyaddr" : { "min" : "4.0.0", "max" : null }, "gethostbyname" : { "min" : "4.0.0", "max" : null }, "gethostbynamel" : { "min" : "4.0.0", "max" : null }, "gethostname" : { "min" : "5.3.0", "max" : null }, "getimagesize" : { "min" : "4.0.0", "max" : null }, "getimagesizefromstring" : { "min" : "5.4.0", "max" : null }, "getlastmod" : { "min" : "4.0.0", "max" : null }, "getmxrr" : { "min" : "4.0.0", "max" : null }, "getmygid" : { "min" : "4.0.7", "max" : null }, "getmyinode" : { "min" : "4.0.0", "max" : null }, "getmypid" : { "min" : "4.0.0", "max" : null }, "getmyuid" : { "min" : "4.0.0", "max" : null }, "getopt" : { "min" : "4.3.0", "max" : null }, "getprotobyname" : { "min" : "4.0.0", "max" : null }, "getprotobynumber" : { "min" : "4.0.0", "max" : null }, "getrandmax" : { "min" : "4.0.0", "max" : null }, "getrusage" : { "min" : "4.0.0", "max" : null }, "getservbyname" : { "min" : "4.0.0", "max" : null }, "getservbyport" : { "min" : "4.0.0", "max" : null }, "gettext" : { "min" : "4.0.0", "max" : null }, "gettimeofday" : { "min" : "4.0.0", "max" : null }, "gettype" : { "min" : "4.0.0", "max" : null }, "glob" : { "min" : "4.3.0", "max" : null }, "gmdate" : { "min" : "4.0.0", "max" : null }, "gmmktime" : { "min" : "4.0.0", "max" : null }, "gmstrftime" : { "min" : "4.0.0", "max" : null }, "grapheme_extract" : { "min" : "5.2.4", "max" : null }, "grapheme_stripos" : { "min" : "5.2.4", "max" : null }, "grapheme_stristr" : { "min" : "5.2.4", "max" : null }, "grapheme_strlen" : { "min" : "5.2.4", "max" : null }, "grapheme_strpos" : { "min" : "5.2.4", "max" : null }, "grapheme_strripos" : { "min" : "5.2.4", "max" : null }, "grapheme_strrpos" : { "min" : "5.2.4", "max" : null }, "grapheme_strstr" : { "min" : "5.2.4", "max" : null }, "grapheme_substr" : { "min" : "5.2.4", "max" : null }, "header" : { "min" : "4.0.0", "max" : null }, "header_register_callback" : { "min" : "5.4.0", "max" : null }, "header_remove" : { "min" : "5.3.0", "max" : null }, "headers_list" : { "min" : "5.0.0", "max" : null }, "headers_sent" : { "min" : "4.0.0", "max" : null }, "hebrev" : { "min" : "4.0.0", "max" : null }, "hebrevc" : { "min" : "4.0.0", "max" : null }, "hex2bin" : { "min" : "5.4.0", "max" : null }, "hexdec" : { "min" : "4.0.0", "max" : null }, "highlight_file" : { "min" : "4.0.0", "max" : null }, "highlight_string" : { "min" : "4.0.0", "max" : null }, "html_entity_decode" : { "min" : "4.3.0", "max" : null }, "htmlentities" : { "min" : "4.0.0", "max" : null }, "htmlspecialchars" : { "min" : "4.0.0", "max" : null }, "htmlspecialchars_decode" : { "min" : "5.1.0", "max" : null }, "http_build_query" : { "min" : "4.0.0", "max" : null }, "http_response_code" : { "min" : "5.4.0", "max" : null }, "hypot" : { "min" : "4.0.7", "max" : null }, "idate" : { "min" : "5.0.0", "max" : null }, "idn_to_ascii" : { "min" : "5.2.4", "max" : null }, "idn_to_utf8" : { "min" : "5.2.4", "max" : null }, "ignore_user_abort" : { "min" : "4.0.0", "max" : null }, "image2wbmp" : { "min" : "4.0.5", "max" : null }, "image_type_to_extension" : { "min" : "4.0.0", "max" : null }, "image_type_to_mime_type" : { "min" : "4.0.0", "max" : null }, "imageaffine" : { "min" : "5.5.0", "max" : null }, "imageaffinematrixconcat" : { "min" : "5.5.0", "max" : null }, "imageaffinematrixget" : { "min" : "5.5.0", "max" : null }, "imagealphablending" : { "min" : "4.0.6", "max" : null }, "imageantialias" : { "min" : "4.3.2", "max" : null }, "imagearc" : { "min" : "4.0.0", "max" : null }, "imagechar" : { "min" : "4.0.0", "max" : null }, "imagecharup" : { "min" : "4.0.0", "max" : null }, "imagecolorallocate" : { "min" : "4.0.0", "max" : null }, "imagecolorallocatealpha" : { "min" : "4.3.2", "max" : null }, "imagecolorat" : { "min" : "4.0.0", "max" : null }, "imagecolorclosest" : { "min" : "4.0.0", "max" : null }, "imagecolorclosestalpha" : { "min" : "4.0.6", "max" : null }, "imagecolorclosesthwb" : { "min" : "4.0.1", "max" : null }, "imagecolordeallocate" : { "min" : "4.0.0", "max" : null }, "imagecolorexact" : { "min" : "4.0.0", "max" : null }, "imagecolorexactalpha" : { "min" : "4.0.6", "max" : null }, "imagecolormatch" : { "min" : "4.3.0", "max" : null }, "imagecolorresolve" : { "min" : "4.0.0", "max" : null }, "imagecolorresolvealpha" : { "min" : "4.0.6", "max" : null }, "imagecolorset" : { "min" : "4.0.0", "max" : null }, "imagecolorsforindex" : { "min" : "4.0.0", "max" : null }, "imagecolorstotal" : { "min" : "4.0.0", "max" : null }, "imagecolortransparent" : { "min" : "4.0.0", "max" : null }, "imageconvolution" : { "min" : "5.1.0", "max" : null }, "imagecopy" : { "min" : "4.0.0", "max" : null }, "imagecopymerge" : { "min" : "4.0.1", "max" : null }, "imagecopymergegray" : { "min" : "4.0.6", "max" : null }, "imagecopyresampled" : { "min" : "4.0.6", "max" : null }, "imagecopyresized" : { "min" : "4.0.0", "max" : null }, "imagecreate" : { "min" : "4.0.0", "max" : null }, "imagecreatefromgd" : { "min" : "4.0.7", "max" : null }, "imagecreatefromgd2" : { "min" : "4.0.7", "max" : null }, "imagecreatefromgd2part" : { "min" : "4.0.7", "max" : null }, "imagecreatefromgif" : { "min" : "4.0.0", "max" : null }, "imagecreatefromjpeg" : { "min" : "4.0.0", "max" : null }, "imagecreatefrompng" : { "min" : "4.0.0", "max" : null }, "imagecreatefromstring" : { "min" : "4.0.4", "max" : null }, "imagecreatefromwbmp" : { "min" : "4.0.1", "max" : null }, "imagecreatefromwebp" : { "min" : "5.4.0", "max" : null }, "imagecreatefromxbm" : { "min" : "4.0.1", "max" : null }, "imagecreatefromxpm" : { "min" : "4.0.1", "max" : null }, "imagecreatetruecolor" : { "min" : "4.0.6", "max" : null }, "imagecrop" : { "min" : "5.5.0", "max" : null }, "imagecropauto" : { "min" : "5.5.0", "max" : null }, "imagedashedline" : { "min" : "4.0.0", "max" : null }, "imagedestroy" : { "min" : "4.0.0", "max" : null }, "imageellipse" : { "min" : "4.0.6", "max" : null }, "imagefill" : { "min" : "4.0.0", "max" : null }, "imagefilledarc" : { "min" : "4.0.6", "max" : null }, "imagefilledellipse" : { "min" : "4.0.6", "max" : null }, "imagefilledpolygon" : { "min" : "4.0.0", "max" : null }, "imagefilledrectangle" : { "min" : "4.0.0", "max" : null }, "imagefilltoborder" : { "min" : "4.0.0", "max" : null }, "imagefilter" : { "min" : "5.0.0", "max" : null }, "imageflip" : { "min" : "5.5.0", "max" : null }, "imagefontheight" : { "min" : "4.0.0", "max" : null }, "imagefontwidth" : { "min" : "4.0.0", "max" : null }, "imageftbbox" : { "min" : "4.0.7", "max" : null }, "imagefttext" : { "min" : "4.0.7", "max" : null }, "imagegammacorrect" : { "min" : "4.0.0", "max" : null }, "imagegd" : { "min" : "4.0.7", "max" : null }, "imagegd2" : { "min" : "4.0.7", "max" : null }, "imagegif" : { "min" : "4.0.0", "max" : null }, "imagegrabscreen" : { "min" : "5.2.2", "max" : null }, "imagegrabwindow" : { "min" : "5.2.2", "max" : null }, "imageinterlace" : { "min" : "4.0.0", "max" : null }, "imageistruecolor" : { "min" : "4.3.2", "max" : null }, "imagejpeg" : { "min" : "4.0.0", "max" : null }, "imagelayereffect" : { "min" : "4.3.0", "max" : null }, "imageline" : { "min" : "4.0.0", "max" : null }, "imageloadfont" : { "min" : "4.0.0", "max" : null }, "imagepalettecopy" : { "min" : "4.0.1", "max" : null }, "imagepalettetotruecolor" : { "min" : "5.5.0", "max" : null }, "imagepng" : { "min" : "4.0.0", "max" : null }, "imagepolygon" : { "min" : "4.0.0", "max" : null }, "imagepsbbox" : { "min" : "4.0.0", "max" : null }, "imagepsencodefont" : { "min" : "4.0.0", "max" : null }, "imagepsextendfont" : { "min" : "4.0.0", "max" : null }, "imagepsfreefont" : { "min" : "4.0.0", "max" : null }, "imagepsloadfont" : { "min" : "4.0.0", "max" : null }, "imagepsslantfont" : { "min" : "4.0.0", "max" : null }, "imagepstext" : { "min" : "4.0.0", "max" : null }, "imagerectangle" : { "min" : "4.0.0", "max" : null }, "imagerotate" : { "min" : "4.3.0", "max" : null }, "imagesavealpha" : { "min" : "4.3.2", "max" : null }, "imagescale" : { "min" : "5.5.0", "max" : null }, "imagesetbrush" : { "min" : "4.0.6", "max" : null }, "imagesetinterpolation" : { "min" : "5.5.0", "max" : null }, "imagesetpixel" : { "min" : "4.0.0", "max" : null }, "imagesetstyle" : { "min" : "4.0.6", "max" : null }, "imagesetthickness" : { "min" : "4.0.6", "max" : null }, "imagesettile" : { "min" : "4.0.6", "max" : null }, "imagestring" : { "min" : "4.0.0", "max" : null }, "imagestringup" : { "min" : "4.0.0", "max" : null }, "imagesx" : { "min" : "4.0.0", "max" : null }, "imagesy" : { "min" : "4.0.0", "max" : null }, "imagetruecolortopalette" : { "min" : "4.0.6", "max" : null }, "imagettfbbox" : { "min" : "4.0.0", "max" : null }, "imagettftext" : { "min" : "4.0.0", "max" : null }, "imagetypes" : { "min" : "4.0.2", "max" : null }, "imagewbmp" : { "min" : "4.0.1", "max" : null }, "imagewebp" : { "min" : "5.4.0", "max" : null }, "imagexbm" : { "min" : "5.0.0", "max" : null }, "implode" : { "min" : "4.0.0", "max" : null }, "import_request_variables" : { "min" : "4.0.7", "max" : "5.3.28" }, "in_array" : { "min" : "4.0.0", "max" : null }, "inet_ntop" : { "min" : "5.1.0", "max" : null }, "inet_pton" : { "min" : "5.1.0", "max" : null }, "ini_alter" : { "min" : "4.0.0", "max" : null }, "ini_get" : { "min" : "4.0.0", "max" : null }, "ini_get_all" : { "min" : "4.2.0", "max" : null }, "ini_restore" : { "min" : "4.0.0", "max" : null }, "ini_set" : { "min" : "4.0.0", "max" : null }, "interface_exists" : { "min" : "5.0.2", "max" : null }, "intl_error_name" : { "min" : "5.2.0", "max" : null }, "intl_get_error_code" : { "min" : "5.2.0", "max" : null }, "intl_get_error_message" : { "min" : "5.2.0", "max" : null }, "intl_is_failure" : { "min" : "5.2.0", "max" : null }, "intlcal_add" : { "min" : "5.5.0", "max" : null }, "intlcal_after" : { "min" : "5.5.0", "max" : null }, "intlcal_before" : { "min" : "5.5.0", "max" : null }, "intlcal_clear" : { "min" : "5.5.0", "max" : null }, "intlcal_create_instance" : { "min" : "5.5.0", "max" : null }, "intlcal_equals" : { "min" : "5.5.0", "max" : null }, "intlcal_field_difference" : { "min" : "5.5.0", "max" : null }, "intlcal_from_date_time" : { "min" : "5.5.0", "max" : null }, "intlcal_get" : { "min" : "5.5.0", "max" : null }, "intlcal_get_actual_maximum" : { "min" : "5.5.0", "max" : null }, "intlcal_get_actual_minimum" : { "min" : "5.5.0", "max" : null }, "intlcal_get_available_locales" : { "min" : "5.5.0", "max" : null }, "intlcal_get_day_of_week_type" : { "min" : "5.5.0", "max" : null }, "intlcal_get_error_code" : { "min" : "5.5.0", "max" : null }, "intlcal_get_error_message" : { "min" : "5.5.0", "max" : null }, "intlcal_get_first_day_of_week" : { "min" : "5.5.0", "max" : null }, "intlcal_get_greatest_minimum" : { "min" : "5.5.0", "max" : null }, "intlcal_get_keyword_values_for_locale" : { "min" : "5.5.0", "max" : null }, "intlcal_get_least_maximum" : { "min" : "5.5.0", "max" : null }, "intlcal_get_locale" : { "min" : "5.5.0", "max" : null }, "intlcal_get_maximum" : { "min" : "5.5.0", "max" : null }, "intlcal_get_minimal_days_in_first_week" : { "min" : "5.5.0", "max" : null }, "intlcal_get_minimum" : { "min" : "5.5.0", "max" : null }, "intlcal_get_now" : { "min" : "5.5.0", "max" : null }, "intlcal_get_time" : { "min" : "5.5.0", "max" : null }, "intlcal_get_time_zone" : { "min" : "5.5.0", "max" : null }, "intlcal_get_type" : { "min" : "5.5.0", "max" : null }, "intlcal_get_weekend_transition" : { "min" : "5.5.0", "max" : null }, "intlcal_in_daylight_time" : { "min" : "5.5.0", "max" : null }, "intlcal_is_equivalent_to" : { "min" : "5.5.0", "max" : null }, "intlcal_is_lenient" : { "min" : "5.5.0", "max" : null }, "intlcal_is_set" : { "min" : "5.5.0", "max" : null }, "intlcal_is_weekend" : { "min" : "5.5.0", "max" : null }, "intlcal_roll" : { "min" : "5.5.0", "max" : null }, "intlcal_set" : { "min" : "5.5.0", "max" : null }, "intlcal_set_first_day_of_week" : { "min" : "5.5.0", "max" : null }, "intlcal_set_lenient" : { "min" : "5.5.0", "max" : null }, "intlcal_set_minimal_days_in_first_week" : { "min" : "5.5.1", "max" : null }, "intlcal_set_time" : { "min" : "5.5.0", "max" : null }, "intlcal_set_time_zone" : { "min" : "5.5.0", "max" : null }, "intlcal_to_date_time" : { "min" : "5.5.0", "max" : null }, "intlgregcal_create_instance" : { "min" : "5.5.0", "max" : null }, "intlgregcal_get_gregorian_change" : { "min" : "5.5.0", "max" : null }, "intlgregcal_is_leap_year" : { "min" : "5.5.0", "max" : null }, "intlgregcal_set_gregorian_change" : { "min" : "5.5.0", "max" : null }, "intltz_count_equivalent_ids" : { "min" : "5.5.0", "max" : null }, "intltz_create_default" : { "min" : "5.5.0", "max" : null }, "intltz_create_enumeration" : { "min" : "5.5.0", "max" : null }, "intltz_create_time_zone" : { "min" : "5.5.0", "max" : null }, "intltz_from_date_time_zone" : { "min" : "5.5.0", "max" : null }, "intltz_get_canonical_id" : { "min" : "5.5.0", "max" : null }, "intltz_get_display_name" : { "min" : "5.5.0", "max" : null }, "intltz_get_dst_savings" : { "min" : "5.5.0", "max" : null }, "intltz_get_equivalent_id" : { "min" : "5.5.0", "max" : null }, "intltz_get_error_code" : { "min" : "5.5.0", "max" : null }, "intltz_get_error_message" : { "min" : "5.5.0", "max" : null }, "intltz_get_gmt" : { "min" : "5.5.0", "max" : null }, "intltz_get_id" : { "min" : "5.5.0", "max" : null }, "intltz_get_offset" : { "min" : "5.5.0", "max" : null }, "intltz_get_raw_offset" : { "min" : "5.5.0", "max" : null }, "intltz_get_tz_data_version" : { "min" : "5.5.0", "max" : null }, "intltz_has_same_rules" : { "min" : "5.5.0", "max" : null }, "intltz_to_date_time_zone" : { "min" : "5.5.0", "max" : null }, "intltz_use_daylight_time" : { "min" : "5.5.0", "max" : null }, "intval" : { "min" : "4.0.0", "max" : null }, "ip2long" : { "min" : "4.0.0", "max" : null }, "iptcembed" : { "min" : "4.0.0", "max" : null }, "iptcparse" : { "min" : "4.0.0", "max" : null }, "is_a" : { "min" : "4.2.0", "max" : null }, "is_array" : { "min" : "4.0.0", "max" : null }, "is_bool" : { "min" : "4.0.0", "max" : null }, "is_callable" : { "min" : "4.0.6", "max" : null }, "is_dir" : { "min" : "4.0.0", "max" : null }, "is_double" : { "min" : "4.0.0", "max" : null }, "is_executable" : { "min" : "4.0.0", "max" : null }, "is_file" : { "min" : "4.0.0", "max" : null }, "is_finite" : { "min" : "4.2.0", "max" : null }, "is_float" : { "min" : "4.0.0", "max" : null }, "is_infinite" : { "min" : "4.2.0", "max" : null }, "is_int" : { "min" : "4.0.0", "max" : null }, "is_integer" : { "min" : "4.0.0", "max" : null }, "is_link" : { "min" : "4.0.0", "max" : null }, "is_long" : { "min" : "4.0.0", "max" : null }, "is_nan" : { "min" : "4.2.0", "max" : null }, "is_null" : { "min" : "4.0.4", "max" : null }, "is_numeric" : { "min" : "4.0.0", "max" : null }, "is_object" : { "min" : "4.0.0", "max" : null }, "is_readable" : { "min" : "4.0.0", "max" : null }, "is_real" : { "min" : "4.0.0", "max" : null }, "is_resource" : { "min" : "4.0.0", "max" : null }, "is_scalar" : { "min" : "4.0.5", "max" : null }, "is_string" : { "min" : "4.0.0", "max" : null }, "is_subclass_of" : { "min" : "4.0.0", "max" : null }, "is_uploaded_file" : { "min" : "4.0.3", "max" : null }, "is_writable" : { "min" : "4.0.0", "max" : null }, "is_writeable" : { "min" : "4.0.0", "max" : null }, "isset" : { "min" : "4.0.0", "max" : null }, "iterator_apply" : { "min" : "5.1.0", "max" : null }, "iterator_count" : { "min" : "5.1.0", "max" : null }, "iterator_to_array" : { "min" : "5.1.0", "max" : null }, "join" : { "min" : "4.0.0", "max" : null }, "jpeg2wbmp" : { "min" : "4.0.5", "max" : null }, "json_decode" : { "min" : "5.2.0", "max" : null }, "json_encode" : { "min" : "5.2.0", "max" : null }, "json_last_error" : { "min" : "5.3.0", "max" : null }, "json_last_error_msg" : { "min" : "5.5.0", "max" : null }, "key" : { "min" : "4.0.0", "max" : null }, "key_exists" : { "min" : "4.0.6", "max" : null }, "krsort" : { "min" : "4.0.0", "max" : null }, "ksort" : { "min" : "4.0.0", "max" : null }, "lcfirst" : { "min" : "5.3.0", "max" : null }, "lcg_value" : { "min" : "4.0.0", "max" : null }, "lchgrp" : { "min" : "5.1.0", "max" : null }, "lchown" : { "min" : "5.1.0", "max" : null }, "levenshtein" : { "min" : "4.0.1", "max" : null }, "libxml_clear_errors" : { "min" : "5.1.0", "max" : null }, "libxml_disable_entity_loader" : { "min" : "5.2.11", "max" : null }, "libxml_get_errors" : { "min" : "5.1.0", "max" : null }, "libxml_get_last_error" : { "min" : "5.1.0", "max" : null }, "libxml_set_external_entity_loader" : { "min" : "5.4.0", "max" : null }, "libxml_set_streams_context" : { "min" : "5.0.0", "max" : null }, "libxml_use_internal_errors" : { "min" : "5.1.0", "max" : null }, "link" : { "min" : "4.0.0", "max" : null }, "linkinfo" : { "min" : "4.0.0", "max" : null }, "list" : { "min" : "4.0.0", "max" : null }, "locale_accept_from_http" : { "min" : "5.2.4", "max" : null }, "locale_canonicalize" : { "min" : "5.2.0", "max" : null }, "locale_compose" : { "min" : "5.2.0", "max" : null }, "locale_filter_matches" : { "min" : "5.2.0", "max" : null }, "locale_get_all_variants" : { "min" : "5.2.0", "max" : null }, "locale_get_default" : { "min" : "5.2.0", "max" : null }, "locale_get_display_language" : { "min" : "5.2.0", "max" : null }, "locale_get_display_name" : { "min" : "5.2.0", "max" : null }, "locale_get_display_region" : { "min" : "5.2.0", "max" : null }, "locale_get_display_script" : { "min" : "5.2.0", "max" : null }, "locale_get_display_variant" : { "min" : "5.2.0", "max" : null }, "locale_get_keywords" : { "min" : "5.2.0", "max" : null }, "locale_get_primary_language" : { "min" : "5.2.0", "max" : null }, "locale_get_region" : { "min" : "5.2.0", "max" : null }, "locale_get_script" : { "min" : "5.2.0", "max" : null }, "locale_lookup" : { "min" : "5.2.0", "max" : null }, "locale_parse" : { "min" : "5.2.0", "max" : null }, "locale_set_default" : { "min" : "5.2.0", "max" : null }, "localeconv" : { "min" : "4.0.0", "max" : null }, "localtime" : { "min" : "4.0.0", "max" : null }, "log" : { "min" : "4.0.0", "max" : null }, "log10" : { "min" : "4.0.0", "max" : null }, "log1p" : { "min" : "4.0.7", "max" : null }, "long2ip" : { "min" : "4.0.0", "max" : null }, "lstat" : { "min" : "4.0.0", "max" : null }, "ltrim" : { "min" : "4.0.0", "max" : null }, "magic_quotes_runtime" : { "min" : "4.0.0", "max" : null }, "mail" : { "min" : "4.0.0", "max" : null }, "max" : { "min" : "4.0.0", "max" : null }, "md5" : { "min" : "4.0.0", "max" : null }, "md5_file" : { "min" : "4.2.0", "max" : null }, "memory_get_peak_usage" : { "min" : "5.2.0", "max" : null }, "memory_get_usage" : { "min" : "4.3.2", "max" : null }, "metaphone" : { "min" : "4.0.0", "max" : null }, "method_exists" : { "min" : "4.0.0", "max" : null }, "microtime" : { "min" : "4.0.0", "max" : null }, "mime_content_type" : { "min" : "5.3.0", "max" : null }, "min" : { "min" : "4.0.0", "max" : null }, "mkdir" : { "min" : "4.0.0", "max" : null }, "mktime" : { "min" : "4.0.0", "max" : null }, "money_format" : { "min" : "4.3.0", "max" : null }, "move_uploaded_file" : { "min" : "4.0.3", "max" : null }, "msgfmt_create" : { "min" : "5.2.0", "max" : null }, "msgfmt_format" : { "min" : "5.2.0", "max" : null }, "msgfmt_format_message" : { "min" : "5.2.0", "max" : null }, "msgfmt_get_error_code" : { "min" : "5.2.0", "max" : null }, "msgfmt_get_error_message" : { "min" : "5.2.0", "max" : null }, "msgfmt_get_locale" : { "min" : "5.2.0", "max" : null }, "msgfmt_get_pattern" : { "min" : "5.2.0", "max" : null }, "msgfmt_parse" : { "min" : "5.2.0", "max" : null }, "msgfmt_parse_message" : { "min" : "5.2.0", "max" : null }, "msgfmt_set_pattern" : { "min" : "5.2.0", "max" : null }, "mt_getrandmax" : { "min" : "4.0.0", "max" : null }, "mt_rand" : { "min" : "4.0.0", "max" : null }, "mt_srand" : { "min" : "4.0.0", "max" : null }, "mysql" : { "min" : "4.0.0", "max" : null }, "mysql_affected_rows" : { "min" : "4.0.0", "max" : null }, "mysql_client_encoding" : { "min" : "4.3.0", "max" : null }, "mysql_close" : { "min" : "4.0.0", "max" : null }, "mysql_connect" : { "min" : "4.0.0", "max" : null }, "mysql_create_db" : { "min" : "4.0.0", "max" : null }, "mysql_data_seek" : { "min" : "4.0.0", "max" : null }, "mysql_db_name" : { "min" : "4.0.0", "max" : null }, "mysql_db_query" : { "min" : "4.0.0", "max" : null }, "mysql_dbname" : { "min" : "4.0.0", "max" : null }, "mysql_drop_db" : { "min" : "4.0.0", "max" : null }, "mysql_errno" : { "min" : "4.0.0", "max" : null }, "mysql_error" : { "min" : "4.0.0", "max" : null }, "mysql_escape_string" : { "min" : "4.0.3", "max" : null }, "mysql_fetch_array" : { "min" : "4.0.0", "max" : null }, "mysql_fetch_assoc" : { "min" : "4.0.3", "max" : null }, "mysql_fetch_field" : { "min" : "4.0.0", "max" : null }, "mysql_fetch_lengths" : { "min" : "4.0.0", "max" : null }, "mysql_fetch_object" : { "min" : "4.0.0", "max" : null }, "mysql_fetch_row" : { "min" : "4.0.0", "max" : null }, "mysql_field_flags" : { "min" : "4.0.0", "max" : null }, "mysql_field_len" : { "min" : "4.0.0", "max" : null }, "mysql_field_name" : { "min" : "4.0.0", "max" : null }, "mysql_field_seek" : { "min" : "4.0.0", "max" : null }, "mysql_field_table" : { "min" : "4.0.0", "max" : null }, "mysql_field_type" : { "min" : "4.0.0", "max" : null }, "mysql_fieldflags" : { "min" : "4.0.0", "max" : null }, "mysql_fieldlen" : { "min" : "4.0.0", "max" : null }, "mysql_fieldname" : { "min" : "4.0.0", "max" : null }, "mysql_fieldtable" : { "min" : "4.0.0", "max" : null }, "mysql_fieldtype" : { "min" : "4.0.0", "max" : null }, "mysql_free_result" : { "min" : "4.0.0", "max" : null }, "mysql_freeresult" : { "min" : "4.0.0", "max" : null }, "mysql_get_client_info" : { "min" : "4.0.5", "max" : null }, "mysql_get_host_info" : { "min" : "4.0.5", "max" : null }, "mysql_get_proto_info" : { "min" : "4.0.5", "max" : null }, "mysql_get_server_info" : { "min" : "4.0.5", "max" : null }, "mysql_info" : { "min" : "4.3.0", "max" : null }, "mysql_insert_id" : { "min" : "4.0.0", "max" : null }, "mysql_list_dbs" : { "min" : "4.0.0", "max" : null }, "mysql_list_fields" : { "min" : "4.0.0", "max" : null }, "mysql_list_processes" : { "min" : "4.3.0", "max" : null }, "mysql_list_tables" : { "min" : "4.0.0", "max" : null }, "mysql_listdbs" : { "min" : "4.0.0", "max" : null }, "mysql_listfields" : { "min" : "4.0.0", "max" : null }, "mysql_listtables" : { "min" : "4.0.0", "max" : null }, "mysql_num_fields" : { "min" : "4.0.0", "max" : null }, "mysql_num_rows" : { "min" : "4.0.0", "max" : null }, "mysql_numfields" : { "min" : "4.0.0", "max" : null }, "mysql_numrows" : { "min" : "4.0.0", "max" : null }, "mysql_pconnect" : { "min" : "4.0.0", "max" : null }, "mysql_ping" : { "min" : "4.3.0", "max" : null }, "mysql_query" : { "min" : "4.0.0", "max" : null }, "mysql_real_escape_string" : { "min" : "4.3.0", "max" : null }, "mysql_result" : { "min" : "4.0.0", "max" : null }, "mysql_select_db" : { "min" : "4.0.0", "max" : null }, "mysql_selectdb" : { "min" : "4.0.0", "max" : null }, "mysql_set_charset" : { "min" : "5.2.3", "max" : null }, "mysql_stat" : { "min" : "4.3.0", "max" : null }, "mysql_table_name" : { "min" : "4.0.0", "max" : null }, "mysql_tablename" : { "min" : "4.0.0", "max" : null }, "mysql_thread_id" : { "min" : "4.3.0", "max" : null }, "mysql_unbuffered_query" : { "min" : "4.0.6", "max" : null }, "mysqli_affected_rows" : { "min" : "5.0.0", "max" : null }, "mysqli_autocommit" : { "min" : "5.0.0", "max" : null }, "mysqli_begin_transaction" : { "min" : "5.5.0", "max" : null }, "mysqli_bind_param" : { "min" : "5.0.0", "max" : "5.3.28" }, "mysqli_bind_result" : { "min" : "5.0.0", "max" : "5.3.28" }, "mysqli_change_user" : { "min" : "5.0.0", "max" : null }, "mysqli_character_set_name" : { "min" : "5.0.0", "max" : null }, "mysqli_client_encoding" : { "min" : "5.0.0", "max" : "5.3.28" }, "mysqli_close" : { "min" : "5.0.0", "max" : null }, "mysqli_commit" : { "min" : "5.0.0", "max" : null }, "mysqli_connect" : { "min" : "5.0.0", "max" : null }, "mysqli_connect_errno" : { "min" : "5.0.0", "max" : null }, "mysqli_connect_error" : { "min" : "5.0.0", "max" : null }, "mysqli_data_seek" : { "min" : "5.0.0", "max" : null }, "mysqli_debug" : { "min" : "5.0.0", "max" : null }, "mysqli_disable_reads_from_master" : { "min" : "5.0.0", "max" : "5.2.17" }, "mysqli_disable_rpl_parse" : { "min" : "5.0.0", "max" : "5.2.17" }, "mysqli_dump_debug_info" : { "min" : "5.0.0", "max" : null }, "mysqli_embedded_server_end" : { "min" : "5.0.0", "max" : null }, "mysqli_embedded_server_start" : { "min" : "5.0.0", "max" : null }, "mysqli_enable_reads_from_master" : { "min" : "5.0.0", "max" : "5.2.17" }, "mysqli_enable_rpl_parse" : { "min" : "5.0.0", "max" : "5.2.17" }, "mysqli_errno" : { "min" : "5.0.0", "max" : null }, "mysqli_error" : { "min" : "5.0.0", "max" : null }, "mysqli_error_list" : { "min" : "5.4.0", "max" : null }, "mysqli_escape_string" : { "min" : "5.0.0", "max" : null }, "mysqli_execute" : { "min" : "5.0.0", "max" : null }, "mysqli_fetch" : { "min" : "5.0.0", "max" : "5.3.28" }, "mysqli_fetch_all" : { "min" : "5.0.0", "max" : null }, "mysqli_fetch_array" : { "min" : "5.0.0", "max" : null }, "mysqli_fetch_assoc" : { "min" : "5.0.0", "max" : null }, "mysqli_fetch_field" : { "min" : "5.0.0", "max" : null }, "mysqli_fetch_field_direct" : { "min" : "5.0.0", "max" : null }, "mysqli_fetch_fields" : { "min" : "5.0.0", "max" : null }, "mysqli_fetch_lengths" : { "min" : "5.0.0", "max" : null }, "mysqli_fetch_object" : { "min" : "5.0.0", "max" : null }, "mysqli_fetch_row" : { "min" : "5.0.0", "max" : null }, "mysqli_field_count" : { "min" : "5.0.0", "max" : null }, "mysqli_field_seek" : { "min" : "5.0.0", "max" : null }, "mysqli_field_tell" : { "min" : "5.0.0", "max" : null }, "mysqli_free_result" : { "min" : "5.0.0", "max" : null }, "mysqli_get_cache_stats" : { "min" : "5.0.0", "max" : null }, "mysqli_get_charset" : { "min" : "5.0.0", "max" : null }, "mysqli_get_client_info" : { "min" : "5.0.0", "max" : null }, "mysqli_get_client_stats" : { "min" : "5.0.0", "max" : null }, "mysqli_get_client_version" : { "min" : "5.0.0", "max" : null }, "mysqli_get_connection_stats" : { "min" : "5.0.0", "max" : null }, "mysqli_get_host_info" : { "min" : "5.0.0", "max" : null }, "mysqli_get_metadata" : { "min" : "5.0.0", "max" : "5.3.28" }, "mysqli_get_proto_info" : { "min" : "5.0.0", "max" : null }, "mysqli_get_server_info" : { "min" : "5.0.0", "max" : null }, "mysqli_get_server_version" : { "min" : "5.0.0", "max" : null }, "mysqli_get_warnings" : { "min" : "5.0.0", "max" : null }, "mysqli_info" : { "min" : "5.0.0", "max" : null }, "mysqli_init" : { "min" : "5.0.0", "max" : null }, "mysqli_insert_id" : { "min" : "5.0.0", "max" : null }, "mysqli_kill" : { "min" : "5.0.0", "max" : null }, "mysqli_master_query" : { "min" : "5.0.0", "max" : "5.2.17" }, "mysqli_more_results" : { "min" : "5.0.0", "max" : null }, "mysqli_multi_query" : { "min" : "5.0.0", "max" : null }, "mysqli_next_result" : { "min" : "5.0.0", "max" : null }, "mysqli_num_fields" : { "min" : "5.0.0", "max" : null }, "mysqli_num_rows" : { "min" : "5.0.0", "max" : null }, "mysqli_options" : { "min" : "5.0.0", "max" : null }, "mysqli_param_count" : { "min" : "5.0.0", "max" : "5.3.28" }, "mysqli_ping" : { "min" : "5.0.0", "max" : null }, "mysqli_poll" : { "min" : "5.0.0", "max" : null }, "mysqli_prepare" : { "min" : "5.0.0", "max" : null }, "mysqli_query" : { "min" : "5.0.0", "max" : null }, "mysqli_real_connect" : { "min" : "5.0.0", "max" : null }, "mysqli_real_escape_string" : { "min" : "5.0.0", "max" : null }, "mysqli_real_query" : { "min" : "5.0.0", "max" : null }, "mysqli_reap_async_query" : { "min" : "5.0.0", "max" : null }, "mysqli_refresh" : { "min" : "5.3.0", "max" : null }, "mysqli_release_savepoint" : { "min" : "5.5.0", "max" : null }, "mysqli_report" : { "min" : "5.0.0", "max" : null }, "mysqli_rollback" : { "min" : "5.0.0", "max" : null }, "mysqli_rpl_parse_enabled" : { "min" : "5.0.0", "max" : "5.2.17" }, "mysqli_rpl_probe" : { "min" : "5.0.0", "max" : "5.2.17" }, "mysqli_rpl_query_type" : { "min" : "5.0.0", "max" : "5.2.17" }, "mysqli_savepoint" : { "min" : "5.5.0", "max" : null }, "mysqli_select_db" : { "min" : "5.0.0", "max" : null }, "mysqli_send_long_data" : { "min" : "5.0.0", "max" : "5.3.28" }, "mysqli_send_query" : { "min" : "5.0.0", "max" : "5.2.17" }, "mysqli_set_charset" : { "min" : "5.0.0", "max" : null }, "mysqli_set_local_infile_default" : { "min" : "5.0.0", "max" : null }, "mysqli_set_local_infile_handler" : { "min" : "5.0.0", "max" : null }, "mysqli_set_opt" : { "min" : "5.0.0", "max" : null }, "mysqli_slave_query" : { "min" : "5.0.0", "max" : "5.2.17" }, "mysqli_sqlstate" : { "min" : "5.0.0", "max" : null }, "mysqli_ssl_set" : { "min" : "5.0.0", "max" : null }, "mysqli_stat" : { "min" : "5.0.0", "max" : null }, "mysqli_stmt_affected_rows" : { "min" : "5.0.0", "max" : null }, "mysqli_stmt_attr_get" : { "min" : "5.0.0", "max" : null }, "mysqli_stmt_attr_set" : { "min" : "5.0.0", "max" : null }, "mysqli_stmt_bind_param" : { "min" : "5.0.0", "max" : null }, "mysqli_stmt_bind_result" : { "min" : "5.0.0", "max" : null }, "mysqli_stmt_close" : { "min" : "5.0.0", "max" : null }, "mysqli_stmt_data_seek" : { "min" : "5.0.0", "max" : null }, "mysqli_stmt_errno" : { "min" : "5.0.0", "max" : null }, "mysqli_stmt_error" : { "min" : "5.0.0", "max" : null }, "mysqli_stmt_error_list" : { "min" : "5.4.0", "max" : null }, "mysqli_stmt_execute" : { "min" : "5.0.0", "max" : null }, "mysqli_stmt_fetch" : { "min" : "5.0.0", "max" : null }, "mysqli_stmt_field_count" : { "min" : "5.0.0", "max" : null }, "mysqli_stmt_free_result" : { "min" : "5.0.0", "max" : null }, "mysqli_stmt_get_result" : { "min" : "5.0.0", "max" : null }, "mysqli_stmt_get_warnings" : { "min" : "5.0.0", "max" : null }, "mysqli_stmt_init" : { "min" : "5.0.0", "max" : null }, "mysqli_stmt_insert_id" : { "min" : "5.0.0", "max" : null }, "mysqli_stmt_more_results" : { "min" : "5.0.0", "max" : null }, "mysqli_stmt_next_result" : { "min" : "5.0.0", "max" : null }, "mysqli_stmt_num_rows" : { "min" : "5.0.0", "max" : null }, "mysqli_stmt_param_count" : { "min" : "5.0.0", "max" : null }, "mysqli_stmt_prepare" : { "min" : "5.0.0", "max" : null }, "mysqli_stmt_reset" : { "min" : "5.0.0", "max" : null }, "mysqli_stmt_result_metadata" : { "min" : "5.0.0", "max" : null }, "mysqli_stmt_send_long_data" : { "min" : "5.0.0", "max" : null }, "mysqli_stmt_sqlstate" : { "min" : "5.0.0", "max" : null }, "mysqli_stmt_store_result" : { "min" : "5.0.0", "max" : null }, "mysqli_store_result" : { "min" : "5.0.0", "max" : null }, "mysqli_thread_id" : { "min" : "5.0.0", "max" : null }, "mysqli_thread_safe" : { "min" : "5.0.0", "max" : null }, "mysqli_use_result" : { "min" : "5.0.0", "max" : null }, "mysqli_warning_count" : { "min" : "5.0.0", "max" : null }, "natcasesort" : { "min" : "4.0.0", "max" : null }, "natsort" : { "min" : "4.0.0", "max" : null }, "next" : { "min" : "4.0.0", "max" : null }, "ngettext" : { "min" : "4.2.0", "max" : null }, "nl2br" : { "min" : "4.0.0", "max" : null }, "nl_langinfo" : { "min" : "4.1.0", "max" : null }, "normalizer_is_normalized" : { "min" : "5.2.0", "max" : null }, "normalizer_normalize" : { "min" : "5.2.0", "max" : null }, "number_format" : { "min" : "4.0.0", "max" : null }, "numfmt_create" : { "min" : "5.2.0", "max" : null }, "numfmt_format" : { "min" : "5.2.0", "max" : null }, "numfmt_format_currency" : { "min" : "5.2.0", "max" : null }, "numfmt_get_attribute" : { "min" : "5.2.0", "max" : null }, "numfmt_get_error_code" : { "min" : "5.2.0", "max" : null }, "numfmt_get_error_message" : { "min" : "5.2.0", "max" : null }, "numfmt_get_locale" : { "min" : "5.2.0", "max" : null }, "numfmt_get_pattern" : { "min" : "5.2.0", "max" : null }, "numfmt_get_symbol" : { "min" : "5.2.0", "max" : null }, "numfmt_get_text_attribute" : { "min" : "5.2.0", "max" : null }, "numfmt_parse" : { "min" : "5.2.0", "max" : null }, "numfmt_parse_currency" : { "min" : "5.2.0", "max" : null }, "numfmt_set_attribute" : { "min" : "5.2.0", "max" : null }, "numfmt_set_pattern" : { "min" : "5.2.0", "max" : null }, "numfmt_set_symbol" : { "min" : "5.2.0", "max" : null }, "numfmt_set_text_attribute" : { "min" : "5.2.0", "max" : null }, "ob_clean" : { "min" : "4.2.0", "max" : null }, "ob_end_clean" : { "min" : "4.0.0", "max" : null }, "ob_end_flush" : { "min" : "4.0.0", "max" : null }, "ob_flush" : { "min" : "4.2.0", "max" : null }, "ob_get_clean" : { "min" : "4.3.0", "max" : null }, "ob_get_contents" : { "min" : "4.0.0", "max" : null }, "ob_get_flush" : { "min" : "4.3.0", "max" : null }, "ob_get_length" : { "min" : "4.0.2", "max" : null }, "ob_get_level" : { "min" : "4.2.0", "max" : null }, "ob_get_status" : { "min" : "4.2.0", "max" : null }, "ob_implicit_flush" : { "min" : "4.0.0", "max" : null }, "ob_list_handlers" : { "min" : "4.3.0", "max" : null }, "ob_start" : { "min" : "4.0.0", "max" : null }, "octdec" : { "min" : "4.0.0", "max" : null }, "opendir" : { "min" : "4.0.0", "max" : null }, "openlog" : { "min" : "4.0.0", "max" : null }, "ord" : { "min" : "4.0.0", "max" : null }, "output_add_rewrite_var" : { "min" : "4.0.0", "max" : null }, "output_reset_rewrite_vars" : { "min" : "4.3.0", "max" : null }, "pack" : { "min" : "4.0.0", "max" : null }, "parse_ini_file" : { "min" : "4.0.0", "max" : null }, "parse_ini_string" : { "min" : "5.3.0", "max" : null }, "parse_str" : { "min" : "4.0.0", "max" : null }, "parse_url" : { "min" : "4.0.0", "max" : null }, "passthru" : { "min" : "4.0.0", "max" : null }, "password_get_info" : { "min" : "5.5.0", "max" : null }, "password_hash" : { "min" : "5.5.0", "max" : null }, "password_needs_rehash" : { "min" : "5.5.0", "max" : null }, "password_verify" : { "min" : "5.5.0", "max" : null }, "pathinfo" : { "min" : "4.0.3", "max" : null }, "pclose" : { "min" : "4.0.0", "max" : null }, "pcntl_alarm" : { "min" : "4.3.0", "max" : null }, "pcntl_errno" : { "min" : "5.3.4", "max" : null }, "pcntl_exec" : { "min" : "4.2.0", "max" : null }, "pcntl_fork" : { "min" : "4.1.0", "max" : null }, "pcntl_get_last_error" : { "min" : "5.3.4", "max" : null }, "pcntl_getpriority" : { "min" : "5.0.0", "max" : null }, "pcntl_setpriority" : { "min" : "5.0.0", "max" : null }, "pcntl_signal" : { "min" : "4.1.0", "max" : null }, "pcntl_signal_dispatch" : { "min" : "5.3.0", "max" : null }, "pcntl_sigprocmask" : { "min" : "5.3.0", "max" : null }, "pcntl_sigtimedwait" : { "min" : "5.3.0", "max" : null }, "pcntl_sigwaitinfo" : { "min" : "5.3.0", "max" : null }, "pcntl_strerror" : { "min" : "5.3.4", "max" : null }, "pcntl_wait" : { "min" : "5.0.0", "max" : null }, "pcntl_waitpid" : { "min" : "4.1.0", "max" : null }, "pcntl_wexitstatus" : { "min" : "4.1.0", "max" : null }, "pcntl_wifexited" : { "min" : "4.1.0", "max" : null }, "pcntl_wifsignaled" : { "min" : "4.1.0", "max" : null }, "pcntl_wifstopped" : { "min" : "4.1.0", "max" : null }, "pcntl_wstopsig" : { "min" : "4.1.0", "max" : null }, "pcntl_wtermsig" : { "min" : "4.1.0", "max" : null }, "pdo_drivers" : { "min" : "5.1.0", "max" : null }, "pfsockopen" : { "min" : "4.0.0", "max" : null }, "php_check_syntax" : { "min" : "5.0.0", "max" : "5.0.4" }, "php_egg_logo_guid" : { "min" : "4.0.3", "max" : "5.4.30RC1" }, "php_ini_loaded_file" : { "min" : "5.2.4", "max" : null }, "php_ini_scanned_files" : { "min" : "4.3.0", "max" : null }, "php_logo_guid" : { "min" : "4.0.0", "max" : "5.4.30RC1" }, "php_real_logo_guid" : { "min" : "4.0.0", "max" : "5.4.30RC1" }, "php_sapi_name" : { "min" : "4.0.1", "max" : null }, "php_strip_whitespace" : { "min" : "5.0.0", "max" : null }, "php_uname" : { "min" : "4.0.2", "max" : null }, "phpcredits" : { "min" : "4.0.0", "max" : null }, "phpinfo" : { "min" : "4.0.0", "max" : null }, "phpversion" : { "min" : "4.0.0", "max" : null }, "pi" : { "min" : "4.0.0", "max" : null }, "png2wbmp" : { "min" : "4.0.5", "max" : null }, "popen" : { "min" : "4.0.0", "max" : null }, "pos" : { "min" : "4.0.0", "max" : null }, "posix_access" : { "min" : "5.1.0", "max" : null }, "posix_ctermid" : { "min" : "4.0.0", "max" : null }, "posix_errno" : { "min" : "4.2.0", "max" : null }, "posix_get_last_error" : { "min" : "4.2.0", "max" : null }, "posix_getcwd" : { "min" : "4.0.0", "max" : null }, "posix_getegid" : { "min" : "4.0.0", "max" : null }, "posix_geteuid" : { "min" : "4.0.0", "max" : null }, "posix_getgid" : { "min" : "4.0.0", "max" : null }, "posix_getgrgid" : { "min" : "4.0.0", "max" : null }, "posix_getgrnam" : { "min" : "4.0.0", "max" : null }, "posix_getgroups" : { "min" : "4.0.0", "max" : null }, "posix_getlogin" : { "min" : "4.0.0", "max" : null }, "posix_getpgid" : { "min" : "4.0.0", "max" : null }, "posix_getpgrp" : { "min" : "4.0.0", "max" : null }, "posix_getpid" : { "min" : "4.0.0", "max" : null }, "posix_getppid" : { "min" : "4.0.0", "max" : null }, "posix_getpwnam" : { "min" : "4.0.0", "max" : null }, "posix_getpwuid" : { "min" : "4.0.0", "max" : null }, "posix_getrlimit" : { "min" : "4.0.0", "max" : null }, "posix_getsid" : { "min" : "4.0.0", "max" : null }, "posix_getuid" : { "min" : "4.0.0", "max" : null }, "posix_initgroups" : { "min" : "5.2.0", "max" : null }, "posix_isatty" : { "min" : "4.0.0", "max" : null }, "posix_kill" : { "min" : "4.0.0", "max" : null }, "posix_mkfifo" : { "min" : "4.0.0", "max" : null }, "posix_mknod" : { "min" : "5.1.0", "max" : null }, "posix_setegid" : { "min" : "4.0.2", "max" : null }, "posix_seteuid" : { "min" : "4.0.2", "max" : null }, "posix_setgid" : { "min" : "4.0.0", "max" : null }, "posix_setpgid" : { "min" : "4.0.0", "max" : null }, "posix_setsid" : { "min" : "4.0.0", "max" : null }, "posix_setuid" : { "min" : "4.0.0", "max" : null }, "posix_strerror" : { "min" : "4.2.0", "max" : null }, "posix_times" : { "min" : "4.0.0", "max" : null }, "posix_ttyname" : { "min" : "4.0.0", "max" : null }, "posix_uname" : { "min" : "4.0.0", "max" : null }, "pow" : { "min" : "4.0.0", "max" : null }, "preg_filter" : { "min" : "5.3.0", "max" : null }, "preg_grep" : { "min" : "4.0.0", "max" : null }, "preg_last_error" : { "min" : "5.2.0", "max" : null }, "preg_match" : { "min" : "4.0.0", "max" : null }, "preg_match_all" : { "min" : "4.0.0", "max" : null }, "preg_quote" : { "min" : "4.0.0", "max" : null }, "preg_replace" : { "min" : "4.0.0", "max" : null }, "preg_replace_callback" : { "min" : "4.0.5", "max" : null }, "preg_split" : { "min" : "4.0.0", "max" : null }, "prev" : { "min" : "4.0.0", "max" : null }, "print_r" : { "min" : "4.0.0", "max" : null }, "printf" : { "min" : "4.0.0", "max" : null }, "proc_close" : { "min" : "4.3.0", "max" : null }, "proc_get_status" : { "min" : "5.0.0", "max" : null }, "proc_nice" : { "min" : "5.0.0", "max" : null }, "proc_open" : { "min" : "4.3.0", "max" : null }, "proc_terminate" : { "min" : "5.0.0", "max" : null }, "property_exists" : { "min" : "5.1.0", "max" : null }, "putenv" : { "min" : "4.0.0", "max" : null }, "quoted_printable_decode" : { "min" : "4.0.0", "max" : null }, "quoted_printable_encode" : { "min" : "5.3.0", "max" : null }, "quotemeta" : { "min" : "4.0.0", "max" : null }, "rad2deg" : { "min" : "4.0.0", "max" : null }, "rand" : { "min" : "4.0.0", "max" : null }, "range" : { "min" : "4.0.0", "max" : null }, "rawurldecode" : { "min" : "4.0.0", "max" : null }, "rawurlencode" : { "min" : "4.0.0", "max" : null }, "readdir" : { "min" : "4.0.0", "max" : null }, "readfile" : { "min" : "4.0.0", "max" : null }, "readlink" : { "min" : "4.0.0", "max" : null }, "realpath" : { "min" : "4.0.0", "max" : null }, "realpath_cache_get" : { "min" : "5.3.2", "max" : null }, "realpath_cache_size" : { "min" : "5.3.2", "max" : null }, "register_shutdown_function" : { "min" : "4.0.0", "max" : null }, "register_tick_function" : { "min" : "4.0.3", "max" : null }, "rename" : { "min" : "4.0.0", "max" : null }, "reset" : { "min" : "4.0.0", "max" : null }, "resourcebundle_count" : { "min" : "5.2.4", "max" : null }, "resourcebundle_create" : { "min" : "5.2.4", "max" : null }, "resourcebundle_get" : { "min" : "5.2.4", "max" : null }, "resourcebundle_get_error_code" : { "min" : "5.2.4", "max" : null }, "resourcebundle_get_error_message" : { "min" : "5.2.4", "max" : null }, "resourcebundle_locales" : { "min" : "5.2.4", "max" : null }, "restore_error_handler" : { "min" : "4.0.1", "max" : null }, "restore_exception_handler" : { "min" : "5.0.0", "max" : null }, "restore_include_path" : { "min" : "4.3.0", "max" : null }, "rewind" : { "min" : "4.0.0", "max" : null }, "rewinddir" : { "min" : "4.0.0", "max" : null }, "rmdir" : { "min" : "4.0.0", "max" : null }, "round" : { "min" : "4.0.0", "max" : null }, "rsort" : { "min" : "4.0.0", "max" : null }, "rtrim" : { "min" : "4.0.0", "max" : null }, "scandir" : { "min" : "5.0.0", "max" : null }, "serialize" : { "min" : "4.0.0", "max" : null }, "set_error_handler" : { "min" : "4.0.1", "max" : null }, "set_exception_handler" : { "min" : "5.0.0", "max" : null }, "set_file_buffer" : { "min" : "4.0.0", "max" : null }, "set_include_path" : { "min" : "4.3.0", "max" : null }, "set_magic_quotes_runtime" : { "min" : "4.0.0", "max" : null }, "set_socket_blocking" : { "min" : "4.0.0", "max" : null }, "set_time_limit" : { "min" : "4.0.0", "max" : null }, "setcookie" : { "min" : "4.0.0", "max" : null }, "setlocale" : { "min" : "4.0.0", "max" : null }, "setrawcookie" : { "min" : "5.0.0", "max" : null }, "settype" : { "min" : "4.0.0", "max" : null }, "sha1" : { "min" : "4.3.0", "max" : null }, "sha1_file" : { "min" : "4.3.0", "max" : null }, "shell_exec" : { "min" : "4.0.0", "max" : null }, "show_source" : { "min" : "4.0.0", "max" : null }, "shuffle" : { "min" : "4.0.0", "max" : null }, "similar_text" : { "min" : "4.0.0", "max" : null }, "simplexml_import_dom" : { "min" : "5.0.0", "max" : null }, "simplexml_load_file" : { "min" : "5.0.0", "max" : null }, "simplexml_load_string" : { "min" : "5.0.0", "max" : null }, "sin" : { "min" : "4.0.0", "max" : null }, "sinh" : { "min" : "4.0.7", "max" : null }, "sizeof" : { "min" : "4.0.0", "max" : null }, "sleep" : { "min" : "4.0.0", "max" : null }, "socket_get_status" : { "min" : "4.0.0", "max" : null }, "socket_set_blocking" : { "min" : "4.0.0", "max" : null }, "socket_set_timeout" : { "min" : "4.0.0", "max" : null }, "sort" : { "min" : "4.0.0", "max" : null }, "soundex" : { "min" : "4.0.0", "max" : null }, "spl_autoload" : { "min" : "5.1.2", "max" : null }, "spl_autoload_call" : { "min" : "5.1.2", "max" : null }, "spl_autoload_extensions" : { "min" : "5.1.2", "max" : null }, "spl_autoload_functions" : { "min" : "5.1.2", "max" : null }, "spl_autoload_register" : { "min" : "5.1.2", "max" : null }, "spl_autoload_unregister" : { "min" : "5.1.2", "max" : null }, "spl_classes" : { "min" : "5.0.0", "max" : null }, "spl_object_hash" : { "min" : "5.2.0", "max" : null }, "sprintf" : { "min" : "4.0.0", "max" : null }, "sqrt" : { "min" : "4.0.0", "max" : null }, "srand" : { "min" : "4.0.0", "max" : null }, "sscanf" : { "min" : "4.0.1", "max" : null }, "stat" : { "min" : "4.0.0", "max" : null }, "str_getcsv" : { "min" : "5.3.0", "max" : null }, "str_ireplace" : { "min" : "5.0.0", "max" : null }, "str_pad" : { "min" : "4.0.1", "max" : null }, "str_repeat" : { "min" : "4.0.0", "max" : null }, "str_replace" : { "min" : "4.0.0", "max" : null }, "str_rot13" : { "min" : "4.2.0", "max" : null }, "str_shuffle" : { "min" : "4.3.0", "max" : null }, "str_split" : { "min" : "5.0.0", "max" : null }, "str_word_count" : { "min" : "4.3.0", "max" : null }, "strcasecmp" : { "min" : "4.0.0", "max" : null }, "strchr" : { "min" : "4.0.0", "max" : null }, "strcmp" : { "min" : "4.0.0", "max" : null }, "strcoll" : { "min" : "4.0.5", "max" : null }, "strcspn" : { "min" : "4.0.0", "max" : null }, "stream_bucket_append" : { "min" : "5.0.0", "max" : null }, "stream_bucket_make_writeable" : { "min" : "5.0.0", "max" : null }, "stream_bucket_new" : { "min" : "5.0.0", "max" : null }, "stream_bucket_prepend" : { "min" : "5.0.0", "max" : null }, "stream_context_create" : { "min" : "4.3.0", "max" : null }, "stream_context_get_default" : { "min" : "5.1.0", "max" : null }, "stream_context_get_options" : { "min" : "4.3.0", "max" : null }, "stream_context_get_params" : { "min" : "5.3.0", "max" : null }, "stream_context_set_default" : { "min" : "5.3.0", "max" : null }, "stream_context_set_option" : { "min" : "4.3.0", "max" : null }, "stream_context_set_params" : { "min" : "4.3.0", "max" : null }, "stream_copy_to_stream" : { "min" : "5.0.0", "max" : null }, "stream_filter_append" : { "min" : "4.3.0", "max" : null }, "stream_filter_prepend" : { "min" : "4.3.0", "max" : null }, "stream_filter_register" : { "min" : "5.0.0", "max" : null }, "stream_filter_remove" : { "min" : "5.1.0", "max" : null }, "stream_get_contents" : { "min" : "5.0.0", "max" : null }, "stream_get_filters" : { "min" : "5.0.0", "max" : null }, "stream_get_line" : { "min" : "5.0.0", "max" : null }, "stream_get_meta_data" : { "min" : "4.3.0", "max" : null }, "stream_get_transports" : { "min" : "5.0.0", "max" : null }, "stream_get_wrappers" : { "min" : "5.0.0", "max" : null }, "stream_is_local" : { "min" : "5.2.4", "max" : null }, "stream_register_wrapper" : { "min" : "4.3.0", "max" : null }, "stream_resolve_include_path" : { "min" : "5.3.2", "max" : null }, "stream_select" : { "min" : "4.3.0", "max" : null }, "stream_set_blocking" : { "min" : "4.3.0", "max" : null }, "stream_set_chunk_size" : { "min" : "5.4.0", "max" : null }, "stream_set_read_buffer" : { "min" : "5.3.3", "max" : null }, "stream_set_timeout" : { "min" : "4.3.0", "max" : null }, "stream_set_write_buffer" : { "min" : "4.3.0", "max" : null }, "stream_socket_accept" : { "min" : "5.0.0", "max" : null }, "stream_socket_client" : { "min" : "5.0.0", "max" : null }, "stream_socket_enable_crypto" : { "min" : "5.1.0", "max" : null }, "stream_socket_get_name" : { "min" : "5.0.0", "max" : null }, "stream_socket_pair" : { "min" : "5.1.0", "max" : null }, "stream_socket_recvfrom" : { "min" : "5.0.0", "max" : null }, "stream_socket_sendto" : { "min" : "5.0.0", "max" : null }, "stream_socket_server" : { "min" : "5.0.0", "max" : null }, "stream_socket_shutdown" : { "min" : "5.2.1", "max" : null }, "stream_supports_lock" : { "min" : "5.3.0", "max" : null }, "stream_wrapper_register" : { "min" : "4.3.2", "max" : null }, "stream_wrapper_restore" : { "min" : "5.1.0", "max" : null }, "stream_wrapper_unregister" : { "min" : "5.1.0", "max" : null }, "strftime" : { "min" : "4.0.0", "max" : null }, "strip_tags" : { "min" : "4.0.0", "max" : null }, "stripcslashes" : { "min" : "4.0.0", "max" : null }, "stripos" : { "min" : "5.0.0", "max" : null }, "stripslashes" : { "min" : "4.0.0", "max" : null }, "stristr" : { "min" : "4.0.0", "max" : null }, "strlen" : { "min" : "4.0.0", "max" : null }, "strnatcasecmp" : { "min" : "4.0.0", "max" : null }, "strnatcmp" : { "min" : "4.0.0", "max" : null }, "strncasecmp" : { "min" : "4.0.2", "max" : null }, "strncmp" : { "min" : "4.0.0", "max" : null }, "strpbrk" : { "min" : "5.0.0", "max" : null }, "strpos" : { "min" : "4.0.0", "max" : null }, "strptime" : { "min" : "5.1.0", "max" : null }, "strrchr" : { "min" : "4.0.0", "max" : null }, "strrev" : { "min" : "4.0.0", "max" : null }, "strripos" : { "min" : "5.0.0", "max" : null }, "strrpos" : { "min" : "4.0.0", "max" : null }, "strspn" : { "min" : "4.0.0", "max" : null }, "strstr" : { "min" : "4.0.0", "max" : null }, "strtok" : { "min" : "4.0.0", "max" : null }, "strtolower" : { "min" : "4.0.0", "max" : null }, "strtotime" : { "min" : "4.0.0", "max" : null }, "strtoupper" : { "min" : "4.0.0", "max" : null }, "strtr" : { "min" : "4.0.0", "max" : null }, "strval" : { "min" : "4.0.0", "max" : null }, "substr" : { "min" : "4.0.0", "max" : null }, "substr_compare" : { "min" : "5.0.0", "max" : null }, "substr_count" : { "min" : "4.0.0", "max" : null }, "substr_replace" : { "min" : "4.0.0", "max" : null }, "symlink" : { "min" : "4.0.0", "max" : null }, "sys_get_temp_dir" : { "min" : "5.2.1", "max" : null }, "sys_getloadavg" : { "min" : "5.1.3", "max" : null }, "syslog" : { "min" : "4.0.0", "max" : null }, "system" : { "min" : "4.0.0", "max" : null }, "tan" : { "min" : "4.0.0", "max" : null }, "tanh" : { "min" : "4.0.0", "max" : null }, "tempnam" : { "min" : "4.0.0", "max" : null }, "textdomain" : { "min" : "4.0.0", "max" : null }, "time" : { "min" : "4.0.0", "max" : null }, "time_nanosleep" : { "min" : "5.0.0", "max" : null }, "time_sleep_until" : { "min" : "5.1.0", "max" : null }, "timezone_abbreviations_list" : { "min" : "5.1.0", "max" : null }, "timezone_identifiers_list" : { "min" : "5.1.0", "max" : null }, "timezone_location_get" : { "min" : "5.3.0", "max" : null }, "timezone_name_from_abbr" : { "min" : "5.1.3", "max" : null }, "timezone_name_get" : { "min" : "5.1.0", "max" : null }, "timezone_offset_get" : { "min" : "5.1.0", "max" : null }, "timezone_open" : { "min" : "5.1.0", "max" : null }, "timezone_transitions_get" : { "min" : "5.2.0", "max" : null }, "timezone_version_get" : { "min" : "5.3.0", "max" : null }, "tmpfile" : { "min" : "4.0.0", "max" : null }, "touch" : { "min" : "4.0.0", "max" : null }, "trait_exists" : { "min" : "5.4.0", "max" : null }, "transliterator_create" : { "min" : "5.4.0", "max" : null }, "transliterator_create_from_rules" : { "min" : "5.4.0", "max" : null }, "transliterator_create_inverse" : { "min" : "5.4.0", "max" : null }, "transliterator_get_error_code" : { "min" : "5.4.0", "max" : null }, "transliterator_get_error_message" : { "min" : "5.4.0", "max" : null }, "transliterator_list_ids" : { "min" : "5.4.0", "max" : null }, "transliterator_transliterate" : { "min" : "5.4.0", "max" : null }, "trigger_error" : { "min" : "4.0.1", "max" : null }, "trim" : { "min" : "4.0.0", "max" : null }, "uasort" : { "min" : "4.0.0", "max" : null }, "ucfirst" : { "min" : "4.0.0", "max" : null }, "ucwords" : { "min" : "4.0.0", "max" : null }, "uksort" : { "min" : "4.0.0", "max" : null }, "umask" : { "min" : "4.0.0", "max" : null }, "uniqid" : { "min" : "4.0.0", "max" : null }, "unlink" : { "min" : "4.0.0", "max" : null }, "unpack" : { "min" : "4.0.0", "max" : null }, "unregister_tick_function" : { "min" : "4.0.3", "max" : null }, "unserialize" : { "min" : "4.0.0", "max" : null }, "urldecode" : { "min" : "4.0.0", "max" : null }, "urlencode" : { "min" : "4.0.0", "max" : null }, "user_error" : { "min" : "4.0.0", "max" : null }, "usleep" : { "min" : "4.0.0", "max" : null }, "usort" : { "min" : "4.0.0", "max" : null }, "utf8_decode" : { "min" : "4.0.0", "max" : null }, "utf8_encode" : { "min" : "4.0.0", "max" : null }, "var_dump" : { "min" : "4.0.0", "max" : null }, "var_export" : { "min" : "4.2.0", "max" : null }, "version_compare" : { "min" : "4.0.7", "max" : null }, "vfprintf" : { "min" : "5.0.0", "max" : null }, "vprintf" : { "min" : "4.0.7", "max" : null }, "vsprintf" : { "min" : "4.0.7", "max" : null }, "wordwrap" : { "min" : "4.0.2", "max" : null }, "xml_error_string" : { "min" : "4.0.0", "max" : null }, "xml_get_current_byte_index" : { "min" : "4.0.0", "max" : null }, "xml_get_current_column_number" : { "min" : "4.0.0", "max" : null }, "xml_get_current_line_number" : { "min" : "4.0.0", "max" : null }, "xml_get_error_code" : { "min" : "4.0.0", "max" : null }, "xml_parse" : { "min" : "4.0.0", "max" : null }, "xml_parse_into_struct" : { "min" : "4.0.0", "max" : null }, "xml_parser_create" : { "min" : "4.0.0", "max" : null }, "xml_parser_create_ns" : { "min" : "4.0.5", "max" : null }, "xml_parser_free" : { "min" : "4.0.0", "max" : null }, "xml_parser_get_option" : { "min" : "4.0.0", "max" : null }, "xml_parser_set_option" : { "min" : "4.0.0", "max" : null }, "xml_set_character_data_handler" : { "min" : "4.0.0", "max" : null }, "xml_set_default_handler" : { "min" : "4.0.0", "max" : null }, "xml_set_element_handler" : { "min" : "4.0.0", "max" : null }, "xml_set_end_namespace_decl_handler" : { "min" : "4.0.5", "max" : null }, "xml_set_external_entity_ref_handler" : { "min" : "4.0.0", "max" : null }, "xml_set_notation_decl_handler" : { "min" : "4.0.0", "max" : null }, "xml_set_object" : { "min" : "4.0.0", "max" : null }, "xml_set_processing_instruction_handler" : { "min" : "4.0.0", "max" : null }, "xml_set_start_namespace_decl_handler" : { "min" : "4.0.5", "max" : null }, "xml_set_unparsed_entity_decl_handler" : { "min" : "4.0.0", "max" : null }, "xmlwriter_end_attribute" : { "min" : "5.1.2", "max" : null }, "xmlwriter_end_cdata" : { "min" : "5.1.2", "max" : null }, "xmlwriter_end_comment" : { "min" : "5.1.2", "max" : null }, "xmlwriter_end_document" : { "min" : "5.1.2", "max" : null }, "xmlwriter_end_dtd" : { "min" : "5.1.2", "max" : null }, "xmlwriter_end_dtd_attlist" : { "min" : "5.1.2", "max" : null }, "xmlwriter_end_dtd_element" : { "min" : "5.1.2", "max" : null }, "xmlwriter_end_dtd_entity" : { "min" : "5.1.2", "max" : null }, "xmlwriter_end_element" : { "min" : "5.1.2", "max" : null }, "xmlwriter_end_pi" : { "min" : "5.1.2", "max" : null }, "xmlwriter_flush" : { "min" : "5.1.2", "max" : null }, "xmlwriter_full_end_element" : { "min" : "5.2.0", "max" : null }, "xmlwriter_open_memory" : { "min" : "5.1.2", "max" : null }, "xmlwriter_open_uri" : { "min" : "5.1.2", "max" : null }, "xmlwriter_output_memory" : { "min" : "5.1.2", "max" : null }, "xmlwriter_set_indent" : { "min" : "5.1.2", "max" : null }, "xmlwriter_set_indent_string" : { "min" : "5.1.2", "max" : null }, "xmlwriter_start_attribute" : { "min" : "5.1.2", "max" : null }, "xmlwriter_start_attribute_ns" : { "min" : "5.1.2", "max" : null }, "xmlwriter_start_cdata" : { "min" : "5.1.2", "max" : null }, "xmlwriter_start_comment" : { "min" : "5.1.2", "max" : null }, "xmlwriter_start_document" : { "min" : "5.1.2", "max" : null }, "xmlwriter_start_dtd" : { "min" : "5.1.2", "max" : null }, "xmlwriter_start_dtd_attlist" : { "min" : "5.1.2", "max" : null }, "xmlwriter_start_dtd_element" : { "min" : "5.1.2", "max" : null }, "xmlwriter_start_dtd_entity" : { "min" : "5.1.2", "max" : null }, "xmlwriter_start_element" : { "min" : "5.1.2", "max" : null }, "xmlwriter_start_element_ns" : { "min" : "5.1.2", "max" : null }, "xmlwriter_start_pi" : { "min" : "5.1.2", "max" : null }, "xmlwriter_text" : { "min" : "5.1.2", "max" : null }, "xmlwriter_write_attribute" : { "min" : "5.1.2", "max" : null }, "xmlwriter_write_attribute_ns" : { "min" : "5.1.2", "max" : null }, "xmlwriter_write_cdata" : { "min" : "5.1.2", "max" : null }, "xmlwriter_write_comment" : { "min" : "5.1.2", "max" : null }, "xmlwriter_write_dtd" : { "min" : "5.1.2", "max" : null }, "xmlwriter_write_dtd_attlist" : { "min" : "5.1.2", "max" : null }, "xmlwriter_write_dtd_element" : { "min" : "5.1.2", "max" : null }, "xmlwriter_write_dtd_entity" : { "min" : "5.1.2", "max" : null }, "xmlwriter_write_element" : { "min" : "5.1.2", "max" : null }, "xmlwriter_write_element_ns" : { "min" : "5.1.2", "max" : null }, "xmlwriter_write_pi" : { "min" : "5.1.2", "max" : null }, "xmlwriter_write_raw" : { "min" : "5.2.0", "max" : null }, "yaml_emit" : { "min" : "5.2.0", "max" : null }, "yaml_emit_file" : { "min" : "5.2.0", "max" : null }, "yaml_parse" : { "min" : "5.2.0", "max" : null }, "yaml_parse_file" : { "min" : "5.2.0", "max" : null }, "yaml_parse_url" : { "min" : "5.2.0", "max" : null }, "zend_logo_guid" : { "min" : "4.0.0", "max" : "5.4.30RC1" }, "zend_thread_id" : { "min" : "5.0.0", "max" : null }, "zend_version" : { "min" : "4.0.0", "max" : null } }, "classes" : { "APCIterator" : { "min" : "5.1.0", "max" : null }, "AppendIterator" : { "min" : "5.1.0", "max" : null }, "ArrayIterator" : { "min" : "5.0.0", "max" : null }, "ArrayObject" : { "min" : "5.0.0", "max" : null }, "BadFunctionCallException" : { "min" : "5.1.0", "max" : null }, "BadMethodCallException" : { "min" : "5.1.0", "max" : null }, "CURLFile" : { "min" : "5.5.0", "max" : null }, "CachingIterator" : { "min" : "5.0.0", "max" : null }, "CallbackFilterIterator" : { "min" : "5.4.0", "max" : null }, "Closure" : { "min" : "5.3.0", "max" : null }, "Collator" : { "min" : "5.2.0", "max" : null }, "DateInterval" : { "min" : "5.3.0", "max" : null }, "DatePeriod" : { "min" : "5.3.0", "max" : null }, "DateTime" : { "min" : "5.2.0", "max" : null }, "DateTimeImmutable" : { "min" : "5.5.0", "max" : null }, "DateTimeZone" : { "min" : "5.2.0", "max" : null }, "Directory" : { "min" : "4.0.0", "max" : null }, "DirectoryIterator" : { "min" : "5.0.0", "max" : null }, "DomainException" : { "min" : "5.1.0", "max" : null }, "EmptyIterator" : { "min" : "5.1.0", "max" : null }, "ErrorException" : { "min" : "5.1.0", "max" : null }, "Exception" : { "min" : "5.1.0", "max" : null }, "FilesystemIterator" : { "min" : "5.3.0", "max" : null }, "FilterIterator" : { "min" : "5.1.0", "max" : null }, "Generator" : { "min" : "5.5.0", "max" : null }, "GlobIterator" : { "min" : "5.3.0", "max" : null }, "Imagick" : { "min" : "5.1.3", "max" : null }, "ImagickDraw" : { "min" : "5.1.3", "max" : null }, "ImagickDrawException" : { "min" : "5.1.3", "max" : null }, "ImagickException" : { "min" : "5.1.3", "max" : null }, "ImagickPixel" : { "min" : "5.1.3", "max" : null }, "ImagickPixelException" : { "min" : "5.1.3", "max" : null }, "ImagickPixelIterator" : { "min" : "5.1.3", "max" : null }, "ImagickPixelIteratorException" : { "min" : "5.1.3", "max" : null }, "InfiniteIterator" : { "min" : "5.1.0", "max" : null }, "IntlBreakIterator" : { "min" : "5.5.0", "max" : null }, "IntlCalendar" : { "min" : "5.5.0", "max" : null }, "IntlCodePointBreakIterator" : { "min" : "5.5.0", "max" : null }, "IntlDateFormatter" : { "min" : "5.2.4", "max" : null }, "IntlException" : { "min" : "5.2.0", "max" : null }, "IntlGregorianCalendar" : { "min" : "5.5.0", "max" : null }, "IntlIterator" : { "min" : "5.5.0", "max" : null }, "IntlPartsIterator" : { "min" : "5.5.0", "max" : null }, "IntlRuleBasedBreakIterator" : { "min" : "5.5.0", "max" : null }, "IntlTimeZone" : { "min" : "5.5.0", "max" : null }, "InvalidArgumentException" : { "min" : "5.1.0", "max" : null }, "IteratorIterator" : { "min" : "5.1.0", "max" : null }, "LengthException" : { "min" : "5.1.0", "max" : null }, "LibXMLError" : { "min" : "5.1.0", "max" : null }, "LimitIterator" : { "min" : "5.1.0", "max" : null }, "Locale" : { "min" : "5.2.0", "max" : null }, "LogicException" : { "min" : "5.1.0", "max" : null }, "MessageFormatter" : { "min" : "5.2.0", "max" : null }, "MultipleIterator" : { "min" : "5.3.0", "max" : null }, "NoRewindIterator" : { "min" : "5.1.0", "max" : null }, "Normalizer" : { "min" : "5.2.0", "max" : null }, "NumberFormatter" : { "min" : "5.2.0", "max" : null }, "OutOfBoundsException" : { "min" : "5.1.0", "max" : null }, "OutOfRangeException" : { "min" : "5.1.0", "max" : null }, "OverflowException" : { "min" : "5.1.0", "max" : null }, "PDO" : { "min" : "5.1.0", "max" : null }, "PDOException" : { "min" : "5.1.0", "max" : null }, "PDORow" : { "min" : "5.1.0", "max" : null }, "PDOStatement" : { "min" : "5.1.0", "max" : null }, "ParentIterator" : { "min" : "5.1.0", "max" : null }, "Phar" : { "min" : "5.2.0", "max" : null }, "PharData" : { "min" : "5.2.0", "max" : null }, "PharException" : { "min" : "5.2.0", "max" : null }, "PharFileInfo" : { "min" : "5.2.0", "max" : null }, "RangeException" : { "min" : "5.1.0", "max" : null }, "RecursiveArrayIterator" : { "min" : "5.1.0", "max" : null }, "RecursiveCachingIterator" : { "min" : "5.1.0", "max" : null }, "RecursiveCallbackFilterIterator" : { "min" : "5.4.0", "max" : null }, "RecursiveDirectoryIterator" : { "min" : "5.1.2", "max" : null }, "RecursiveFilterIterator" : { "min" : "5.1.0", "max" : null }, "RecursiveIteratorIterator" : { "min" : "5.1.3", "max" : null }, "RecursiveRegexIterator" : { "min" : "5.2.0", "max" : null }, "RecursiveTreeIterator" : { "min" : "5.3.0", "max" : null }, "Reflection" : { "min" : "5.0.0", "max" : null }, "ReflectionClass" : { "min" : "5.0.0", "max" : null }, "ReflectionException" : { "min" : "5.0.0", "max" : null }, "ReflectionExtension" : { "min" : "5.0.0", "max" : null }, "ReflectionFunction" : { "min" : "5.0.0", "max" : null }, "ReflectionFunctionAbstract" : { "min" : "5.0.0", "max" : null }, "ReflectionMethod" : { "min" : "5.0.0", "max" : null }, "ReflectionObject" : { "min" : "5.0.0", "max" : null }, "ReflectionParameter" : { "min" : "5.0.0", "max" : null }, "ReflectionProperty" : { "min" : "5.0.0", "max" : null }, "ReflectionZendExtension" : { "min" : "5.4.0", "max" : null }, "RegexIterator" : { "min" : "5.2.0", "max" : null }, "ResourceBundle" : { "min" : "5.2.4", "max" : null }, "RuntimeException" : { "min" : "5.1.0", "max" : null }, "SimpleXMLElement" : { "min" : "5.0.1", "max" : null }, "SimpleXMLIterator" : { "min" : "5.1.0", "max" : null }, "SplDoublyLinkedList" : { "min" : "5.3.0", "max" : null }, "SplFileInfo" : { "min" : "5.1.2", "max" : null }, "SplFileObject" : { "min" : "5.1.0", "max" : null }, "SplFixedArray" : { "min" : "5.3.0", "max" : null }, "SplHeap" : { "min" : "5.3.0", "max" : null }, "SplMaxHeap" : { "min" : "5.3.0", "max" : null }, "SplMinHeap" : { "min" : "5.3.0", "max" : null }, "SplObjectStorage" : { "min" : "5.1.0", "max" : null }, "SplPriorityQueue" : { "min" : "5.3.0", "max" : null }, "SplQueue" : { "min" : "5.3.0", "max" : null }, "SplStack" : { "min" : "5.3.0", "max" : null }, "SplTempFileObject" : { "min" : "5.1.2", "max" : null }, "Spoofchecker" : { "min" : "5.4.0", "max" : null }, "Transliterator" : { "min" : "5.4.0", "max" : null }, "UConverter" : { "min" : "5.5.0", "max" : null }, "UnderflowException" : { "min" : "5.1.0", "max" : null }, "UnexpectedValueException" : { "min" : "5.1.0", "max" : null }, "XMLReader" : { "min" : "5.0.0", "max" : null }, "XMLWriter" : { "min" : "5.1.2", "max" : null }, "__PHP_Incomplete_Class" : { "min" : "4.0.0", "max" : null }, "finfo" : { "min" : "4.0.0", "max" : null }, "http\\Client" : { "min" : "5.3.0", "max" : null }, "http\\Client\\Request" : { "min" : "5.3.0", "max" : null }, "http\\Client\\Response" : { "min" : "5.3.0", "max" : null }, "http\\Cookie" : { "min" : "5.3.0", "max" : null }, "http\\Encoding\\Stream" : { "min" : "5.3.0", "max" : null }, "http\\Encoding\\Stream\\Dechunk" : { "min" : "5.3.0", "max" : null }, "http\\Encoding\\Stream\\Deflate" : { "min" : "5.3.0", "max" : null }, "http\\Encoding\\Stream\\Inflate" : { "min" : "5.3.0", "max" : null }, "http\\Env" : { "min" : "5.3.0", "max" : null }, "http\\Env\\Request" : { "min" : "5.3.0", "max" : null }, "http\\Env\\Response" : { "min" : "5.3.0", "max" : null }, "http\\Exception\\BadConversionException" : { "min" : "5.3.0", "max" : null }, "http\\Exception\\BadHeaderException" : { "min" : "5.3.0", "max" : null }, "http\\Exception\\BadMessageException" : { "min" : "5.3.0", "max" : null }, "http\\Exception\\BadMethodCallException" : { "min" : "5.3.0", "max" : null }, "http\\Exception\\BadQueryStringException" : { "min" : "5.3.0", "max" : null }, "http\\Exception\\BadUrlException" : { "min" : "5.3.0", "max" : null }, "http\\Exception\\InvalidArgumentException" : { "min" : "5.3.0", "max" : null }, "http\\Exception\\RuntimeException" : { "min" : "5.3.0", "max" : null }, "http\\Exception\\UnexpectedValueException" : { "min" : "5.3.0", "max" : null }, "http\\Header" : { "min" : "5.3.0", "max" : null }, "http\\Message" : { "min" : "5.3.0", "max" : null }, "http\\Message\\Body" : { "min" : "5.3.0", "max" : null }, "http\\Params" : { "min" : "5.3.0", "max" : null }, "http\\QueryString" : { "min" : "5.3.0", "max" : null }, "http\\Url" : { "min" : "5.3.0", "max" : null }, "mysqli" : { "min" : "5.0.0", "max" : null }, "mysqli_driver" : { "min" : "5.0.0", "max" : null }, "mysqli_result" : { "min" : "5.0.0", "max" : null }, "mysqli_sql_exception" : { "min" : "5.0.0", "max" : null }, "mysqli_stmt" : { "min" : "5.0.0", "max" : null }, "mysqli_warning" : { "min" : "5.0.0", "max" : null }, "php_user_filter" : { "min" : "5.0.0", "max" : null }, "stdClass" : { "min" : "4.0.0", "max" : null } }, "interfaces" : { "ArrayAccess" : { "min" : "5.1.0", "max" : null }, "Countable" : { "min" : "5.1.0", "max" : null }, "DateTimeInterface" : { "min" : "5.5.0", "max" : null }, "Iterator" : { "min" : "5.1.0", "max" : null }, "IteratorAggregate" : { "min" : "5.1.0", "max" : null }, "JsonSerializable" : { "min" : "5.4.0", "max" : null }, "OuterIterator" : { "min" : "5.1.0", "max" : null }, "RecursiveIterator" : { "min" : "5.1.0", "max" : null }, "Reflector" : { "min" : "5.0.0", "max" : null }, "SeekableIterator" : { "min" : "5.1.0", "max" : null }, "Serializable" : { "min" : "5.1.0", "max" : null }, "SplObserver" : { "min" : "5.1.0", "max" : null }, "SplSubject" : { "min" : "5.1.0", "max" : null }, "Traversable" : { "min" : "5.1.0", "max" : null }, "http\\Exception" : { "min" : "5.3.0", "max" : null } }, + "constants" : { + "ABDAY_1" : { + "min" : "4.1.0", + "max" : null + }, + "ABDAY_2" : { + "min" : "4.1.0", + "max" : null + }, + "ABDAY_3" : { + "min" : "4.1.0", + "max" : null + }, + "ABDAY_4" : { + "min" : "4.1.0", + "max" : null + }, + "ABDAY_5" : { + "min" : "4.1.0", + "max" : null + }, + "ABDAY_6" : { + "min" : "4.1.0", + "max" : null + }, + "ABDAY_7" : { + "min" : "4.1.0", + "max" : null + }, + "ABMON_1" : { + "min" : "4.1.0", + "max" : null + }, + "ABMON_10" : { + "min" : "4.1.0", + "max" : null + }, + "ABMON_11" : { + "min" : "4.1.0", + "max" : null + }, + "ABMON_12" : { + "min" : "4.1.0", + "max" : null + }, + "ABMON_2" : { + "min" : "4.1.0", + "max" : null + }, + "ABMON_3" : { + "min" : "4.1.0", + "max" : null + }, + "ABMON_4" : { + "min" : "4.1.0", + "max" : null + }, + "ABMON_5" : { + "min" : "4.1.0", + "max" : null + }, + "ABMON_6" : { + "min" : "4.1.0", + "max" : null + }, + "ABMON_7" : { + "min" : "4.1.0", + "max" : null + }, + "ABMON_8" : { + "min" : "4.1.0", + "max" : null + }, + "ABMON_9" : { + "min" : "4.1.0", + "max" : null + }, + "ALT_DIGITS" : { + "min" : "4.1.0", + "max" : null + }, + "AM_STR" : { + "min" : "4.1.0", + "max" : null + }, + "APC_BIN_VERIFY_CRC32" : { + "min" : "5.1.0", + "max" : null + }, + "APC_BIN_VERIFY_MD5" : { + "min" : "5.1.0", + "max" : null + }, + "APC_ITER_ALL" : { + "min" : "5.1.0", + "max" : null + }, + "APC_ITER_ATIME" : { + "min" : "5.1.0", + "max" : null + }, + "APC_ITER_CTIME" : { + "min" : "5.1.0", + "max" : null + }, + "APC_ITER_DEVICE" : { + "min" : "5.1.0", + "max" : null + }, + "APC_ITER_DTIME" : { + "min" : "5.1.0", + "max" : null + }, + "APC_ITER_FILENAME" : { + "min" : "5.1.0", + "max" : null + }, + "APC_ITER_INODE" : { + "min" : "5.1.0", + "max" : null + }, + "APC_ITER_KEY" : { + "min" : "5.1.0", + "max" : null + }, + "APC_ITER_MD5" : { + "min" : "5.1.0", + "max" : null + }, + "APC_ITER_MEM_SIZE" : { + "min" : "5.1.0", + "max" : null + }, + "APC_ITER_MTIME" : { + "min" : "5.1.0", + "max" : null + }, + "APC_ITER_NONE" : { + "min" : "5.1.0", + "max" : null + }, + "APC_ITER_NUM_HITS" : { + "min" : "5.1.0", + "max" : null + }, + "APC_ITER_REFCOUNT" : { + "min" : "5.1.0", + "max" : null + }, + "APC_ITER_TTL" : { + "min" : "5.1.0", + "max" : null + }, + "APC_ITER_TYPE" : { + "min" : "5.1.0", + "max" : null + }, + "APC_ITER_VALUE" : { + "min" : "5.1.0", + "max" : null + }, + "APC_LIST_ACTIVE" : { + "min" : "5.1.0", + "max" : null + }, + "APC_LIST_DELETED" : { + "min" : "5.1.0", + "max" : null + }, + "ASSERT_ACTIVE" : { + "min" : "4.0.0", + "max" : null + }, + "ASSERT_BAIL" : { + "min" : "4.0.0", + "max" : null + }, + "ASSERT_CALLBACK" : { + "min" : "4.0.0", + "max" : null + }, + "ASSERT_QUIET_EVAL" : { + "min" : "4.0.0", + "max" : null + }, + "ASSERT_WARNING" : { + "min" : "4.0.0", + "max" : null + }, + "BUS_ADRALN" : { + "min" : "5.3.0", + "max" : null + }, + "BUS_ADRERR" : { + "min" : "5.3.0", + "max" : null + }, + "BUS_OBJERR" : { + "min" : "5.3.0", + "max" : null + }, + "CASE_LOWER" : { + "min" : "4.0.0", + "max" : null + }, + "CASE_UPPER" : { + "min" : "4.0.0", + "max" : null + }, + "CHAR_MAX" : { + "min" : "4.0.0", + "max" : null + }, + "CLD_CONTINUED" : { + "min" : "5.3.0", + "max" : null + }, + "CLD_DUMPED" : { + "min" : "5.3.0", + "max" : null + }, + "CLD_EXITED" : { + "min" : "5.3.0", + "max" : null + }, + "CLD_KILLED" : { + "min" : "5.3.0", + "max" : null + }, + "CLD_STOPPED" : { + "min" : "5.3.0", + "max" : null + }, + "CLD_TRAPPED" : { + "min" : "5.3.0", + "max" : null + }, + "CODESET" : { + "min" : "4.1.0", + "max" : null + }, + "CONNECTION_ABORTED" : { + "min" : "4.0.0", + "max" : null + }, + "CONNECTION_NORMAL" : { + "min" : "4.0.0", + "max" : null + }, + "CONNECTION_TIMEOUT" : { + "min" : "4.0.0", + "max" : null + }, + "COUNT_NORMAL" : { + "min" : "4.0.0", + "max" : null + }, + "COUNT_RECURSIVE" : { + "min" : "4.0.0", + "max" : null + }, + "CREDITS_ALL" : { + "min" : "4.0.0", + "max" : null + }, + "CREDITS_DOCS" : { + "min" : "4.0.0", + "max" : null + }, + "CREDITS_FULLPAGE" : { + "min" : "4.0.0", + "max" : null + }, + "CREDITS_GENERAL" : { + "min" : "4.0.0", + "max" : null + }, + "CREDITS_GROUP" : { + "min" : "4.0.0", + "max" : null + }, + "CREDITS_MODULES" : { + "min" : "4.0.0", + "max" : null + }, + "CREDITS_QA" : { + "min" : "4.0.0", + "max" : null + }, + "CREDITS_SAPI" : { + "min" : "4.0.0", + "max" : null + }, + "CRNCYSTR" : { + "min" : "4.1.0", + "max" : null + }, + "CRYPT_BLOWFISH" : { + "min" : "4.0.0", + "max" : null + }, + "CRYPT_EXT_DES" : { + "min" : "4.0.0", + "max" : null + }, + "CRYPT_MD5" : { + "min" : "4.0.0", + "max" : null + }, + "CRYPT_SALT_LENGTH" : { + "min" : "4.0.0", + "max" : null + }, + "CRYPT_SHA256" : { + "min" : "5.3.2", + "max" : null + }, + "CRYPT_SHA512" : { + "min" : "5.3.2", + "max" : null + }, + "CRYPT_STD_DES" : { + "min" : "4.0.0", + "max" : null + }, + "CURLAUTH_ANY" : { + "min" : "4.0.2", + "max" : null + }, + "CURLAUTH_ANYSAFE" : { + "min" : "4.0.2", + "max" : null + }, + "CURLAUTH_BASIC" : { + "min" : "4.0.2", + "max" : null + }, + "CURLAUTH_DIGEST" : { + "min" : "4.0.2", + "max" : null + }, + "CURLAUTH_DIGEST_IE" : { + "min" : "5.5.0", + "max" : null + }, + "CURLAUTH_GSSNEGOTIATE" : { + "min" : "4.0.2", + "max" : null + }, + "CURLAUTH_NONE" : { + "min" : "5.5.0", + "max" : null + }, + "CURLAUTH_NTLM" : { + "min" : "4.0.2", + "max" : null + }, + "CURLAUTH_ONLY" : { + "min" : "5.5.0", + "max" : null + }, + "CURLCLOSEPOLICY_CALLBACK" : { + "min" : "4.0.2", + "max" : "5.5.14RC1" + }, + "CURLCLOSEPOLICY_LEAST_RECENTLY_USED" : { + "min" : "4.0.2", + "max" : "5.5.14RC1" + }, + "CURLCLOSEPOLICY_LEAST_TRAFFIC" : { + "min" : "4.0.2", + "max" : "5.5.14RC1" + }, + "CURLCLOSEPOLICY_OLDEST" : { + "min" : "4.0.2", + "max" : "5.5.14RC1" + }, + "CURLCLOSEPOLICY_SLOWEST" : { + "min" : "4.0.2", + "max" : "5.5.14RC1" + }, + "CURLE_ABORTED_BY_CALLBACK" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_BAD_CALLING_ORDER" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_BAD_CONTENT_ENCODING" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_BAD_DOWNLOAD_RESUME" : { + "min" : "5.5.0", + "max" : null + }, + "CURLE_BAD_FUNCTION_ARGUMENT" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_BAD_PASSWORD_ENTERED" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_COULDNT_CONNECT" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_COULDNT_RESOLVE_HOST" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_COULDNT_RESOLVE_PROXY" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_FAILED_INIT" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_FILESIZE_EXCEEDED" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_FILE_COULDNT_READ_FILE" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_FTP_ACCESS_DENIED" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_FTP_BAD_DOWNLOAD_RESUME" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_FTP_CANT_GET_HOST" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_FTP_CANT_RECONNECT" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_FTP_COULDNT_GET_SIZE" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_FTP_COULDNT_RETR_FILE" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_FTP_COULDNT_SET_ASCII" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_FTP_COULDNT_SET_BINARY" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_FTP_COULDNT_STOR_FILE" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_FTP_COULDNT_USE_REST" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_FTP_PARTIAL_FILE" : { + "min" : "5.5.0", + "max" : null + }, + "CURLE_FTP_PORT_FAILED" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_FTP_QUOTE_ERROR" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_FTP_SSL_FAILED" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_FTP_USER_PASSWORD_INCORRECT" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_FTP_WEIRD_227_FORMAT" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_FTP_WEIRD_PASS_REPLY" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_FTP_WEIRD_PASV_REPLY" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_FTP_WEIRD_SERVER_REPLY" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_FTP_WEIRD_USER_REPLY" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_FTP_WRITE_ERROR" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_FUNCTION_NOT_FOUND" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_GOT_NOTHING" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_HTTP_NOT_FOUND" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_HTTP_PORT_FAILED" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_HTTP_POST_ERROR" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_HTTP_RANGE_ERROR" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_HTTP_RETURNED_ERROR" : { + "min" : "5.5.0", + "max" : null + }, + "CURLE_LDAP_CANNOT_BIND" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_LDAP_INVALID_URL" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_LDAP_SEARCH_FAILED" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_LIBRARY_NOT_FOUND" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_MALFORMAT_USER" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_OBSOLETE" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_OK" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_OPERATION_TIMEDOUT" : { + "min" : "5.5.0", + "max" : null + }, + "CURLE_OPERATION_TIMEOUTED" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_OUT_OF_MEMORY" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_PARTIAL_FILE" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_READ_ERROR" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_RECV_ERROR" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_SEND_ERROR" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_SHARE_IN_USE" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_SSH" : { + "min" : "5.3.0", + "max" : null + }, + "CURLE_SSL_CACERT" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_SSL_CERTPROBLEM" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_SSL_CIPHER" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_SSL_CONNECT_ERROR" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_SSL_ENGINE_NOTFOUND" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_SSL_ENGINE_SETFAILED" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_SSL_PEER_CERTIFICATE" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_TELNET_OPTION_SYNTAX" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_TOO_MANY_REDIRECTS" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_UNKNOWN_TELNET_OPTION" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_UNSUPPORTED_PROTOCOL" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_URL_MALFORMAT" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_URL_MALFORMAT_USER" : { + "min" : "4.0.2", + "max" : null + }, + "CURLE_WRITE_ERROR" : { + "min" : "4.0.2", + "max" : null + }, + "CURLFTPAUTH_DEFAULT" : { + "min" : "5.1.0", + "max" : null + }, + "CURLFTPAUTH_SSL" : { + "min" : "5.1.0", + "max" : null + }, + "CURLFTPAUTH_TLS" : { + "min" : "5.1.0", + "max" : null + }, + "CURLFTPMETHOD_MULTICWD" : { + "min" : "5.3.0", + "max" : null + }, + "CURLFTPMETHOD_NOCWD" : { + "min" : "5.3.0", + "max" : null + }, + "CURLFTPMETHOD_SINGLECWD" : { + "min" : "5.3.0", + "max" : null + }, + "CURLFTPSSL_ALL" : { + "min" : "5.2.0", + "max" : null + }, + "CURLFTPSSL_CCC_ACTIVE" : { + "min" : "5.5.0", + "max" : null + }, + "CURLFTPSSL_CCC_NONE" : { + "min" : "5.5.0", + "max" : null + }, + "CURLFTPSSL_CCC_PASSIVE" : { + "min" : "5.5.0", + "max" : null + }, + "CURLFTPSSL_CONTROL" : { + "min" : "5.2.0", + "max" : null + }, + "CURLFTPSSL_NONE" : { + "min" : "5.2.0", + "max" : null + }, + "CURLFTPSSL_TRY" : { + "min" : "4.0.2", + "max" : null + }, + "CURLGSSAPI_DELEGATION_FLAG" : { + "min" : "5.5.0", + "max" : null + }, + "CURLGSSAPI_DELEGATION_POLICY_FLAG" : { + "min" : "5.5.0", + "max" : null + }, + "CURLINFO_APPCONNECT_TIME" : { + "min" : "5.5.0", + "max" : null + }, + "CURLINFO_CERTINFO" : { + "min" : "5.3.2", + "max" : null + }, + "CURLINFO_CONDITION_UNMET" : { + "min" : "5.5.0", + "max" : null + }, + "CURLINFO_CONNECT_TIME" : { + "min" : "4.0.2", + "max" : null + }, + "CURLINFO_CONTENT_LENGTH_DOWNLOAD" : { + "min" : "4.0.2", + "max" : null + }, + "CURLINFO_CONTENT_LENGTH_UPLOAD" : { + "min" : "4.0.2", + "max" : null + }, + "CURLINFO_CONTENT_TYPE" : { + "min" : "4.0.2", + "max" : null + }, + "CURLINFO_COOKIELIST" : { + "min" : "5.5.0", + "max" : null + }, + "CURLINFO_EFFECTIVE_URL" : { + "min" : "4.0.2", + "max" : null + }, + "CURLINFO_FILETIME" : { + "min" : "4.0.2", + "max" : null + }, + "CURLINFO_FTP_ENTRY_PATH" : { + "min" : "5.5.0", + "max" : null + }, + "CURLINFO_HEADER_OUT" : { + "min" : "5.1.3", + "max" : null + }, + "CURLINFO_HEADER_SIZE" : { + "min" : "4.0.2", + "max" : null + }, + "CURLINFO_HTTPAUTH_AVAIL" : { + "min" : "5.5.0", + "max" : null + }, + "CURLINFO_HTTP_CODE" : { + "min" : "4.0.2", + "max" : null + }, + "CURLINFO_HTTP_CONNECTCODE" : { + "min" : "5.5.0", + "max" : null + }, + "CURLINFO_LASTONE" : { + "min" : "5.5.0", + "max" : null + }, + "CURLINFO_LOCAL_IP" : { + "min" : "5.4.7", + "max" : null + }, + "CURLINFO_LOCAL_PORT" : { + "min" : "5.4.7", + "max" : null + }, + "CURLINFO_NAMELOOKUP_TIME" : { + "min" : "4.0.2", + "max" : null + }, + "CURLINFO_NUM_CONNECTS" : { + "min" : "5.5.0", + "max" : null + }, + "CURLINFO_OS_ERRNO" : { + "min" : "5.5.0", + "max" : null + }, + "CURLINFO_PRETRANSFER_TIME" : { + "min" : "4.0.2", + "max" : null + }, + "CURLINFO_PRIMARY_IP" : { + "min" : "5.4.7", + "max" : null + }, + "CURLINFO_PRIMARY_PORT" : { + "min" : "5.4.7", + "max" : null + }, + "CURLINFO_PRIVATE" : { + "min" : "5.2.4", + "max" : null + }, + "CURLINFO_PROXYAUTH_AVAIL" : { + "min" : "5.5.0", + "max" : null + }, + "CURLINFO_REDIRECT_COUNT" : { + "min" : "4.0.2", + "max" : null + }, + "CURLINFO_REDIRECT_TIME" : { + "min" : "4.0.2", + "max" : null + }, + "CURLINFO_REDIRECT_URL" : { + "min" : "5.3.7", + "max" : null + }, + "CURLINFO_REQUEST_SIZE" : { + "min" : "4.0.2", + "max" : null + }, + "CURLINFO_RESPONSE_CODE" : { + "min" : "5.5.0", + "max" : null + }, + "CURLINFO_RTSP_CLIENT_CSEQ" : { + "min" : "5.5.0", + "max" : null + }, + "CURLINFO_RTSP_CSEQ_RECV" : { + "min" : "5.5.0", + "max" : null + }, + "CURLINFO_RTSP_SERVER_CSEQ" : { + "min" : "5.5.0", + "max" : null + }, + "CURLINFO_RTSP_SESSION_ID" : { + "min" : "5.5.0", + "max" : null + }, + "CURLINFO_SIZE_DOWNLOAD" : { + "min" : "4.0.2", + "max" : null + }, + "CURLINFO_SIZE_UPLOAD" : { + "min" : "4.0.2", + "max" : null + }, + "CURLINFO_SPEED_DOWNLOAD" : { + "min" : "4.0.2", + "max" : null + }, + "CURLINFO_SPEED_UPLOAD" : { + "min" : "4.0.2", + "max" : null + }, + "CURLINFO_SSL_ENGINES" : { + "min" : "5.5.0", + "max" : null + }, + "CURLINFO_SSL_VERIFYRESULT" : { + "min" : "4.0.2", + "max" : null + }, + "CURLINFO_STARTTRANSFER_TIME" : { + "min" : "4.0.2", + "max" : null + }, + "CURLINFO_TOTAL_TIME" : { + "min" : "4.0.2", + "max" : null + }, + "CURLMOPT_MAXCONNECTS" : { + "min" : "5.5.0", + "max" : null + }, + "CURLMOPT_PIPELINING" : { + "min" : "5.5.0", + "max" : null + }, + "CURLMSG_DONE" : { + "min" : "4.0.2", + "max" : null + }, + "CURLM_BAD_EASY_HANDLE" : { + "min" : "4.0.2", + "max" : null + }, + "CURLM_BAD_HANDLE" : { + "min" : "4.0.2", + "max" : null + }, + "CURLM_CALL_MULTI_PERFORM" : { + "min" : "4.0.2", + "max" : null + }, + "CURLM_INTERNAL_ERROR" : { + "min" : "4.0.2", + "max" : null + }, + "CURLM_OK" : { + "min" : "4.0.2", + "max" : null + }, + "CURLM_OUT_OF_MEMORY" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_ACCEPTTIMEOUT_MS" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_ACCEPT_ENCODING" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_ADDRESS_SCOPE" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_APPEND" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_AUTOREFERER" : { + "min" : "5.1.0", + "max" : null + }, + "CURLOPT_BINARYTRANSFER" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_BUFFERSIZE" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_CAINFO" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_CAPATH" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_CERTINFO" : { + "min" : "5.3.2", + "max" : null + }, + "CURLOPT_CLOSEPOLICY" : { + "min" : "4.0.2", + "max" : "5.5.14RC1" + }, + "CURLOPT_CONNECTTIMEOUT" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_CONNECTTIMEOUT_MS" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_CONNECT_ONLY" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_COOKIE" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_COOKIEFILE" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_COOKIEJAR" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_COOKIELIST" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_COOKIESESSION" : { + "min" : "5.1.0", + "max" : null + }, + "CURLOPT_CRLF" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_CRLFILE" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_CUSTOMREQUEST" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_DIRLISTONLY" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_DNS_CACHE_TIMEOUT" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_DNS_SERVERS" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_DNS_USE_GLOBAL_CACHE" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_EGDSOCKET" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_ENCODING" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_FAILONERROR" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_FILE" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_FILETIME" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_FNMATCH_FUNCTION" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_FOLLOWLOCATION" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_FORBID_REUSE" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_FRESH_CONNECT" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_FTPAPPEND" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_FTPLISTONLY" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_FTPPORT" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_FTPSSLAUTH" : { + "min" : "5.1.0", + "max" : null + }, + "CURLOPT_FTP_ACCOUNT" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_FTP_ALTERNATIVE_TO_USER" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_FTP_CREATE_MISSING_DIRS" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_FTP_FILEMETHOD" : { + "min" : "5.3.0", + "max" : null + }, + "CURLOPT_FTP_RESPONSE_TIMEOUT" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_FTP_SKIP_PASV_IP" : { + "min" : "5.3.2", + "max" : null + }, + "CURLOPT_FTP_SSL" : { + "min" : "5.2.0", + "max" : null + }, + "CURLOPT_FTP_SSL_CCC" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_FTP_USE_EPRT" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_FTP_USE_EPSV" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_FTP_USE_PRET" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_GSSAPI_DELEGATION" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_HEADER" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_HEADERFUNCTION" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_HTTP200ALIASES" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_HTTPAUTH" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_HTTPGET" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_HTTPHEADER" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_HTTPPROXYTUNNEL" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_HTTP_CONTENT_DECODING" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_HTTP_TRANSFER_DECODING" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_HTTP_VERSION" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_IGNORE_CONTENT_LENGTH" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_INFILE" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_INFILESIZE" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_INTERFACE" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_IPRESOLVE" : { + "min" : "5.3.0", + "max" : null + }, + "CURLOPT_ISSUERCERT" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_KEYPASSWD" : { + "min" : "5.3.0", + "max" : null + }, + "CURLOPT_KRB4LEVEL" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_KRBLEVEL" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_LOCALPORT" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_LOCALPORTRANGE" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_LOW_SPEED_LIMIT" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_LOW_SPEED_TIME" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_MAIL_AUTH" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_MAIL_FROM" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_MAIL_RCPT" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_MAXCONNECTS" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_MAXFILESIZE" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_MAXREDIRS" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_MAX_RECV_SPEED_LARGE" : { + "min" : "5.3.7", + "max" : null + }, + "CURLOPT_MAX_SEND_SPEED_LARGE" : { + "min" : "5.3.7", + "max" : null + }, + "CURLOPT_MUTE" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_NETRC" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_NETRC_FILE" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_NEW_DIRECTORY_PERMS" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_NEW_FILE_PERMS" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_NOBODY" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_NOPROGRESS" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_NOPROXY" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_NOSIGNAL" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_PASSWDFUNCTION" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_PASSWORD" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_PORT" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_POST" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_POSTFIELDS" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_POSTQUOTE" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_POSTREDIR" : { + "min" : "5.3.2", + "max" : null + }, + "CURLOPT_PREQUOTE" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_PRIVATE" : { + "min" : "5.2.4", + "max" : null + }, + "CURLOPT_PROGRESSFUNCTION" : { + "min" : "5.3.0", + "max" : null + }, + "CURLOPT_PROTOCOLS" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_PROXY" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_PROXYAUTH" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_PROXYPASSWORD" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_PROXYPORT" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_PROXYTYPE" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_PROXYUSERNAME" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_PROXYUSERPWD" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_PROXY_TRANSFER_MODE" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_PUT" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_QUOTE" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_RANDOM_FILE" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_RANGE" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_READDATA" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_READFUNCTION" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_REDIR_PROTOCOLS" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_REFERER" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_RESOLVE" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_RESUME_FROM" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_RETURNTRANSFER" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_RTSP_CLIENT_CSEQ" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_RTSP_REQUEST" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_RTSP_SERVER_CSEQ" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_RTSP_SESSION_ID" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_RTSP_STREAM_URI" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_RTSP_TRANSPORT" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_SAFE_UPLOAD" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_SHARE" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_SOCKS5_GSSAPI_NEC" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_SOCKS5_GSSAPI_SERVICE" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_SSH_AUTH_TYPES" : { + "min" : "5.3.0", + "max" : null + }, + "CURLOPT_SSH_HOST_PUBLIC_KEY_MD5" : { + "min" : "5.3.0", + "max" : null + }, + "CURLOPT_SSH_KNOWNHOSTS" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_SSH_PRIVATE_KEYFILE" : { + "min" : "5.3.0", + "max" : null + }, + "CURLOPT_SSH_PUBLIC_KEYFILE" : { + "min" : "5.3.0", + "max" : null + }, + "CURLOPT_SSLCERT" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_SSLCERTPASSWD" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_SSLCERTTYPE" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_SSLENGINE" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_SSLENGINE_DEFAULT" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_SSLKEY" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_SSLKEYPASSWD" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_SSLKEYTYPE" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_SSLVERSION" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_SSL_CIPHER_LIST" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_SSL_OPTIONS" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_SSL_SESSIONID_CACHE" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_SSL_VERIFYHOST" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_SSL_VERIFYPEER" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_STDERR" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_TCP_KEEPALIVE" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_TCP_KEEPIDLE" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_TCP_KEEPINTVL" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_TCP_NODELAY" : { + "min" : "5.2.1", + "max" : null + }, + "CURLOPT_TELNETOPTIONS" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_TFTP_BLKSIZE" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_TIMECONDITION" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_TIMEOUT" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_TIMEOUT_MS" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_TIMEVALUE" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_TLSAUTH_PASSWORD" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_TLSAUTH_TYPE" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_TLSAUTH_USERNAME" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_TRANSFERTEXT" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_TRANSFER_ENCODING" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_UNRESTRICTED_AUTH" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_UPLOAD" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_URL" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_USERAGENT" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_USERNAME" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_USERPWD" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_USE_SSL" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_VERBOSE" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_WILDCARDMATCH" : { + "min" : "5.5.0", + "max" : null + }, + "CURLOPT_WRITEFUNCTION" : { + "min" : "4.0.2", + "max" : null + }, + "CURLOPT_WRITEHEADER" : { + "min" : "4.0.2", + "max" : null + }, + "CURLPAUSE_ALL" : { + "min" : "5.5.0", + "max" : null + }, + "CURLPAUSE_CONT" : { + "min" : "5.5.0", + "max" : null + }, + "CURLPAUSE_RECV" : { + "min" : "5.5.0", + "max" : null + }, + "CURLPAUSE_RECV_CONT" : { + "min" : "5.5.0", + "max" : null + }, + "CURLPAUSE_SEND" : { + "min" : "5.5.0", + "max" : null + }, + "CURLPAUSE_SEND_CONT" : { + "min" : "5.5.0", + "max" : null + }, + "CURLPROTO_ALL" : { + "min" : "4.0.2", + "max" : null + }, + "CURLPROTO_DICT" : { + "min" : "4.0.2", + "max" : null + }, + "CURLPROTO_FILE" : { + "min" : "4.0.2", + "max" : null + }, + "CURLPROTO_FTP" : { + "min" : "4.0.2", + "max" : null + }, + "CURLPROTO_FTPS" : { + "min" : "4.0.2", + "max" : null + }, + "CURLPROTO_GOPHER" : { + "min" : "5.5.0", + "max" : null + }, + "CURLPROTO_HTTP" : { + "min" : "4.0.2", + "max" : null + }, + "CURLPROTO_HTTPS" : { + "min" : "4.0.2", + "max" : null + }, + "CURLPROTO_IMAP" : { + "min" : "5.5.0", + "max" : null + }, + "CURLPROTO_IMAPS" : { + "min" : "5.5.0", + "max" : null + }, + "CURLPROTO_LDAP" : { + "min" : "4.0.2", + "max" : null + }, + "CURLPROTO_LDAPS" : { + "min" : "4.0.2", + "max" : null + }, + "CURLPROTO_POP3" : { + "min" : "5.5.0", + "max" : null + }, + "CURLPROTO_POP3S" : { + "min" : "5.5.0", + "max" : null + }, + "CURLPROTO_RTMP" : { + "min" : "5.5.0", + "max" : null + }, + "CURLPROTO_RTMPE" : { + "min" : "5.5.0", + "max" : null + }, + "CURLPROTO_RTMPS" : { + "min" : "5.5.0", + "max" : null + }, + "CURLPROTO_RTMPT" : { + "min" : "5.5.0", + "max" : null + }, + "CURLPROTO_RTMPTE" : { + "min" : "5.5.0", + "max" : null + }, + "CURLPROTO_RTMPTS" : { + "min" : "5.5.0", + "max" : null + }, + "CURLPROTO_RTSP" : { + "min" : "5.5.0", + "max" : null + }, + "CURLPROTO_SCP" : { + "min" : "4.0.2", + "max" : null + }, + "CURLPROTO_SFTP" : { + "min" : "4.0.2", + "max" : null + }, + "CURLPROTO_SMTP" : { + "min" : "5.5.0", + "max" : null + }, + "CURLPROTO_SMTPS" : { + "min" : "5.5.0", + "max" : null + }, + "CURLPROTO_TELNET" : { + "min" : "4.0.2", + "max" : null + }, + "CURLPROTO_TFTP" : { + "min" : "4.0.2", + "max" : null + }, + "CURLPROXY_HTTP" : { + "min" : "4.0.2", + "max" : null + }, + "CURLPROXY_SOCKS4" : { + "min" : "5.2.10", + "max" : null + }, + "CURLPROXY_SOCKS5" : { + "min" : "4.0.2", + "max" : null + }, + "CURLSHOPT_NONE" : { + "min" : "5.5.0", + "max" : null + }, + "CURLSHOPT_SHARE" : { + "min" : "5.5.0", + "max" : null + }, + "CURLSHOPT_UNSHARE" : { + "min" : "5.5.0", + "max" : null + }, + "CURLSSH_AUTH_ANY" : { + "min" : "5.5.0", + "max" : null + }, + "CURLSSH_AUTH_DEFAULT" : { + "min" : "5.3.0", + "max" : null + }, + "CURLSSH_AUTH_HOST" : { + "min" : "5.3.0", + "max" : null + }, + "CURLSSH_AUTH_KEYBOARD" : { + "min" : "5.3.0", + "max" : null + }, + "CURLSSH_AUTH_NONE" : { + "min" : "5.3.0", + "max" : null + }, + "CURLSSH_AUTH_PASSWORD" : { + "min" : "5.3.0", + "max" : null + }, + "CURLSSH_AUTH_PUBLICKEY" : { + "min" : "5.3.0", + "max" : null + }, + "CURLSSLOPT_ALLOW_BEAST" : { + "min" : "5.5.0", + "max" : null + }, + "CURLUSESSL_ALL" : { + "min" : "5.5.0", + "max" : null + }, + "CURLUSESSL_CONTROL" : { + "min" : "5.5.0", + "max" : null + }, + "CURLUSESSL_NONE" : { + "min" : "5.5.0", + "max" : null + }, + "CURLUSESSL_TRY" : { + "min" : "5.5.0", + "max" : null + }, + "CURLVERSION_NOW" : { + "min" : "4.0.2", + "max" : null + }, + "CURL_FNMATCHFUNC_FAIL" : { + "min" : "5.5.0", + "max" : null + }, + "CURL_FNMATCHFUNC_MATCH" : { + "min" : "5.5.0", + "max" : null + }, + "CURL_FNMATCHFUNC_NOMATCH" : { + "min" : "5.5.0", + "max" : null + }, + "CURL_HTTP_VERSION_1_0" : { + "min" : "4.0.2", + "max" : null + }, + "CURL_HTTP_VERSION_1_1" : { + "min" : "4.0.2", + "max" : null + }, + "CURL_HTTP_VERSION_NONE" : { + "min" : "4.0.2", + "max" : null + }, + "CURL_IPRESOLVE_V4" : { + "min" : "5.3.0", + "max" : null + }, + "CURL_IPRESOLVE_V6" : { + "min" : "5.3.0", + "max" : null + }, + "CURL_IPRESOLVE_WHATEVER" : { + "min" : "5.3.0", + "max" : null + }, + "CURL_LOCK_DATA_COOKIE" : { + "min" : "5.5.0", + "max" : null + }, + "CURL_LOCK_DATA_DNS" : { + "min" : "5.5.0", + "max" : null + }, + "CURL_LOCK_DATA_SSL_SESSION" : { + "min" : "5.5.0", + "max" : null + }, + "CURL_NETRC_IGNORED" : { + "min" : "4.0.2", + "max" : null + }, + "CURL_NETRC_OPTIONAL" : { + "min" : "4.0.2", + "max" : null + }, + "CURL_NETRC_REQUIRED" : { + "min" : "4.0.2", + "max" : null + }, + "CURL_READFUNC_PAUSE" : { + "min" : "5.5.0", + "max" : null + }, + "CURL_RTSPREQ_ANNOUNCE" : { + "min" : "5.5.0", + "max" : null + }, + "CURL_RTSPREQ_DESCRIBE" : { + "min" : "5.5.0", + "max" : null + }, + "CURL_RTSPREQ_GET_PARAMETER" : { + "min" : "5.5.0", + "max" : null + }, + "CURL_RTSPREQ_OPTIONS" : { + "min" : "5.5.0", + "max" : null + }, + "CURL_RTSPREQ_PAUSE" : { + "min" : "5.5.0", + "max" : null + }, + "CURL_RTSPREQ_PLAY" : { + "min" : "5.5.0", + "max" : null + }, + "CURL_RTSPREQ_RECEIVE" : { + "min" : "5.5.0", + "max" : null + }, + "CURL_RTSPREQ_RECORD" : { + "min" : "5.5.0", + "max" : null + }, + "CURL_RTSPREQ_SETUP" : { + "min" : "5.5.0", + "max" : null + }, + "CURL_RTSPREQ_SET_PARAMETER" : { + "min" : "5.5.0", + "max" : null + }, + "CURL_RTSPREQ_TEARDOWN" : { + "min" : "5.5.0", + "max" : null + }, + "CURL_SSLVERSION_DEFAULT" : { + "min" : "5.5.0", + "max" : null + }, + "CURL_SSLVERSION_SSLv2" : { + "min" : "5.5.0", + "max" : null + }, + "CURL_SSLVERSION_SSLv3" : { + "min" : "5.5.0", + "max" : null + }, + "CURL_SSLVERSION_TLSv1" : { + "min" : "5.5.0", + "max" : null + }, + "CURL_TIMECOND_IFMODSINCE" : { + "min" : "4.0.2", + "max" : null + }, + "CURL_TIMECOND_IFUNMODSINCE" : { + "min" : "4.0.2", + "max" : null + }, + "CURL_TIMECOND_LASTMOD" : { + "min" : "4.0.2", + "max" : null + }, + "CURL_TIMECOND_NONE" : { + "min" : "5.5.0", + "max" : null + }, + "CURL_TLSAUTH_SRP" : { + "min" : "5.5.0", + "max" : null + }, + "CURL_VERSION_IPV6" : { + "min" : "4.0.2", + "max" : null + }, + "CURL_VERSION_KERBEROS4" : { + "min" : "4.0.2", + "max" : null + }, + "CURL_VERSION_LIBZ" : { + "min" : "4.0.2", + "max" : null + }, + "CURL_VERSION_SSL" : { + "min" : "4.0.2", + "max" : null + }, + "CURL_WRITEFUNC_PAUSE" : { + "min" : "5.5.0", + "max" : null + }, + "DATE_ATOM" : { + "min" : "5.1.1", + "max" : null + }, + "DATE_COOKIE" : { + "min" : "5.1.1", + "max" : null + }, + "DATE_ISO8601" : { + "min" : "5.1.1", + "max" : null + }, + "DATE_RFC1036" : { + "min" : "5.1.1", + "max" : null + }, + "DATE_RFC1123" : { + "min" : "5.1.1", + "max" : null + }, + "DATE_RFC2822" : { + "min" : "5.1.1", + "max" : null + }, + "DATE_RFC3339" : { + "min" : "5.1.3", + "max" : null + }, + "DATE_RFC822" : { + "min" : "5.1.1", + "max" : null + }, + "DATE_RFC850" : { + "min" : "5.1.1", + "max" : null + }, + "DATE_RSS" : { + "min" : "5.1.1", + "max" : null + }, + "DATE_W3C" : { + "min" : "5.1.1", + "max" : null + }, + "DAY_1" : { + "min" : "4.1.0", + "max" : null + }, + "DAY_2" : { + "min" : "4.1.0", + "max" : null + }, + "DAY_3" : { + "min" : "4.1.0", + "max" : null + }, + "DAY_4" : { + "min" : "4.1.0", + "max" : null + }, + "DAY_5" : { + "min" : "4.1.0", + "max" : null + }, + "DAY_6" : { + "min" : "4.1.0", + "max" : null + }, + "DAY_7" : { + "min" : "4.1.0", + "max" : null + }, + "DEBUG_BACKTRACE_IGNORE_ARGS" : { + "min" : "5.3.6", + "max" : null + }, + "DEBUG_BACKTRACE_PROVIDE_OBJECT" : { + "min" : "5.3.6", + "max" : null + }, + "DEFAULT_INCLUDE_PATH" : { + "min" : "4.0.0", + "max" : null + }, + "DIRECTORY_SEPARATOR" : { + "min" : "4.0.6", + "max" : null + }, + "DNS_A" : { + "min" : "4.0.0", + "max" : null + }, + "DNS_A6" : { + "min" : "4.0.0", + "max" : null + }, + "DNS_AAAA" : { + "min" : "4.0.0", + "max" : null + }, + "DNS_ALL" : { + "min" : "4.0.0", + "max" : null + }, + "DNS_ANY" : { + "min" : "4.0.0", + "max" : null + }, + "DNS_CNAME" : { + "min" : "4.0.0", + "max" : null + }, + "DNS_HINFO" : { + "min" : "4.0.0", + "max" : null + }, + "DNS_MX" : { + "min" : "4.0.0", + "max" : null + }, + "DNS_NAPTR" : { + "min" : "4.0.0", + "max" : null + }, + "DNS_NS" : { + "min" : "4.0.0", + "max" : null + }, + "DNS_PTR" : { + "min" : "4.0.0", + "max" : null + }, + "DNS_SOA" : { + "min" : "4.0.0", + "max" : null + }, + "DNS_SRV" : { + "min" : "4.0.0", + "max" : null + }, + "DNS_TXT" : { + "min" : "4.0.0", + "max" : null + }, + "D_FMT" : { + "min" : "4.1.0", + "max" : null + }, + "D_T_FMT" : { + "min" : "4.1.0", + "max" : null + }, + "ENT_COMPAT" : { + "min" : "4.0.0", + "max" : null + }, + "ENT_DISALLOWED" : { + "min" : "5.4.0", + "max" : null + }, + "ENT_HTML401" : { + "min" : "5.4.0", + "max" : null + }, + "ENT_HTML5" : { + "min" : "5.4.0", + "max" : null + }, + "ENT_IGNORE" : { + "min" : "5.3.0", + "max" : null + }, + "ENT_NOQUOTES" : { + "min" : "4.0.0", + "max" : null + }, + "ENT_QUOTES" : { + "min" : "4.0.0", + "max" : null + }, + "ENT_SUBSTITUTE" : { + "min" : "5.4.0", + "max" : null + }, + "ENT_XHTML" : { + "min" : "5.4.0", + "max" : null + }, + "ENT_XML1" : { + "min" : "5.4.0", + "max" : null + }, + "ERA" : { + "min" : "4.1.0", + "max" : null + }, + "ERA_D_FMT" : { + "min" : "4.1.0", + "max" : null + }, + "ERA_D_T_FMT" : { + "min" : "4.1.0", + "max" : null + }, + "ERA_T_FMT" : { + "min" : "4.1.0", + "max" : null + }, + "EXTR_IF_EXISTS" : { + "min" : "4.0.0", + "max" : null + }, + "EXTR_OVERWRITE" : { + "min" : "4.0.0", + "max" : null + }, + "EXTR_PREFIX_ALL" : { + "min" : "4.0.0", + "max" : null + }, + "EXTR_PREFIX_IF_EXISTS" : { + "min" : "4.0.0", + "max" : null + }, + "EXTR_PREFIX_INVALID" : { + "min" : "4.0.0", + "max" : null + }, + "EXTR_PREFIX_SAME" : { + "min" : "4.0.0", + "max" : null + }, + "EXTR_REFS" : { + "min" : "4.0.0", + "max" : null + }, + "EXTR_SKIP" : { + "min" : "4.0.0", + "max" : null + }, + "E_ALL" : { + "min" : "4.0.0", + "max" : null + }, + "E_COMPILE_ERROR" : { + "min" : "4.0.0", + "max" : null + }, + "E_COMPILE_WARNING" : { + "min" : "4.0.0", + "max" : null + }, + "E_CORE_ERROR" : { + "min" : "4.0.0", + "max" : null + }, + "E_CORE_WARNING" : { + "min" : "4.0.0", + "max" : null + }, + "E_DEPRECATED" : { + "min" : "5.3.0", + "max" : null + }, + "E_ERROR" : { + "min" : "4.0.0", + "max" : null + }, + "E_NOTICE" : { + "min" : "4.0.0", + "max" : null + }, + "E_PARSE" : { + "min" : "4.0.0", + "max" : null + }, + "E_RECOVERABLE_ERROR" : { + "min" : "5.2.0", + "max" : null + }, + "E_STRICT" : { + "min" : "5.0.0", + "max" : null + }, + "E_USER_DEPRECATED" : { + "min" : "5.3.0", + "max" : null + }, + "E_USER_ERROR" : { + "min" : "4.0.0", + "max" : null + }, + "E_USER_NOTICE" : { + "min" : "4.0.0", + "max" : null + }, + "E_USER_WARNING" : { + "min" : "4.0.0", + "max" : null + }, + "E_WARNING" : { + "min" : "4.0.0", + "max" : null + }, + "FALSE" : { + "min" : "4.0.0", + "max" : null + }, + "FILEINFO_COMPRESS" : { + "min" : "4.0.0", + "max" : "5.2.17" + }, + "FILEINFO_CONTINUE" : { + "min" : "4.0.0", + "max" : null + }, + "FILEINFO_DEVICES" : { + "min" : "4.0.0", + "max" : null + }, + "FILEINFO_MIME" : { + "min" : "4.0.0", + "max" : null + }, + "FILEINFO_MIME_ENCODING" : { + "min" : "5.3.0", + "max" : null + }, + "FILEINFO_MIME_TYPE" : { + "min" : "5.3.0", + "max" : null + }, + "FILEINFO_NONE" : { + "min" : "4.0.0", + "max" : null + }, + "FILEINFO_PRESERVE_ATIME" : { + "min" : "4.0.0", + "max" : null + }, + "FILEINFO_RAW" : { + "min" : "4.0.0", + "max" : null + }, + "FILEINFO_SYMLINK" : { + "min" : "4.0.0", + "max" : null + }, + "FILE_APPEND" : { + "min" : "4.0.0", + "max" : null + }, + "FILE_BINARY" : { + "min" : "5.2.7", + "max" : null + }, + "FILE_IGNORE_NEW_LINES" : { + "min" : "4.0.0", + "max" : null + }, + "FILE_NO_DEFAULT_CONTEXT" : { + "min" : "4.0.0", + "max" : null + }, + "FILE_SKIP_EMPTY_LINES" : { + "min" : "4.0.0", + "max" : null + }, + "FILE_TEXT" : { + "min" : "5.2.7", + "max" : null + }, + "FILE_USE_INCLUDE_PATH" : { + "min" : "4.0.0", + "max" : null + }, + "FNM_CASEFOLD" : { + "min" : "4.0.0", + "max" : null + }, + "FNM_NOESCAPE" : { + "min" : "4.0.0", + "max" : null + }, + "FNM_PATHNAME" : { + "min" : "4.0.0", + "max" : null + }, + "FNM_PERIOD" : { + "min" : "4.0.0", + "max" : null + }, + "FPE_FLTDIV" : { + "min" : "5.3.0", + "max" : null + }, + "FPE_FLTINV" : { + "min" : "5.3.0", + "max" : null + }, + "FPE_FLTOVF" : { + "min" : "5.3.0", + "max" : null + }, + "FPE_FLTRES" : { + "min" : "5.3.0", + "max" : null + }, + "FPE_FLTSUB" : { + "min" : "5.3.0", + "max" : null + }, + "FPE_FLTUND" : { + "min" : "5.3.0", + "max" : null + }, + "FPE_INTDIV" : { + "min" : "5.3.0", + "max" : null + }, + "FPE_INTOVF" : { + "min" : "5.3.0", + "max" : null + }, + "GD_BUNDLED" : { + "min" : "4.0.0", + "max" : null + }, + "GD_EXTRA_VERSION" : { + "min" : "5.2.4", + "max" : null + }, + "GD_MAJOR_VERSION" : { + "min" : "5.2.4", + "max" : null + }, + "GD_MINOR_VERSION" : { + "min" : "5.2.4", + "max" : null + }, + "GD_RELEASE_VERSION" : { + "min" : "5.2.4", + "max" : null + }, + "GD_VERSION" : { + "min" : "5.2.4", + "max" : null + }, + "GLOB_AVAILABLE_FLAGS" : { + "min" : "5.2.4", + "max" : null + }, + "GLOB_BRACE" : { + "min" : "4.0.0", + "max" : null + }, + "GLOB_ERR" : { + "min" : "4.0.0", + "max" : null + }, + "GLOB_MARK" : { + "min" : "4.0.0", + "max" : null + }, + "GLOB_NOCHECK" : { + "min" : "4.0.0", + "max" : null + }, + "GLOB_NOESCAPE" : { + "min" : "4.0.0", + "max" : null + }, + "GLOB_NOSORT" : { + "min" : "4.0.0", + "max" : null + }, + "GLOB_ONLYDIR" : { + "min" : "4.0.0", + "max" : null + }, + "GRAPHEME_EXTR_COUNT" : { + "min" : "5.2.4", + "max" : null + }, + "GRAPHEME_EXTR_MAXBYTES" : { + "min" : "5.2.4", + "max" : null + }, + "GRAPHEME_EXTR_MAXCHARS" : { + "min" : "5.2.4", + "max" : null + }, + "HTML_ENTITIES" : { + "min" : "4.0.0", + "max" : null + }, + "HTML_SPECIALCHARS" : { + "min" : "4.0.0", + "max" : null + }, + "IDNA_ALLOW_UNASSIGNED" : { + "min" : "5.2.4", + "max" : null + }, + "IDNA_DEFAULT" : { + "min" : "5.2.4", + "max" : null + }, + "IDNA_USE_STD3_RULES" : { + "min" : "5.2.4", + "max" : null + }, + "ILL_BADSTK" : { + "min" : "5.3.0", + "max" : null + }, + "ILL_COPROC" : { + "min" : "5.3.0", + "max" : null + }, + "ILL_ILLADR" : { + "min" : "5.3.0", + "max" : null + }, + "ILL_ILLOPC" : { + "min" : "5.3.0", + "max" : null + }, + "ILL_ILLOPN" : { + "min" : "5.3.0", + "max" : null + }, + "ILL_ILLTRP" : { + "min" : "5.3.0", + "max" : null + }, + "ILL_PRVOPC" : { + "min" : "5.3.0", + "max" : null + }, + "ILL_PRVREG" : { + "min" : "5.3.0", + "max" : null + }, + "IMAGETYPE_BMP" : { + "min" : "4.0.0", + "max" : null + }, + "IMAGETYPE_COUNT" : { + "min" : "5.3.0", + "max" : null + }, + "IMAGETYPE_GIF" : { + "min" : "4.0.0", + "max" : null + }, + "IMAGETYPE_ICO" : { + "min" : "5.3.0", + "max" : null + }, + "IMAGETYPE_IFF" : { + "min" : "4.0.0", + "max" : null + }, + "IMAGETYPE_JB2" : { + "min" : "4.0.0", + "max" : null + }, + "IMAGETYPE_JP2" : { + "min" : "4.0.0", + "max" : null + }, + "IMAGETYPE_JPC" : { + "min" : "4.0.0", + "max" : null + }, + "IMAGETYPE_JPEG" : { + "min" : "4.0.0", + "max" : null + }, + "IMAGETYPE_JPEG2000" : { + "min" : "4.0.0", + "max" : null + }, + "IMAGETYPE_JPX" : { + "min" : "4.0.0", + "max" : null + }, + "IMAGETYPE_PNG" : { + "min" : "4.0.0", + "max" : null + }, + "IMAGETYPE_PSD" : { + "min" : "4.0.0", + "max" : null + }, + "IMAGETYPE_SWC" : { + "min" : "4.0.0", + "max" : null + }, + "IMAGETYPE_SWF" : { + "min" : "4.0.0", + "max" : null + }, + "IMAGETYPE_TIFF_II" : { + "min" : "4.0.0", + "max" : null + }, + "IMAGETYPE_TIFF_MM" : { + "min" : "4.0.0", + "max" : null + }, + "IMAGETYPE_UNKNOWN" : { + "min" : "5.3.0", + "max" : null + }, + "IMAGETYPE_WBMP" : { + "min" : "4.0.0", + "max" : null + }, + "IMAGETYPE_XBM" : { + "min" : "4.0.0", + "max" : null + }, + "IMG_AFFINE_ROTATE" : { + "min" : "5.5.0", + "max" : null + }, + "IMG_AFFINE_SCALE" : { + "min" : "5.5.0", + "max" : null + }, + "IMG_AFFINE_SHEAR_HORIZONTAL" : { + "min" : "5.5.0", + "max" : null + }, + "IMG_AFFINE_SHEAR_VERTICAL" : { + "min" : "5.5.0", + "max" : null + }, + "IMG_AFFINE_TRANSLATE" : { + "min" : "5.5.0", + "max" : null + }, + "IMG_ARC_CHORD" : { + "min" : "4.0.0", + "max" : null + }, + "IMG_ARC_EDGED" : { + "min" : "4.0.0", + "max" : null + }, + "IMG_ARC_NOFILL" : { + "min" : "4.0.0", + "max" : null + }, + "IMG_ARC_PIE" : { + "min" : "4.0.0", + "max" : null + }, + "IMG_ARC_ROUNDED" : { + "min" : "4.0.0", + "max" : null + }, + "IMG_BELL" : { + "min" : "5.5.0", + "max" : null + }, + "IMG_BESSEL" : { + "min" : "5.5.0", + "max" : null + }, + "IMG_BICUBIC" : { + "min" : "5.5.0", + "max" : null + }, + "IMG_BICUBIC_FIXED" : { + "min" : "5.5.0", + "max" : null + }, + "IMG_BILINEAR_FIXED" : { + "min" : "5.5.0", + "max" : null + }, + "IMG_BLACKMAN" : { + "min" : "5.5.0", + "max" : null + }, + "IMG_BOX" : { + "min" : "5.5.0", + "max" : null + }, + "IMG_BSPLINE" : { + "min" : "5.5.0", + "max" : null + }, + "IMG_CATMULLROM" : { + "min" : "5.5.0", + "max" : null + }, + "IMG_COLOR_BRUSHED" : { + "min" : "4.0.0", + "max" : null + }, + "IMG_COLOR_STYLED" : { + "min" : "4.0.0", + "max" : null + }, + "IMG_COLOR_STYLEDBRUSHED" : { + "min" : "4.0.0", + "max" : null + }, + "IMG_COLOR_TILED" : { + "min" : "4.0.0", + "max" : null + }, + "IMG_COLOR_TRANSPARENT" : { + "min" : "4.0.0", + "max" : null + }, + "IMG_CROP_BLACK" : { + "min" : "5.5.0", + "max" : null + }, + "IMG_CROP_DEFAULT" : { + "min" : "5.5.0", + "max" : null + }, + "IMG_CROP_SIDES" : { + "min" : "5.5.0", + "max" : null + }, + "IMG_CROP_THRESHOLD" : { + "min" : "5.5.0", + "max" : null + }, + "IMG_CROP_TRANSPARENT" : { + "min" : "5.5.0", + "max" : null + }, + "IMG_CROP_WHITE" : { + "min" : "5.5.0", + "max" : null + }, + "IMG_EFFECT_ALPHABLEND" : { + "min" : "4.0.0", + "max" : null + }, + "IMG_EFFECT_NORMAL" : { + "min" : "4.0.0", + "max" : null + }, + "IMG_EFFECT_OVERLAY" : { + "min" : "4.0.0", + "max" : null + }, + "IMG_EFFECT_REPLACE" : { + "min" : "4.0.0", + "max" : null + }, + "IMG_FILTER_BRIGHTNESS" : { + "min" : "4.0.0", + "max" : null + }, + "IMG_FILTER_COLORIZE" : { + "min" : "4.0.0", + "max" : null + }, + "IMG_FILTER_CONTRAST" : { + "min" : "4.0.0", + "max" : null + }, + "IMG_FILTER_EDGEDETECT" : { + "min" : "4.0.0", + "max" : null + }, + "IMG_FILTER_EMBOSS" : { + "min" : "4.0.0", + "max" : null + }, + "IMG_FILTER_GAUSSIAN_BLUR" : { + "min" : "4.0.0", + "max" : null + }, + "IMG_FILTER_GRAYSCALE" : { + "min" : "4.0.0", + "max" : null + }, + "IMG_FILTER_MEAN_REMOVAL" : { + "min" : "4.0.0", + "max" : null + }, + "IMG_FILTER_NEGATE" : { + "min" : "4.0.0", + "max" : null + }, + "IMG_FILTER_PIXELATE" : { + "min" : "5.3.0", + "max" : null + }, + "IMG_FILTER_SELECTIVE_BLUR" : { + "min" : "4.0.0", + "max" : null + }, + "IMG_FILTER_SMOOTH" : { + "min" : "4.0.0", + "max" : null + }, + "IMG_FLIP_BOTH" : { + "min" : "5.5.0", + "max" : null + }, + "IMG_FLIP_HORIZONTAL" : { + "min" : "5.5.0", + "max" : null + }, + "IMG_FLIP_VERTICAL" : { + "min" : "5.5.0", + "max" : null + }, + "IMG_GAUSSIAN" : { + "min" : "5.5.0", + "max" : null + }, + "IMG_GD2_COMPRESSED" : { + "min" : "4.0.0", + "max" : null + }, + "IMG_GD2_RAW" : { + "min" : "4.0.0", + "max" : null + }, + "IMG_GENERALIZED_CUBIC" : { + "min" : "5.5.0", + "max" : null + }, + "IMG_GIF" : { + "min" : "4.0.0", + "max" : null + }, + "IMG_HAMMING" : { + "min" : "5.5.0", + "max" : null + }, + "IMG_HANNING" : { + "min" : "5.5.0", + "max" : null + }, + "IMG_HERMITE" : { + "min" : "5.5.0", + "max" : null + }, + "IMG_JPEG" : { + "min" : "4.0.0", + "max" : null + }, + "IMG_JPG" : { + "min" : "4.0.0", + "max" : null + }, + "IMG_MITCHELL" : { + "min" : "5.5.0", + "max" : null + }, + "IMG_NEAREST_NEIGHBOUR" : { + "min" : "5.5.0", + "max" : null + }, + "IMG_PNG" : { + "min" : "4.0.0", + "max" : null + }, + "IMG_POWER" : { + "min" : "5.5.0", + "max" : null + }, + "IMG_QUADRATIC" : { + "min" : "5.5.0", + "max" : null + }, + "IMG_SINC" : { + "min" : "5.5.0", + "max" : null + }, + "IMG_TRIANGLE" : { + "min" : "5.5.0", + "max" : null + }, + "IMG_WBMP" : { + "min" : "4.0.0", + "max" : null + }, + "IMG_WEIGHTED4" : { + "min" : "5.5.0", + "max" : null + }, + "IMG_XPM" : { + "min" : "4.0.0", + "max" : null + }, + "INF" : { + "min" : "4.0.0", + "max" : null + }, + "INFO_ALL" : { + "min" : "4.0.0", + "max" : null + }, + "INFO_CONFIGURATION" : { + "min" : "4.0.0", + "max" : null + }, + "INFO_CREDITS" : { + "min" : "4.0.0", + "max" : null + }, + "INFO_ENVIRONMENT" : { + "min" : "4.0.0", + "max" : null + }, + "INFO_GENERAL" : { + "min" : "4.0.0", + "max" : null + }, + "INFO_LICENSE" : { + "min" : "4.0.0", + "max" : null + }, + "INFO_MODULES" : { + "min" : "4.0.0", + "max" : null + }, + "INFO_VARIABLES" : { + "min" : "4.0.0", + "max" : null + }, + "INI_ALL" : { + "min" : "4.0.0", + "max" : null + }, + "INI_PERDIR" : { + "min" : "4.0.0", + "max" : null + }, + "INI_SCANNER_NORMAL" : { + "min" : "5.3.0", + "max" : null + }, + "INI_SCANNER_RAW" : { + "min" : "5.3.0", + "max" : null + }, + "INI_SYSTEM" : { + "min" : "4.0.0", + "max" : null + }, + "INI_USER" : { + "min" : "4.0.0", + "max" : null + }, + "INTL_ICU_VERSION" : { + "min" : "5.3.7", + "max" : null + }, + "INTL_IDNA_VARIANT_2003" : { + "min" : "5.4.0", + "max" : null + }, + "INTL_MAX_LOCALE_LEN" : { + "min" : "5.2.4", + "max" : null + }, + "JSON_BIGINT_AS_STRING" : { + "min" : "5.4.0", + "max" : null + }, + "JSON_ERROR_CTRL_CHAR" : { + "min" : "5.3.0", + "max" : null + }, + "JSON_ERROR_DEPTH" : { + "min" : "5.3.0", + "max" : null + }, + "JSON_ERROR_INF_OR_NAN" : { + "min" : "5.5.0", + "max" : null + }, + "JSON_ERROR_NONE" : { + "min" : "5.3.0", + "max" : null + }, + "JSON_ERROR_RECURSION" : { + "min" : "5.5.0", + "max" : null + }, + "JSON_ERROR_STATE_MISMATCH" : { + "min" : "5.3.0", + "max" : null + }, + "JSON_ERROR_SYNTAX" : { + "min" : "5.3.0", + "max" : null + }, + "JSON_ERROR_UNSUPPORTED_TYPE" : { + "min" : "5.5.0", + "max" : null + }, + "JSON_ERROR_UTF8" : { + "min" : "5.3.3", + "max" : null + }, + "JSON_FORCE_OBJECT" : { + "min" : "5.3.0", + "max" : null + }, + "JSON_HEX_AMP" : { + "min" : "5.3.0", + "max" : null + }, + "JSON_HEX_APOS" : { + "min" : "5.3.0", + "max" : null + }, + "JSON_HEX_QUOT" : { + "min" : "5.3.0", + "max" : null + }, + "JSON_HEX_TAG" : { + "min" : "5.3.0", + "max" : null + }, + "JSON_NUMERIC_CHECK" : { + "min" : "5.3.3", + "max" : null + }, + "JSON_OBJECT_AS_ARRAY" : { + "min" : "5.4.0", + "max" : null + }, + "JSON_PARTIAL_OUTPUT_ON_ERROR" : { + "min" : "5.5.0", + "max" : null + }, + "JSON_PRETTY_PRINT" : { + "min" : "5.4.0", + "max" : null + }, + "JSON_UNESCAPED_SLASHES" : { + "min" : "5.4.0", + "max" : null + }, + "JSON_UNESCAPED_UNICODE" : { + "min" : "5.4.0", + "max" : null + }, + "LC_ALL" : { + "min" : "4.0.0", + "max" : null + }, + "LC_COLLATE" : { + "min" : "4.0.0", + "max" : null + }, + "LC_CTYPE" : { + "min" : "4.0.0", + "max" : null + }, + "LC_MESSAGES" : { + "min" : "4.0.0", + "max" : null + }, + "LC_MONETARY" : { + "min" : "4.0.0", + "max" : null + }, + "LC_NUMERIC" : { + "min" : "4.0.0", + "max" : null + }, + "LC_TIME" : { + "min" : "4.0.0", + "max" : null + }, + "LIBXML_COMPACT" : { + "min" : "5.1.0", + "max" : null + }, + "LIBXML_DOTTED_VERSION" : { + "min" : "5.1.0", + "max" : null + }, + "LIBXML_DTDATTR" : { + "min" : "5.1.0", + "max" : null + }, + "LIBXML_DTDLOAD" : { + "min" : "5.1.0", + "max" : null + }, + "LIBXML_DTDVALID" : { + "min" : "5.1.0", + "max" : null + }, + "LIBXML_ERR_ERROR" : { + "min" : "5.1.0", + "max" : null + }, + "LIBXML_ERR_FATAL" : { + "min" : "5.1.0", + "max" : null + }, + "LIBXML_ERR_NONE" : { + "min" : "5.1.0", + "max" : null + }, + "LIBXML_ERR_WARNING" : { + "min" : "5.1.0", + "max" : null + }, + "LIBXML_HTML_NODEFDTD" : { + "min" : "5.4.0", + "max" : null + }, + "LIBXML_HTML_NOIMPLIED" : { + "min" : "5.4.0", + "max" : null + }, + "LIBXML_LOADED_VERSION" : { + "min" : "5.3.0", + "max" : null + }, + "LIBXML_NOBLANKS" : { + "min" : "5.1.0", + "max" : null + }, + "LIBXML_NOCDATA" : { + "min" : "5.1.0", + "max" : null + }, + "LIBXML_NOEMPTYTAG" : { + "min" : "5.1.0", + "max" : null + }, + "LIBXML_NOENT" : { + "min" : "5.1.0", + "max" : null + }, + "LIBXML_NOERROR" : { + "min" : "5.1.0", + "max" : null + }, + "LIBXML_NONET" : { + "min" : "5.1.0", + "max" : null + }, + "LIBXML_NOWARNING" : { + "min" : "5.1.0", + "max" : null + }, + "LIBXML_NOXMLDECL" : { + "min" : "5.1.0", + "max" : null + }, + "LIBXML_NSCLEAN" : { + "min" : "5.1.0", + "max" : null + }, + "LIBXML_PARSEHUGE" : { + "min" : "5.2.12", + "max" : null + }, + "LIBXML_PEDANTIC" : { + "min" : "5.4.0", + "max" : null + }, + "LIBXML_SCHEMA_CREATE" : { + "min" : "5.5.2", + "max" : null + }, + "LIBXML_VERSION" : { + "min" : "5.1.0", + "max" : null + }, + "LIBXML_XINCLUDE" : { + "min" : "5.1.0", + "max" : null + }, + "LOCK_EX" : { + "min" : "4.0.0", + "max" : null + }, + "LOCK_NB" : { + "min" : "4.0.0", + "max" : null + }, + "LOCK_SH" : { + "min" : "4.0.0", + "max" : null + }, + "LOCK_UN" : { + "min" : "4.0.0", + "max" : null + }, + "LOG_ALERT" : { + "min" : "4.0.0", + "max" : null + }, + "LOG_AUTH" : { + "min" : "4.0.0", + "max" : null + }, + "LOG_AUTHPRIV" : { + "min" : "4.0.0", + "max" : null + }, + "LOG_CONS" : { + "min" : "4.0.0", + "max" : null + }, + "LOG_CRIT" : { + "min" : "4.0.0", + "max" : null + }, + "LOG_CRON" : { + "min" : "4.0.0", + "max" : null + }, + "LOG_DAEMON" : { + "min" : "4.0.0", + "max" : null + }, + "LOG_DEBUG" : { + "min" : "4.0.0", + "max" : null + }, + "LOG_EMERG" : { + "min" : "4.0.0", + "max" : null + }, + "LOG_ERR" : { + "min" : "4.0.0", + "max" : null + }, + "LOG_INFO" : { + "min" : "4.0.0", + "max" : null + }, + "LOG_KERN" : { + "min" : "4.0.0", + "max" : null + }, + "LOG_LOCAL0" : { + "min" : "4.0.0", + "max" : null + }, + "LOG_LOCAL1" : { + "min" : "4.0.0", + "max" : null + }, + "LOG_LOCAL2" : { + "min" : "4.0.0", + "max" : null + }, + "LOG_LOCAL3" : { + "min" : "4.0.0", + "max" : null + }, + "LOG_LOCAL4" : { + "min" : "4.0.0", + "max" : null + }, + "LOG_LOCAL5" : { + "min" : "4.0.0", + "max" : null + }, + "LOG_LOCAL6" : { + "min" : "4.0.0", + "max" : null + }, + "LOG_LOCAL7" : { + "min" : "4.0.0", + "max" : null + }, + "LOG_LPR" : { + "min" : "4.0.0", + "max" : null + }, + "LOG_MAIL" : { + "min" : "4.0.0", + "max" : null + }, + "LOG_NDELAY" : { + "min" : "4.0.0", + "max" : null + }, + "LOG_NEWS" : { + "min" : "4.0.0", + "max" : null + }, + "LOG_NOTICE" : { + "min" : "4.0.0", + "max" : null + }, + "LOG_NOWAIT" : { + "min" : "4.0.0", + "max" : null + }, + "LOG_ODELAY" : { + "min" : "4.0.0", + "max" : null + }, + "LOG_PERROR" : { + "min" : "4.0.0", + "max" : null + }, + "LOG_PID" : { + "min" : "4.0.0", + "max" : null + }, + "LOG_SYSLOG" : { + "min" : "4.0.0", + "max" : null + }, + "LOG_USER" : { + "min" : "4.0.0", + "max" : null + }, + "LOG_UUCP" : { + "min" : "4.0.0", + "max" : null + }, + "LOG_WARNING" : { + "min" : "4.0.0", + "max" : null + }, + "MON_1" : { + "min" : "4.1.0", + "max" : null + }, + "MON_10" : { + "min" : "4.1.0", + "max" : null + }, + "MON_11" : { + "min" : "4.1.0", + "max" : null + }, + "MON_12" : { + "min" : "4.1.0", + "max" : null + }, + "MON_2" : { + "min" : "4.1.0", + "max" : null + }, + "MON_3" : { + "min" : "4.1.0", + "max" : null + }, + "MON_4" : { + "min" : "4.1.0", + "max" : null + }, + "MON_5" : { + "min" : "4.1.0", + "max" : null + }, + "MON_6" : { + "min" : "4.1.0", + "max" : null + }, + "MON_7" : { + "min" : "4.1.0", + "max" : null + }, + "MON_8" : { + "min" : "4.1.0", + "max" : null + }, + "MON_9" : { + "min" : "4.1.0", + "max" : null + }, + "MYSQLI_ASSOC" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_ASYNC" : { + "min" : "5.3.0", + "max" : null + }, + "MYSQLI_AUTO_INCREMENT_FLAG" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_BINARY_FLAG" : { + "min" : "5.3.0", + "max" : null + }, + "MYSQLI_BLOB_FLAG" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_BOTH" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_CLIENT_COMPRESS" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_CLIENT_FOUND_ROWS" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_CLIENT_IGNORE_SPACE" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_CLIENT_INTERACTIVE" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_CLIENT_NO_SCHEMA" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_CLIENT_SSL" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_CURSOR_TYPE_FOR_UPDATE" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_CURSOR_TYPE_NO_CURSOR" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_CURSOR_TYPE_READ_ONLY" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_CURSOR_TYPE_SCROLLABLE" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_DATA_TRUNCATED" : { + "min" : "5.1.0", + "max" : null + }, + "MYSQLI_DEBUG_TRACE_ENABLED" : { + "min" : "5.3.0", + "max" : null + }, + "MYSQLI_ENUM_FLAG" : { + "min" : "5.3.0", + "max" : null + }, + "MYSQLI_GROUP_FLAG" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_INIT_COMMAND" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_MULTIPLE_KEY_FLAG" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_NOT_NULL_FLAG" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_NO_DATA" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_NO_DEFAULT_VALUE_FLAG" : { + "min" : "5.3.0", + "max" : null + }, + "MYSQLI_NUM" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_NUM_FLAG" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_ON_UPDATE_NOW_FLAG" : { + "min" : "5.3.0", + "max" : null + }, + "MYSQLI_OPT_CAN_HANDLE_EXPIRED_PASSWORDS" : { + "min" : "5.4.12", + "max" : null + }, + "MYSQLI_OPT_CONNECT_TIMEOUT" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_OPT_INT_AND_FLOAT_NATIVE" : { + "min" : "5.3.0", + "max" : null + }, + "MYSQLI_OPT_LOCAL_INFILE" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_OPT_NET_CMD_BUFFER_SIZE" : { + "min" : "5.3.0", + "max" : null + }, + "MYSQLI_OPT_NET_READ_BUFFER_SIZE" : { + "min" : "5.3.0", + "max" : null + }, + "MYSQLI_OPT_SSL_VERIFY_SERVER_CERT" : { + "min" : "5.3.4", + "max" : null + }, + "MYSQLI_PART_KEY_FLAG" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_PRI_KEY_FLAG" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_READ_DEFAULT_FILE" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_READ_DEFAULT_GROUP" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_REFRESH_BACKUP_LOG" : { + "min" : "5.3.0", + "max" : null + }, + "MYSQLI_REFRESH_GRANT" : { + "min" : "5.3.0", + "max" : null + }, + "MYSQLI_REFRESH_HOSTS" : { + "min" : "5.3.0", + "max" : null + }, + "MYSQLI_REFRESH_LOG" : { + "min" : "5.3.0", + "max" : null + }, + "MYSQLI_REFRESH_MASTER" : { + "min" : "5.3.0", + "max" : null + }, + "MYSQLI_REFRESH_SLAVE" : { + "min" : "5.3.0", + "max" : null + }, + "MYSQLI_REFRESH_STATUS" : { + "min" : "5.3.0", + "max" : null + }, + "MYSQLI_REFRESH_TABLES" : { + "min" : "5.3.0", + "max" : null + }, + "MYSQLI_REFRESH_THREADS" : { + "min" : "5.3.0", + "max" : null + }, + "MYSQLI_REPORT_ALL" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_REPORT_ERROR" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_REPORT_INDEX" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_REPORT_OFF" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_REPORT_STRICT" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_RPL_ADMIN" : { + "min" : "5.0.0", + "max" : "5.2.17" + }, + "MYSQLI_RPL_MASTER" : { + "min" : "5.0.0", + "max" : "5.2.17" + }, + "MYSQLI_RPL_SLAVE" : { + "min" : "5.0.0", + "max" : "5.2.17" + }, + "MYSQLI_SERVER_PS_OUT_PARAMS" : { + "min" : "5.3.4", + "max" : null + }, + "MYSQLI_SERVER_PUBLIC_KEY" : { + "min" : "5.5.0", + "max" : null + }, + "MYSQLI_SERVER_QUERY_NO_GOOD_INDEX_USED" : { + "min" : "5.3.0", + "max" : null + }, + "MYSQLI_SERVER_QUERY_NO_INDEX_USED" : { + "min" : "5.3.0", + "max" : null + }, + "MYSQLI_SERVER_QUERY_WAS_SLOW" : { + "min" : "5.3.0", + "max" : null + }, + "MYSQLI_SET_CHARSET_DIR" : { + "min" : "5.3.4", + "max" : null + }, + "MYSQLI_SET_CHARSET_NAME" : { + "min" : "5.2.5", + "max" : null + }, + "MYSQLI_SET_FLAG" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_STMT_ATTR_CURSOR_TYPE" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_STMT_ATTR_PREFETCH_ROWS" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_STORE_RESULT" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_TIMESTAMP_FLAG" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_TRANS_COR_AND_CHAIN" : { + "min" : "5.5.0", + "max" : null + }, + "MYSQLI_TRANS_COR_AND_NO_CHAIN" : { + "min" : "5.5.0", + "max" : null + }, + "MYSQLI_TRANS_COR_NO_RELEASE" : { + "min" : "5.5.0", + "max" : null + }, + "MYSQLI_TRANS_COR_RELEASE" : { + "min" : "5.5.0", + "max" : null + }, + "MYSQLI_TRANS_START_READ_ONLY" : { + "min" : "5.5.0", + "max" : null + }, + "MYSQLI_TRANS_START_READ_WRITE" : { + "min" : "5.5.0", + "max" : null + }, + "MYSQLI_TRANS_START_WITH_CONSISTENT_SNAPSHOT" : { + "min" : "5.5.0", + "max" : null + }, + "MYSQLI_TYPE_BIT" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_TYPE_BLOB" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_TYPE_CHAR" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_TYPE_DATE" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_TYPE_DATETIME" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_TYPE_DECIMAL" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_TYPE_DOUBLE" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_TYPE_ENUM" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_TYPE_FLOAT" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_TYPE_GEOMETRY" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_TYPE_INT24" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_TYPE_INTERVAL" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_TYPE_LONG" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_TYPE_LONGLONG" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_TYPE_LONG_BLOB" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_TYPE_MEDIUM_BLOB" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_TYPE_NEWDATE" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_TYPE_NEWDECIMAL" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_TYPE_NULL" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_TYPE_SET" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_TYPE_SHORT" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_TYPE_STRING" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_TYPE_TIME" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_TYPE_TIMESTAMP" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_TYPE_TINY" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_TYPE_TINY_BLOB" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_TYPE_VAR_STRING" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_TYPE_YEAR" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_UNIQUE_KEY_FLAG" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_UNSIGNED_FLAG" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_USE_RESULT" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQLI_ZEROFILL_FLAG" : { + "min" : "5.0.0", + "max" : null + }, + "MYSQL_ASSOC" : { + "min" : "4.0.0", + "max" : null + }, + "MYSQL_BOTH" : { + "min" : "4.0.0", + "max" : null + }, + "MYSQL_CLIENT_COMPRESS" : { + "min" : "4.3.0", + "max" : null + }, + "MYSQL_CLIENT_IGNORE_SPACE" : { + "min" : "4.3.0", + "max" : null + }, + "MYSQL_CLIENT_INTERACTIVE" : { + "min" : "4.3.0", + "max" : null + }, + "MYSQL_CLIENT_SSL" : { + "min" : "4.3.0", + "max" : null + }, + "MYSQL_NUM" : { + "min" : "4.0.0", + "max" : null + }, + "M_1_PI" : { + "min" : "4.0.0", + "max" : null + }, + "M_2_PI" : { + "min" : "4.0.0", + "max" : null + }, + "M_2_SQRTPI" : { + "min" : "4.0.0", + "max" : null + }, + "M_E" : { + "min" : "4.0.0", + "max" : null + }, + "M_EULER" : { + "min" : "4.0.0", + "max" : null + }, + "M_LN10" : { + "min" : "4.0.0", + "max" : null + }, + "M_LN2" : { + "min" : "4.0.0", + "max" : null + }, + "M_LNPI" : { + "min" : "4.0.0", + "max" : null + }, + "M_LOG10E" : { + "min" : "4.0.0", + "max" : null + }, + "M_LOG2E" : { + "min" : "4.0.0", + "max" : null + }, + "M_PI" : { + "min" : "4.0.0", + "max" : null + }, + "M_PI_2" : { + "min" : "4.0.0", + "max" : null + }, + "M_PI_4" : { + "min" : "4.0.0", + "max" : null + }, + "M_SQRT1_2" : { + "min" : "4.0.0", + "max" : null + }, + "M_SQRT2" : { + "min" : "4.0.0", + "max" : null + }, + "M_SQRT3" : { + "min" : "4.0.0", + "max" : null + }, + "M_SQRTPI" : { + "min" : "4.0.0", + "max" : null + }, + "NAN" : { + "min" : "4.0.0", + "max" : null + }, + "NOEXPR" : { + "min" : "4.1.0", + "max" : null + }, + "NULL" : { + "min" : "4.0.0", + "max" : null + }, + "PASSWORD_BCRYPT" : { + "min" : "5.5.0", + "max" : null + }, + "PASSWORD_BCRYPT_DEFAULT_COST" : { + "min" : "5.5.0", + "max" : null + }, + "PASSWORD_DEFAULT" : { + "min" : "5.5.0", + "max" : null + }, + "PATHINFO_BASENAME" : { + "min" : "4.0.0", + "max" : null + }, + "PATHINFO_DIRNAME" : { + "min" : "4.0.0", + "max" : null + }, + "PATHINFO_EXTENSION" : { + "min" : "4.0.0", + "max" : null + }, + "PATHINFO_FILENAME" : { + "min" : "4.0.0", + "max" : null + }, + "PATH_SEPARATOR" : { + "min" : "4.3.0", + "max" : null + }, + "PCNTL_E2BIG" : { + "min" : "5.3.4", + "max" : null + }, + "PCNTL_EACCES" : { + "min" : "5.3.4", + "max" : null + }, + "PCNTL_EAGAIN" : { + "min" : "5.3.4", + "max" : null + }, + "PCNTL_ECHILD" : { + "min" : "5.3.4", + "max" : null + }, + "PCNTL_EFAULT" : { + "min" : "5.3.4", + "max" : null + }, + "PCNTL_EINTR" : { + "min" : "5.3.4", + "max" : null + }, + "PCNTL_EINVAL" : { + "min" : "5.3.4", + "max" : null + }, + "PCNTL_EIO" : { + "min" : "5.3.4", + "max" : null + }, + "PCNTL_EISDIR" : { + "min" : "5.3.4", + "max" : null + }, + "PCNTL_ELIBBAD" : { + "min" : "5.3.4", + "max" : null + }, + "PCNTL_ELOOP" : { + "min" : "5.3.4", + "max" : null + }, + "PCNTL_EMFILE" : { + "min" : "5.3.4", + "max" : null + }, + "PCNTL_ENAMETOOLONG" : { + "min" : "5.3.4", + "max" : null + }, + "PCNTL_ENFILE" : { + "min" : "5.3.4", + "max" : null + }, + "PCNTL_ENOENT" : { + "min" : "5.3.4", + "max" : null + }, + "PCNTL_ENOEXEC" : { + "min" : "5.3.4", + "max" : null + }, + "PCNTL_ENOMEM" : { + "min" : "5.3.4", + "max" : null + }, + "PCNTL_ENOTDIR" : { + "min" : "5.3.4", + "max" : null + }, + "PCNTL_EPERM" : { + "min" : "5.3.4", + "max" : null + }, + "PCNTL_ESRCH" : { + "min" : "5.3.4", + "max" : null + }, + "PCNTL_ETXTBSY" : { + "min" : "5.3.4", + "max" : null + }, + "PCRE_VERSION" : { + "min" : "5.2.4", + "max" : null + }, + "PEAR_EXTENSION_DIR" : { + "min" : "4.0.0", + "max" : null + }, + "PEAR_INSTALL_DIR" : { + "min" : "4.0.0", + "max" : null + }, + "PHP_BINARY" : { + "min" : "5.4.0", + "max" : null + }, + "PHP_BINDIR" : { + "min" : "4.0.0", + "max" : null + }, + "PHP_CONFIG_FILE_PATH" : { + "min" : "4.0.0", + "max" : null + }, + "PHP_CONFIG_FILE_SCAN_DIR" : { + "min" : "4.0.0", + "max" : null + }, + "PHP_DATADIR" : { + "min" : "4.0.0", + "max" : null + }, + "PHP_DEBUG" : { + "min" : "5.2.7", + "max" : null + }, + "PHP_EOL" : { + "min" : "4.3.10", + "max" : null + }, + "PHP_EXTENSION_DIR" : { + "min" : "4.0.0", + "max" : null + }, + "PHP_EXTRA_VERSION" : { + "min" : "5.2.7", + "max" : null + }, + "PHP_INT_MAX" : { + "min" : "4.4.0", + "max" : null + }, + "PHP_INT_SIZE" : { + "min" : "4.4.0", + "max" : null + }, + "PHP_LIBDIR" : { + "min" : "4.0.0", + "max" : null + }, + "PHP_LOCALSTATEDIR" : { + "min" : "4.0.0", + "max" : null + }, + "PHP_MAJOR_VERSION" : { + "min" : "5.2.7", + "max" : null + }, + "PHP_MANDIR" : { + "min" : "5.3.7", + "max" : null + }, + "PHP_MAXPATHLEN" : { + "min" : "5.3.0", + "max" : null + }, + "PHP_MINOR_VERSION" : { + "min" : "5.2.7", + "max" : null + }, + "PHP_OS" : { + "min" : "4.0.0", + "max" : null + }, + "PHP_OUTPUT_HANDLER_CLEAN" : { + "min" : "5.4.0", + "max" : null + }, + "PHP_OUTPUT_HANDLER_CLEANABLE" : { + "min" : "5.4.0", + "max" : null + }, + "PHP_OUTPUT_HANDLER_CONT" : { + "min" : "4.0.0", + "max" : null + }, + "PHP_OUTPUT_HANDLER_DISABLED" : { + "min" : "5.4.0", + "max" : null + }, + "PHP_OUTPUT_HANDLER_END" : { + "min" : "4.0.0", + "max" : null + }, + "PHP_OUTPUT_HANDLER_FINAL" : { + "min" : "5.4.0", + "max" : null + }, + "PHP_OUTPUT_HANDLER_FLUSH" : { + "min" : "5.4.0", + "max" : null + }, + "PHP_OUTPUT_HANDLER_FLUSHABLE" : { + "min" : "5.4.0", + "max" : null + }, + "PHP_OUTPUT_HANDLER_REMOVABLE" : { + "min" : "5.4.0", + "max" : null + }, + "PHP_OUTPUT_HANDLER_START" : { + "min" : "4.0.0", + "max" : null + }, + "PHP_OUTPUT_HANDLER_STARTED" : { + "min" : "5.4.0", + "max" : null + }, + "PHP_OUTPUT_HANDLER_STDFLAGS" : { + "min" : "5.4.0", + "max" : null + }, + "PHP_OUTPUT_HANDLER_WRITE" : { + "min" : "5.4.0", + "max" : null + }, + "PHP_PREFIX" : { + "min" : "4.3.0", + "max" : null + }, + "PHP_QUERY_RFC1738" : { + "min" : "5.4.0", + "max" : null + }, + "PHP_QUERY_RFC3986" : { + "min" : "5.4.0", + "max" : null + }, + "PHP_RELEASE_VERSION" : { + "min" : "5.2.7", + "max" : null + }, + "PHP_ROUND_HALF_DOWN" : { + "min" : "5.3.0", + "max" : null + }, + "PHP_ROUND_HALF_EVEN" : { + "min" : "5.3.0", + "max" : null + }, + "PHP_ROUND_HALF_ODD" : { + "min" : "5.3.0", + "max" : null + }, + "PHP_ROUND_HALF_UP" : { + "min" : "5.3.0", + "max" : null + }, + "PHP_SAPI" : { + "min" : "4.2.0", + "max" : null + }, + "PHP_SHLIB_SUFFIX" : { + "min" : "4.3.0", + "max" : null + }, + "PHP_SYSCONFDIR" : { + "min" : "4.0.0", + "max" : null + }, + "PHP_URL_FRAGMENT" : { + "min" : "4.0.0", + "max" : null + }, + "PHP_URL_HOST" : { + "min" : "4.0.0", + "max" : null + }, + "PHP_URL_PASS" : { + "min" : "4.0.0", + "max" : null + }, + "PHP_URL_PATH" : { + "min" : "4.0.0", + "max" : null + }, + "PHP_URL_PORT" : { + "min" : "4.0.0", + "max" : null + }, + "PHP_URL_QUERY" : { + "min" : "4.0.0", + "max" : null + }, + "PHP_URL_SCHEME" : { + "min" : "4.0.0", + "max" : null + }, + "PHP_URL_USER" : { + "min" : "4.0.0", + "max" : null + }, + "PHP_VERSION" : { + "min" : "4.0.0", + "max" : null + }, + "PHP_VERSION_ID" : { + "min" : "5.2.7", + "max" : null + }, + "PHP_WINDOWS_NT_DOMAIN_CONTROLLER" : { + "min" : "5.3.0", + "max" : null + }, + "PHP_WINDOWS_NT_SERVER" : { + "min" : "5.3.0", + "max" : null + }, + "PHP_WINDOWS_NT_WORKSTATION" : { + "min" : "5.3.0", + "max" : null + }, + "PHP_WINDOWS_VERSION_BUILD" : { + "min" : "5.3.0", + "max" : null + }, + "PHP_WINDOWS_VERSION_MAJOR" : { + "min" : "5.3.0", + "max" : null + }, + "PHP_WINDOWS_VERSION_MINOR" : { + "min" : "5.3.0", + "max" : null + }, + "PHP_WINDOWS_VERSION_PLATFORM" : { + "min" : "5.3.0", + "max" : null + }, + "PHP_WINDOWS_VERSION_PRODUCTTYPE" : { + "min" : "5.3.0", + "max" : null + }, + "PHP_WINDOWS_VERSION_SP_MAJOR" : { + "min" : "5.3.0", + "max" : null + }, + "PHP_WINDOWS_VERSION_SP_MINOR" : { + "min" : "5.3.0", + "max" : null + }, + "PHP_WINDOWS_VERSION_SUITEMASK" : { + "min" : "5.3.0", + "max" : null + }, + "PHP_ZTS" : { + "min" : "5.2.7", + "max" : null + }, + "PM_STR" : { + "min" : "4.1.0", + "max" : null + }, + "PNG_ALL_FILTERS" : { + "min" : "4.0.0", + "max" : null + }, + "PNG_FILTER_AVG" : { + "min" : "4.0.0", + "max" : null + }, + "PNG_FILTER_NONE" : { + "min" : "4.0.0", + "max" : null + }, + "PNG_FILTER_PAETH" : { + "min" : "4.0.0", + "max" : null + }, + "PNG_FILTER_SUB" : { + "min" : "4.0.0", + "max" : null + }, + "PNG_FILTER_UP" : { + "min" : "4.0.0", + "max" : null + }, + "PNG_NO_FILTER" : { + "min" : "4.0.0", + "max" : null + }, + "POLL_ERR" : { + "min" : "5.3.0", + "max" : null + }, + "POLL_HUP" : { + "min" : "5.3.0", + "max" : null + }, + "POLL_IN" : { + "min" : "5.3.0", + "max" : null + }, + "POLL_MSG" : { + "min" : "5.3.0", + "max" : null + }, + "POLL_OUT" : { + "min" : "5.3.0", + "max" : null + }, + "POLL_PRI" : { + "min" : "5.3.0", + "max" : null + }, + "POSIX_F_OK" : { + "min" : "5.1.0", + "max" : null + }, + "POSIX_R_OK" : { + "min" : "5.1.0", + "max" : null + }, + "POSIX_S_IFBLK" : { + "min" : "5.1.0", + "max" : null + }, + "POSIX_S_IFCHR" : { + "min" : "5.1.0", + "max" : null + }, + "POSIX_S_IFIFO" : { + "min" : "5.1.0", + "max" : null + }, + "POSIX_S_IFREG" : { + "min" : "5.1.0", + "max" : null + }, + "POSIX_S_IFSOCK" : { + "min" : "5.1.0", + "max" : null + }, + "POSIX_W_OK" : { + "min" : "5.1.0", + "max" : null + }, + "POSIX_X_OK" : { + "min" : "5.1.0", + "max" : null + }, + "PREG_BACKTRACK_LIMIT_ERROR" : { + "min" : "5.2.0", + "max" : null + }, + "PREG_BAD_UTF8_ERROR" : { + "min" : "5.2.0", + "max" : null + }, + "PREG_BAD_UTF8_OFFSET_ERROR" : { + "min" : "5.2.9", + "max" : null + }, + "PREG_GREP_INVERT" : { + "min" : "4.0.0", + "max" : null + }, + "PREG_INTERNAL_ERROR" : { + "min" : "5.2.0", + "max" : null + }, + "PREG_NO_ERROR" : { + "min" : "5.2.0", + "max" : null + }, + "PREG_OFFSET_CAPTURE" : { + "min" : "4.3.0", + "max" : null + }, + "PREG_PATTERN_ORDER" : { + "min" : "4.0.0", + "max" : null + }, + "PREG_RECURSION_LIMIT_ERROR" : { + "min" : "5.2.0", + "max" : null + }, + "PREG_SET_ORDER" : { + "min" : "4.0.0", + "max" : null + }, + "PREG_SPLIT_DELIM_CAPTURE" : { + "min" : "4.0.5", + "max" : null + }, + "PREG_SPLIT_NO_EMPTY" : { + "min" : "4.0.0", + "max" : null + }, + "PREG_SPLIT_OFFSET_CAPTURE" : { + "min" : "4.3.0", + "max" : null + }, + "PRIO_PGRP" : { + "min" : "5.0.0", + "max" : null + }, + "PRIO_PROCESS" : { + "min" : "5.0.0", + "max" : null + }, + "PRIO_USER" : { + "min" : "5.0.0", + "max" : null + }, + "PSFS_ERR_FATAL" : { + "min" : "4.0.0", + "max" : null + }, + "PSFS_FEED_ME" : { + "min" : "4.0.0", + "max" : null + }, + "PSFS_FLAG_FLUSH_CLOSE" : { + "min" : "4.0.0", + "max" : null + }, + "PSFS_FLAG_FLUSH_INC" : { + "min" : "4.0.0", + "max" : null + }, + "PSFS_FLAG_NORMAL" : { + "min" : "4.0.0", + "max" : null + }, + "PSFS_PASS_ON" : { + "min" : "4.0.0", + "max" : null + }, + "RADIXCHAR" : { + "min" : "4.1.0", + "max" : null + }, + "SCANDIR_SORT_ASCENDING" : { + "min" : "5.4.0", + "max" : null + }, + "SCANDIR_SORT_DESCENDING" : { + "min" : "5.4.0", + "max" : null + }, + "SCANDIR_SORT_NONE" : { + "min" : "5.4.0", + "max" : null + }, + "SEEK_CUR" : { + "min" : "4.0.0", + "max" : null + }, + "SEEK_END" : { + "min" : "4.0.0", + "max" : null + }, + "SEEK_SET" : { + "min" : "4.0.0", + "max" : null + }, + "SEGV_ACCERR" : { + "min" : "5.3.0", + "max" : null + }, + "SEGV_MAPERR" : { + "min" : "5.3.0", + "max" : null + }, + "SIGABRT" : { + "min" : "4.1.0", + "max" : null + }, + "SIGALRM" : { + "min" : "4.1.0", + "max" : null + }, + "SIGBABY" : { + "min" : "4.1.0", + "max" : null + }, + "SIGBUS" : { + "min" : "4.1.0", + "max" : null + }, + "SIGCHLD" : { + "min" : "4.1.0", + "max" : null + }, + "SIGCLD" : { + "min" : "4.1.0", + "max" : null + }, + "SIGCONT" : { + "min" : "4.1.0", + "max" : null + }, + "SIGFPE" : { + "min" : "4.1.0", + "max" : null + }, + "SIGHUP" : { + "min" : "4.1.0", + "max" : null + }, + "SIGILL" : { + "min" : "4.1.0", + "max" : null + }, + "SIGINT" : { + "min" : "4.1.0", + "max" : null + }, + "SIGIO" : { + "min" : "4.1.0", + "max" : null + }, + "SIGIOT" : { + "min" : "4.1.0", + "max" : null + }, + "SIGKILL" : { + "min" : "4.1.0", + "max" : null + }, + "SIGPIPE" : { + "min" : "4.1.0", + "max" : null + }, + "SIGPOLL" : { + "min" : "4.1.0", + "max" : null + }, + "SIGPROF" : { + "min" : "4.1.0", + "max" : null + }, + "SIGPWR" : { + "min" : "4.1.0", + "max" : null + }, + "SIGQUIT" : { + "min" : "4.1.0", + "max" : null + }, + "SIGSEGV" : { + "min" : "4.1.0", + "max" : null + }, + "SIGSTKFLT" : { + "min" : "4.1.0", + "max" : null + }, + "SIGSTOP" : { + "min" : "4.1.0", + "max" : null + }, + "SIGSYS" : { + "min" : "4.1.0", + "max" : null + }, + "SIGTERM" : { + "min" : "4.1.0", + "max" : null + }, + "SIGTRAP" : { + "min" : "4.1.0", + "max" : null + }, + "SIGTSTP" : { + "min" : "4.1.0", + "max" : null + }, + "SIGTTIN" : { + "min" : "4.1.0", + "max" : null + }, + "SIGTTOU" : { + "min" : "4.1.0", + "max" : null + }, + "SIGURG" : { + "min" : "4.1.0", + "max" : null + }, + "SIGUSR1" : { + "min" : "4.1.0", + "max" : null + }, + "SIGUSR2" : { + "min" : "4.1.0", + "max" : null + }, + "SIGVTALRM" : { + "min" : "4.1.0", + "max" : null + }, + "SIGWINCH" : { + "min" : "4.1.0", + "max" : null + }, + "SIGXCPU" : { + "min" : "4.1.0", + "max" : null + }, + "SIGXFSZ" : { + "min" : "4.1.0", + "max" : null + }, + "SIG_BLOCK" : { + "min" : "5.3.0", + "max" : null + }, + "SIG_DFL" : { + "min" : "4.1.0", + "max" : null + }, + "SIG_ERR" : { + "min" : "4.1.0", + "max" : null + }, + "SIG_IGN" : { + "min" : "4.1.0", + "max" : null + }, + "SIG_SETMASK" : { + "min" : "5.3.0", + "max" : null + }, + "SIG_UNBLOCK" : { + "min" : "5.3.0", + "max" : null + }, + "SI_ASYNCIO" : { + "min" : "5.3.0", + "max" : null + }, + "SI_KERNEL" : { + "min" : "5.3.0", + "max" : null + }, + "SI_MESGQ" : { + "min" : "5.3.0", + "max" : null + }, + "SI_NOINFO" : { + "min" : "5.3.0", + "max" : null + }, + "SI_QUEUE" : { + "min" : "5.3.0", + "max" : null + }, + "SI_SIGIO" : { + "min" : "5.3.0", + "max" : null + }, + "SI_TIMER" : { + "min" : "5.3.0", + "max" : null + }, + "SI_TKILL" : { + "min" : "5.3.0", + "max" : null + }, + "SI_USER" : { + "min" : "5.3.0", + "max" : null + }, + "SORT_ASC" : { + "min" : "4.0.0", + "max" : null + }, + "SORT_DESC" : { + "min" : "4.0.0", + "max" : null + }, + "SORT_FLAG_CASE" : { + "min" : "5.4.0", + "max" : null + }, + "SORT_LOCALE_STRING" : { + "min" : "4.0.0", + "max" : null + }, + "SORT_NATURAL" : { + "min" : "5.4.0", + "max" : null + }, + "SORT_NUMERIC" : { + "min" : "4.0.0", + "max" : null + }, + "SORT_REGULAR" : { + "min" : "4.0.0", + "max" : null + }, + "SORT_STRING" : { + "min" : "4.0.0", + "max" : null + }, + "STDERR" : { + "min" : "4.3.0", + "max" : null + }, + "STDIN" : { + "min" : "4.3.0", + "max" : null + }, + "STDOUT" : { + "min" : "4.3.0", + "max" : null + }, + "STREAM_BUFFER_FULL" : { + "min" : "5.3.0", + "max" : null + }, + "STREAM_BUFFER_LINE" : { + "min" : "5.3.0", + "max" : null + }, + "STREAM_BUFFER_NONE" : { + "min" : "5.3.0", + "max" : null + }, + "STREAM_CAST_AS_STREAM" : { + "min" : "5.3.0", + "max" : null + }, + "STREAM_CAST_FOR_SELECT" : { + "min" : "5.3.0", + "max" : null + }, + "STREAM_CLIENT_ASYNC_CONNECT" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_CLIENT_CONNECT" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_CLIENT_PERSISTENT" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_CRYPTO_METHOD_SSLv23_CLIENT" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_CRYPTO_METHOD_SSLv23_SERVER" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_CRYPTO_METHOD_SSLv2_CLIENT" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_CRYPTO_METHOD_SSLv2_SERVER" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_CRYPTO_METHOD_SSLv3_CLIENT" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_CRYPTO_METHOD_SSLv3_SERVER" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_CRYPTO_METHOD_TLS_CLIENT" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_CRYPTO_METHOD_TLS_SERVER" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_ENFORCE_SAFE_MODE" : { + "min" : "4.0.0", + "max" : "5.3.28" + }, + "STREAM_FILTER_ALL" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_FILTER_READ" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_FILTER_WRITE" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_IGNORE_URL" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_IPPROTO_ICMP" : { + "min" : "5.1.0", + "max" : null + }, + "STREAM_IPPROTO_IP" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_IPPROTO_RAW" : { + "min" : "5.1.0", + "max" : null + }, + "STREAM_IPPROTO_TCP" : { + "min" : "5.1.0", + "max" : null + }, + "STREAM_IPPROTO_UDP" : { + "min" : "5.1.0", + "max" : null + }, + "STREAM_IS_URL" : { + "min" : "5.2.4", + "max" : null + }, + "STREAM_META_ACCESS" : { + "min" : "5.4.0", + "max" : null + }, + "STREAM_META_GROUP" : { + "min" : "5.4.0", + "max" : null + }, + "STREAM_META_GROUP_NAME" : { + "min" : "5.4.0", + "max" : null + }, + "STREAM_META_OWNER" : { + "min" : "5.4.0", + "max" : null + }, + "STREAM_META_OWNER_NAME" : { + "min" : "5.4.0", + "max" : null + }, + "STREAM_META_TOUCH" : { + "min" : "5.4.0", + "max" : null + }, + "STREAM_MKDIR_RECURSIVE" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_MUST_SEEK" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_NOTIFY_AUTH_REQUIRED" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_NOTIFY_AUTH_RESULT" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_NOTIFY_COMPLETED" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_NOTIFY_CONNECT" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_NOTIFY_FAILURE" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_NOTIFY_FILE_SIZE_IS" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_NOTIFY_MIME_TYPE_IS" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_NOTIFY_PROGRESS" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_NOTIFY_REDIRECTED" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_NOTIFY_RESOLVE" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_NOTIFY_SEVERITY_ERR" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_NOTIFY_SEVERITY_INFO" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_NOTIFY_SEVERITY_WARN" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_OOB" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_OPTION_BLOCKING" : { + "min" : "5.3.0", + "max" : null + }, + "STREAM_OPTION_READ_BUFFER" : { + "min" : "5.3.0", + "max" : null + }, + "STREAM_OPTION_READ_TIMEOUT" : { + "min" : "5.3.0", + "max" : null + }, + "STREAM_OPTION_WRITE_BUFFER" : { + "min" : "5.3.0", + "max" : null + }, + "STREAM_PEEK" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_PF_INET" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_PF_INET6" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_PF_UNIX" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_REPORT_ERRORS" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_SERVER_BIND" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_SERVER_LISTEN" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_SHUT_RD" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_SHUT_RDWR" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_SHUT_WR" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_SOCK_DGRAM" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_SOCK_RAW" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_SOCK_RDM" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_SOCK_SEQPACKET" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_SOCK_STREAM" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_URL_STAT_LINK" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_URL_STAT_QUIET" : { + "min" : "4.0.0", + "max" : null + }, + "STREAM_USE_PATH" : { + "min" : "4.0.0", + "max" : null + }, + "STR_PAD_BOTH" : { + "min" : "4.0.0", + "max" : null + }, + "STR_PAD_LEFT" : { + "min" : "4.0.0", + "max" : null + }, + "STR_PAD_RIGHT" : { + "min" : "4.0.0", + "max" : null + }, + "SUNFUNCS_RET_DOUBLE" : { + "min" : "5.1.2", + "max" : null + }, + "SUNFUNCS_RET_STRING" : { + "min" : "5.1.2", + "max" : null + }, + "SUNFUNCS_RET_TIMESTAMP" : { + "min" : "5.1.2", + "max" : null + }, + "THOUSEP" : { + "min" : "4.1.0", + "max" : null + }, + "TRAP_BRKPT" : { + "min" : "5.3.0", + "max" : null + }, + "TRAP_TRACE" : { + "min" : "5.3.0", + "max" : null + }, + "TRUE" : { + "min" : "4.0.0", + "max" : null + }, + "T_FMT" : { + "min" : "4.1.0", + "max" : null + }, + "T_FMT_AMPM" : { + "min" : "4.1.0", + "max" : null + }, + "ULOC_ACTUAL_LOCALE" : { + "min" : "5.2.0", + "max" : null + }, + "ULOC_VALID_LOCALE" : { + "min" : "5.2.0", + "max" : null + }, + "UPLOAD_ERR_CANT_WRITE" : { + "min" : "5.1.0", + "max" : null + }, + "UPLOAD_ERR_EXTENSION" : { + "min" : "5.2.0", + "max" : null + }, + "UPLOAD_ERR_FORM_SIZE" : { + "min" : "4.3.0", + "max" : null + }, + "UPLOAD_ERR_INI_SIZE" : { + "min" : "4.3.0", + "max" : null + }, + "UPLOAD_ERR_NO_FILE" : { + "min" : "4.3.0", + "max" : null + }, + "UPLOAD_ERR_NO_TMP_DIR" : { + "min" : "4.3.10", + "max" : null + }, + "UPLOAD_ERR_OK" : { + "min" : "4.3.0", + "max" : null + }, + "UPLOAD_ERR_PARTIAL" : { + "min" : "4.3.0", + "max" : null + }, + "U_AMBIGUOUS_ALIAS_WARNING" : { + "min" : "5.2.0", + "max" : null + }, + "U_BAD_VARIABLE_DEFINITION" : { + "min" : "5.2.0", + "max" : null + }, + "U_BRK_ASSIGN_ERROR" : { + "min" : "5.2.0", + "max" : null + }, + "U_BRK_ERROR_LIMIT" : { + "min" : "5.2.0", + "max" : null + }, + "U_BRK_ERROR_START" : { + "min" : "5.2.0", + "max" : null + }, + "U_BRK_HEX_DIGITS_EXPECTED" : { + "min" : "5.2.0", + "max" : null + }, + "U_BRK_INIT_ERROR" : { + "min" : "5.2.0", + "max" : null + }, + "U_BRK_INTERNAL_ERROR" : { + "min" : "5.2.0", + "max" : null + }, + "U_BRK_MALFORMED_RULE_TAG" : { + "min" : "5.2.0", + "max" : null + }, + "U_BRK_MISMATCHED_PAREN" : { + "min" : "5.2.0", + "max" : null + }, + "U_BRK_NEW_LINE_IN_QUOTED_STRING" : { + "min" : "5.2.0", + "max" : null + }, + "U_BRK_RULE_EMPTY_SET" : { + "min" : "5.2.0", + "max" : null + }, + "U_BRK_RULE_SYNTAX" : { + "min" : "5.2.0", + "max" : null + }, + "U_BRK_SEMICOLON_EXPECTED" : { + "min" : "5.2.0", + "max" : null + }, + "U_BRK_UNCLOSED_SET" : { + "min" : "5.2.0", + "max" : null + }, + "U_BRK_UNDEFINED_VARIABLE" : { + "min" : "5.2.0", + "max" : null + }, + "U_BRK_UNRECOGNIZED_OPTION" : { + "min" : "5.2.0", + "max" : null + }, + "U_BRK_VARIABLE_REDFINITION" : { + "min" : "5.2.0", + "max" : null + }, + "U_BUFFER_OVERFLOW_ERROR" : { + "min" : "5.2.0", + "max" : null + }, + "U_CE_NOT_FOUND_ERROR" : { + "min" : "5.2.0", + "max" : null + }, + "U_COLLATOR_VERSION_MISMATCH" : { + "min" : "5.2.0", + "max" : null + }, + "U_DIFFERENT_UCA_VERSION" : { + "min" : "5.2.0", + "max" : null + }, + "U_ENUM_OUT_OF_SYNC_ERROR" : { + "min" : "5.2.0", + "max" : null + }, + "U_ERROR_LIMIT" : { + "min" : "5.2.0", + "max" : null + }, + "U_ERROR_WARNING_LIMIT" : { + "min" : "5.2.0", + "max" : null + }, + "U_ERROR_WARNING_START" : { + "min" : "5.2.0", + "max" : null + }, + "U_FILE_ACCESS_ERROR" : { + "min" : "5.2.0", + "max" : null + }, + "U_FMT_PARSE_ERROR_LIMIT" : { + "min" : "5.2.0", + "max" : null + }, + "U_FMT_PARSE_ERROR_START" : { + "min" : "5.2.0", + "max" : null + }, + "U_ILLEGAL_ARGUMENT_ERROR" : { + "min" : "5.2.0", + "max" : null + }, + "U_ILLEGAL_CHARACTER" : { + "min" : "5.2.0", + "max" : null + }, + "U_ILLEGAL_CHAR_FOUND" : { + "min" : "5.2.0", + "max" : null + }, + "U_ILLEGAL_CHAR_IN_SEGMENT" : { + "min" : "5.2.0", + "max" : null + }, + "U_ILLEGAL_ESCAPE_SEQUENCE" : { + "min" : "5.2.0", + "max" : null + }, + "U_ILLEGAL_PAD_POSITION" : { + "min" : "5.2.0", + "max" : null + }, + "U_INDEX_OUTOFBOUNDS_ERROR" : { + "min" : "5.2.0", + "max" : null + }, + "U_INTERNAL_PROGRAM_ERROR" : { + "min" : "5.2.0", + "max" : null + }, + "U_INTERNAL_TRANSLITERATOR_ERROR" : { + "min" : "5.2.0", + "max" : null + }, + "U_INVALID_CHAR_FOUND" : { + "min" : "5.2.0", + "max" : null + }, + "U_INVALID_FORMAT_ERROR" : { + "min" : "5.2.0", + "max" : null + }, + "U_INVALID_FUNCTION" : { + "min" : "5.2.0", + "max" : null + }, + "U_INVALID_ID" : { + "min" : "5.2.0", + "max" : null + }, + "U_INVALID_PROPERTY_PATTERN" : { + "min" : "5.2.0", + "max" : null + }, + "U_INVALID_RBT_SYNTAX" : { + "min" : "5.2.0", + "max" : null + }, + "U_INVALID_STATE_ERROR" : { + "min" : "5.2.0", + "max" : null + }, + "U_INVALID_TABLE_FILE" : { + "min" : "5.2.0", + "max" : null + }, + "U_INVALID_TABLE_FORMAT" : { + "min" : "5.2.0", + "max" : null + }, + "U_INVARIANT_CONVERSION_ERROR" : { + "min" : "5.2.0", + "max" : null + }, + "U_MALFORMED_EXPONENTIAL_PATTERN" : { + "min" : "5.2.0", + "max" : null + }, + "U_MALFORMED_PRAGMA" : { + "min" : "5.2.0", + "max" : null + }, + "U_MALFORMED_RULE" : { + "min" : "5.2.0", + "max" : null + }, + "U_MALFORMED_SET" : { + "min" : "5.2.0", + "max" : null + }, + "U_MALFORMED_SYMBOL_REFERENCE" : { + "min" : "5.2.0", + "max" : null + }, + "U_MALFORMED_UNICODE_ESCAPE" : { + "min" : "5.2.0", + "max" : null + }, + "U_MALFORMED_VARIABLE_DEFINITION" : { + "min" : "5.2.0", + "max" : null + }, + "U_MALFORMED_VARIABLE_REFERENCE" : { + "min" : "5.2.0", + "max" : null + }, + "U_MEMORY_ALLOCATION_ERROR" : { + "min" : "5.2.0", + "max" : null + }, + "U_MESSAGE_PARSE_ERROR" : { + "min" : "5.2.0", + "max" : null + }, + "U_MISMATCHED_SEGMENT_DELIMITERS" : { + "min" : "5.2.0", + "max" : null + }, + "U_MISPLACED_ANCHOR_START" : { + "min" : "5.2.0", + "max" : null + }, + "U_MISPLACED_COMPOUND_FILTER" : { + "min" : "5.2.0", + "max" : null + }, + "U_MISPLACED_CURSOR_OFFSET" : { + "min" : "5.2.0", + "max" : null + }, + "U_MISPLACED_QUANTIFIER" : { + "min" : "5.2.0", + "max" : null + }, + "U_MISSING_OPERATOR" : { + "min" : "5.2.0", + "max" : null + }, + "U_MISSING_RESOURCE_ERROR" : { + "min" : "5.2.0", + "max" : null + }, + "U_MISSING_SEGMENT_CLOSE" : { + "min" : "5.2.0", + "max" : null + }, + "U_MULTIPLE_ANTE_CONTEXTS" : { + "min" : "5.2.0", + "max" : null + }, + "U_MULTIPLE_COMPOUND_FILTERS" : { + "min" : "5.2.0", + "max" : null + }, + "U_MULTIPLE_CURSORS" : { + "min" : "5.2.0", + "max" : null + }, + "U_MULTIPLE_DECIMAL_SEPARATORS" : { + "min" : "5.2.0", + "max" : null + }, + "U_MULTIPLE_DECIMAL_SEPERATORS" : { + "min" : "5.2.0", + "max" : null + }, + "U_MULTIPLE_EXPONENTIAL_SYMBOLS" : { + "min" : "5.2.0", + "max" : null + }, + "U_MULTIPLE_PAD_SPECIFIERS" : { + "min" : "5.2.0", + "max" : null + }, + "U_MULTIPLE_PERCENT_SYMBOLS" : { + "min" : "5.2.0", + "max" : null + }, + "U_MULTIPLE_PERMILL_SYMBOLS" : { + "min" : "5.2.0", + "max" : null + }, + "U_MULTIPLE_POST_CONTEXTS" : { + "min" : "5.2.0", + "max" : null + }, + "U_NO_SPACE_AVAILABLE" : { + "min" : "5.2.0", + "max" : null + }, + "U_NO_WRITE_PERMISSION" : { + "min" : "5.2.0", + "max" : null + }, + "U_PARSE_ERROR" : { + "min" : "5.2.0", + "max" : null + }, + "U_PARSE_ERROR_LIMIT" : { + "min" : "5.2.0", + "max" : null + }, + "U_PARSE_ERROR_START" : { + "min" : "5.2.0", + "max" : null + }, + "U_PATTERN_SYNTAX_ERROR" : { + "min" : "5.2.0", + "max" : null + }, + "U_PRIMARY_TOO_LONG_ERROR" : { + "min" : "5.2.0", + "max" : null + }, + "U_REGEX_BAD_ESCAPE_SEQUENCE" : { + "min" : "5.2.0", + "max" : null + }, + "U_REGEX_BAD_INTERVAL" : { + "min" : "5.2.0", + "max" : null + }, + "U_REGEX_ERROR_LIMIT" : { + "min" : "5.2.0", + "max" : null + }, + "U_REGEX_ERROR_START" : { + "min" : "5.2.0", + "max" : null + }, + "U_REGEX_INTERNAL_ERROR" : { + "min" : "5.2.0", + "max" : null + }, + "U_REGEX_INVALID_BACK_REF" : { + "min" : "5.2.0", + "max" : null + }, + "U_REGEX_INVALID_FLAG" : { + "min" : "5.2.0", + "max" : null + }, + "U_REGEX_INVALID_STATE" : { + "min" : "5.2.0", + "max" : null + }, + "U_REGEX_LOOK_BEHIND_LIMIT" : { + "min" : "5.2.0", + "max" : null + }, + "U_REGEX_MAX_LT_MIN" : { + "min" : "5.2.0", + "max" : null + }, + "U_REGEX_MISMATCHED_PAREN" : { + "min" : "5.2.0", + "max" : null + }, + "U_REGEX_NUMBER_TOO_BIG" : { + "min" : "5.2.0", + "max" : null + }, + "U_REGEX_PROPERTY_SYNTAX" : { + "min" : "5.2.0", + "max" : null + }, + "U_REGEX_RULE_SYNTAX" : { + "min" : "5.2.0", + "max" : null + }, + "U_REGEX_SET_CONTAINS_STRING" : { + "min" : "5.2.0", + "max" : null + }, + "U_REGEX_UNIMPLEMENTED" : { + "min" : "5.2.0", + "max" : null + }, + "U_RESOURCE_TYPE_MISMATCH" : { + "min" : "5.2.0", + "max" : null + }, + "U_RULE_MASK_ERROR" : { + "min" : "5.2.0", + "max" : null + }, + "U_SAFECLONE_ALLOCATED_WARNING" : { + "min" : "5.2.0", + "max" : null + }, + "U_SORT_KEY_TOO_SHORT_WARNING" : { + "min" : "5.2.0", + "max" : null + }, + "U_STANDARD_ERROR_LIMIT" : { + "min" : "5.2.0", + "max" : null + }, + "U_STATE_OLD_WARNING" : { + "min" : "5.2.0", + "max" : null + }, + "U_STATE_TOO_OLD_ERROR" : { + "min" : "5.2.0", + "max" : null + }, + "U_STRINGPREP_CHECK_BIDI_ERROR" : { + "min" : "5.2.0", + "max" : null + }, + "U_STRINGPREP_PROHIBITED_ERROR" : { + "min" : "5.2.0", + "max" : null + }, + "U_STRINGPREP_UNASSIGNED_ERROR" : { + "min" : "5.2.0", + "max" : null + }, + "U_STRING_NOT_TERMINATED_WARNING" : { + "min" : "5.2.0", + "max" : null + }, + "U_TOO_MANY_ALIASES_ERROR" : { + "min" : "5.2.0", + "max" : null + }, + "U_TRAILING_BACKSLASH" : { + "min" : "5.2.0", + "max" : null + }, + "U_TRUNCATED_CHAR_FOUND" : { + "min" : "5.2.0", + "max" : null + }, + "U_UNCLOSED_SEGMENT" : { + "min" : "5.2.0", + "max" : null + }, + "U_UNDEFINED_SEGMENT_REFERENCE" : { + "min" : "5.2.0", + "max" : null + }, + "U_UNDEFINED_VARIABLE" : { + "min" : "5.2.0", + "max" : null + }, + "U_UNEXPECTED_TOKEN" : { + "min" : "5.2.0", + "max" : null + }, + "U_UNMATCHED_BRACES" : { + "min" : "5.2.0", + "max" : null + }, + "U_UNQUOTED_SPECIAL" : { + "min" : "5.2.0", + "max" : null + }, + "U_UNSUPPORTED_ATTRIBUTE" : { + "min" : "5.2.0", + "max" : null + }, + "U_UNSUPPORTED_ERROR" : { + "min" : "5.2.0", + "max" : null + }, + "U_UNSUPPORTED_ESCAPE_SEQUENCE" : { + "min" : "5.2.0", + "max" : null + }, + "U_UNSUPPORTED_PROPERTY" : { + "min" : "5.2.0", + "max" : null + }, + "U_UNTERMINATED_QUOTE" : { + "min" : "5.2.0", + "max" : null + }, + "U_USELESS_COLLATOR_ERROR" : { + "min" : "5.2.0", + "max" : null + }, + "U_USING_DEFAULT_WARNING" : { + "min" : "5.2.0", + "max" : null + }, + "U_USING_FALLBACK_WARNING" : { + "min" : "5.2.0", + "max" : null + }, + "U_VARIABLE_RANGE_EXHAUSTED" : { + "min" : "5.2.0", + "max" : null + }, + "U_VARIABLE_RANGE_OVERLAP" : { + "min" : "5.2.0", + "max" : null + }, + "U_ZERO_ERROR" : { + "min" : "5.2.0", + "max" : null + }, + "WNOHANG" : { + "min" : "4.1.0", + "max" : null + }, + "WUNTRACED" : { + "min" : "4.1.0", + "max" : null + }, + "XML_ERROR_ASYNC_ENTITY" : { + "min" : "4.0.0", + "max" : null + }, + "XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF" : { + "min" : "4.0.0", + "max" : null + }, + "XML_ERROR_BAD_CHAR_REF" : { + "min" : "4.0.0", + "max" : null + }, + "XML_ERROR_BINARY_ENTITY_REF" : { + "min" : "4.0.0", + "max" : null + }, + "XML_ERROR_DUPLICATE_ATTRIBUTE" : { + "min" : "4.0.0", + "max" : null + }, + "XML_ERROR_EXTERNAL_ENTITY_HANDLING" : { + "min" : "4.0.0", + "max" : null + }, + "XML_ERROR_INCORRECT_ENCODING" : { + "min" : "4.0.0", + "max" : null + }, + "XML_ERROR_INVALID_TOKEN" : { + "min" : "4.0.0", + "max" : null + }, + "XML_ERROR_JUNK_AFTER_DOC_ELEMENT" : { + "min" : "4.0.0", + "max" : null + }, + "XML_ERROR_MISPLACED_XML_PI" : { + "min" : "4.0.0", + "max" : null + }, + "XML_ERROR_NONE" : { + "min" : "4.0.0", + "max" : null + }, + "XML_ERROR_NO_ELEMENTS" : { + "min" : "4.0.0", + "max" : null + }, + "XML_ERROR_NO_MEMORY" : { + "min" : "4.0.0", + "max" : null + }, + "XML_ERROR_PARAM_ENTITY_REF" : { + "min" : "4.0.0", + "max" : null + }, + "XML_ERROR_PARTIAL_CHAR" : { + "min" : "4.0.0", + "max" : null + }, + "XML_ERROR_RECURSIVE_ENTITY_REF" : { + "min" : "4.0.0", + "max" : null + }, + "XML_ERROR_SYNTAX" : { + "min" : "4.0.0", + "max" : null + }, + "XML_ERROR_TAG_MISMATCH" : { + "min" : "4.0.0", + "max" : null + }, + "XML_ERROR_UNCLOSED_CDATA_SECTION" : { + "min" : "4.0.0", + "max" : null + }, + "XML_ERROR_UNCLOSED_TOKEN" : { + "min" : "4.0.0", + "max" : null + }, + "XML_ERROR_UNDEFINED_ENTITY" : { + "min" : "4.0.0", + "max" : null + }, + "XML_ERROR_UNKNOWN_ENCODING" : { + "min" : "4.0.0", + "max" : null + }, + "XML_OPTION_CASE_FOLDING" : { + "min" : "4.0.0", + "max" : null + }, + "XML_OPTION_SKIP_TAGSTART" : { + "min" : "4.0.0", + "max" : null + }, + "XML_OPTION_SKIP_WHITE" : { + "min" : "4.0.0", + "max" : null + }, + "XML_OPTION_TARGET_ENCODING" : { + "min" : "4.0.0", + "max" : null + }, + "XML_SAX_IMPL" : { + "min" : "4.0.0", + "max" : null + }, + "YAML_ANY_BREAK" : { + "min" : "5.2.0", + "max" : null + }, + "YAML_ANY_ENCODING" : { + "min" : "5.2.0", + "max" : null + }, + "YAML_ANY_SCALAR_STYLE" : { + "min" : "5.2.0", + "max" : null + }, + "YAML_BINARY_TAG" : { + "min" : "5.2.0", + "max" : null + }, + "YAML_BOOL_TAG" : { + "min" : "5.2.0", + "max" : null + }, + "YAML_CRLN_BREAK" : { + "min" : "5.2.0", + "max" : null + }, + "YAML_CR_BREAK" : { + "min" : "5.2.0", + "max" : null + }, + "YAML_DOUBLE_QUOTED_SCALAR_STYLE" : { + "min" : "5.2.0", + "max" : null + }, + "YAML_FLOAT_TAG" : { + "min" : "5.2.0", + "max" : null + }, + "YAML_FOLDED_SCALAR_STYLE" : { + "min" : "5.2.0", + "max" : null + }, + "YAML_INT_TAG" : { + "min" : "5.2.0", + "max" : null + }, + "YAML_LITERAL_SCALAR_STYLE" : { + "min" : "5.2.0", + "max" : null + }, + "YAML_LN_BREAK" : { + "min" : "5.2.0", + "max" : null + }, + "YAML_MAP_TAG" : { + "min" : "5.2.0", + "max" : null + }, + "YAML_MERGE_TAG" : { + "min" : "5.2.0", + "max" : null + }, + "YAML_NULL_TAG" : { + "min" : "5.2.0", + "max" : null + }, + "YAML_PHP_TAG" : { + "min" : "5.2.0", + "max" : null + }, + "YAML_PLAIN_SCALAR_STYLE" : { + "min" : "5.2.0", + "max" : null + }, + "YAML_SEQ_TAG" : { + "min" : "5.2.0", + "max" : null + }, + "YAML_SINGLE_QUOTED_SCALAR_STYLE" : { + "min" : "5.2.0", + "max" : null + }, + "YAML_STR_TAG" : { + "min" : "5.2.0", + "max" : null + }, + "YAML_TIMESTAMP_TAG" : { + "min" : "5.2.0", + "max" : null + }, + "YAML_UTF16BE_ENCODING" : { + "min" : "5.2.0", + "max" : null + }, + "YAML_UTF16LE_ENCODING" : { + "min" : "5.2.0", + "max" : null + }, + "YAML_UTF8_ENCODING" : { + "min" : "5.2.0", + "max" : null + }, + "YESEXPR" : { + "min" : "4.1.0", + "max" : null + }, + "ZEND_DEBUG_BUILD" : { + "min" : "5.3.0", + "max" : null + }, + "ZEND_MULTIBYTE" : { + "min" : "5.3.4", + "max" : "5.3.28" + }, + "ZEND_THREAD_SAFE" : { + "min" : "4.0.0", + "max" : null + }, + "__CLASS__" : { + "min" : "4.3.0", + "max" : null + }, + "__COMPILER_HALT_OFFSET__" : { + "min" : "5.1.0", + "max" : null + }, + "__DIR__" : { + "min" : "5.3.0", + "max" : null + }, + "__FILE__" : { + "min" : "4.0.0", + "max" : null + }, + "__FUNCTION__" : { + "min" : "4.3.0", + "max" : null + }, + "__LINE__" : { + "min" : "4.0.0", + "max" : null + }, + "__METHOD__" : { + "min" : "5.0.0", + "max" : null + }, + "__NAMESPACE__" : { + "min" : "5.3.0", + "max" : null + }, + "__TRAIT__" : { + "min" : "5.4.0", + "max" : null + }, + "http\\Client\\Curl\\AUTH_ANY" : { + "min" : "5.3.0", + "max" : null + }, + "http\\Client\\Curl\\AUTH_BASIC" : { + "min" : "5.3.0", + "max" : null + }, + "http\\Client\\Curl\\AUTH_DIGEST" : { + "min" : "5.3.0", + "max" : null + }, + "http\\Client\\Curl\\AUTH_DIGEST_IE" : { + "min" : "5.3.0", + "max" : null + }, + "http\\Client\\Curl\\AUTH_GSSNEG" : { + "min" : "5.3.0", + "max" : null + }, + "http\\Client\\Curl\\AUTH_NTLM" : { + "min" : "5.3.0", + "max" : null + }, + "http\\Client\\Curl\\HTTP_VERSION_1_0" : { + "min" : "5.3.0", + "max" : null + }, + "http\\Client\\Curl\\HTTP_VERSION_1_1" : { + "min" : "5.3.0", + "max" : null + }, + "http\\Client\\Curl\\HTTP_VERSION_ANY" : { + "min" : "5.3.0", + "max" : null + }, + "http\\Client\\Curl\\IPRESOLVE_ANY" : { + "min" : "5.3.0", + "max" : null + }, + "http\\Client\\Curl\\IPRESOLVE_V4" : { + "min" : "5.3.0", + "max" : null + }, + "http\\Client\\Curl\\IPRESOLVE_V6" : { + "min" : "5.3.0", + "max" : null + }, + "http\\Client\\Curl\\POSTREDIR_301" : { + "min" : "5.3.0", + "max" : null + }, + "http\\Client\\Curl\\POSTREDIR_302" : { + "min" : "5.3.0", + "max" : null + }, + "http\\Client\\Curl\\POSTREDIR_ALL" : { + "min" : "5.3.0", + "max" : null + }, + "http\\Client\\Curl\\PROXY_HTTP" : { + "min" : "5.3.0", + "max" : null + }, + "http\\Client\\Curl\\PROXY_HTTP_1_0" : { + "min" : "5.3.0", + "max" : null + }, + "http\\Client\\Curl\\PROXY_SOCKS4" : { + "min" : "5.3.0", + "max" : null + }, + "http\\Client\\Curl\\PROXY_SOCKS4A" : { + "min" : "5.3.0", + "max" : null + }, + "http\\Client\\Curl\\PROXY_SOCKS5" : { + "min" : "5.3.0", + "max" : null + }, + "http\\Client\\Curl\\PROXY_SOCKS5_HOSTNAME" : { + "min" : "5.3.0", + "max" : null + }, + "http\\Client\\Curl\\SSL_VERSION_ANY" : { + "min" : "5.3.0", + "max" : null + }, + "http\\Client\\Curl\\SSL_VERSION_SSLv2" : { + "min" : "5.3.0", + "max" : null + }, + "http\\Client\\Curl\\SSL_VERSION_SSLv3" : { + "min" : "5.3.0", + "max" : null + }, + "http\\Client\\Curl\\SSL_VERSION_TLSv1" : { + "min" : "5.3.0", + "max" : null + } + }, + "classMethods" : { + "DateTime" : { + "diff" : { + "min" : "5.3.0", + "max" : null + } + }, + "Directory" : { + "close" : { + "min" : "4.0.0", + "max" : null + }, + "read" : { + "min" : "4.0.0", + "max" : null + }, + "rewind" : { + "min" : "4.0.0", + "max" : null + } + }, + "php_user_filter" : { + "filter" : { + "min" : "5.0.0", + "max" : null + }, + "onClose" : { + "min" : "5.0.0", + "max" : null + }, + "onCreate" : { + "min" : "5.0.0", + "max" : null + } + } + }, "functions_windows" : { "apache_child_terminate" : "", "chroot" : "", "getrusage" : "", "imagecreatefromxpm" : "", "lchgrp" : "", "lchown" : "", "nl_langinfo" : "", "strptime" : "", "sys_getloadavg" : "", "checkdnsrr" : "5.3.0", "dns_get_record" : "5.3.0", "fnmatch" : "5.3.0", "getmxrr" : "5.3.0", "getopt" : "5.3.0", "imagecolorclosesthwb" : "5.3.0", "inet_ntop" : "5.3.0", "inet_pton" : "5.3.0", "link" : "5.3.0", "linkinfo" : "5.3.0", "readlink" : "5.3.0", "socket_create_pair" : "5.3.0", "stream_socket_pair" : "5.3.0", "symlink" : "5.3.0", "time_nanosleep" : "5.3.0", "time_sleep_until" : "5.3.0" } } diff --git a/scripts/update_compat_info.php b/scripts/update_compat_info.php index e5c06896..c4fdef66 100755 --- a/scripts/update_compat_info.php +++ b/scripts/update_compat_info.php @@ -1,114 +1,138 @@ #!/usr/bin/env php getFunctions() as $function => $compat) { $output['functions'][$function] = array( 'min' => nonempty($compat['php.min'], null), 'max' => nonempty($compat['php.max'], null), ); if (idx($compat, 'parameters')) { $output['params'][$function] = array_map( 'trim', explode(',', $compat['parameters'])); } } foreach ($reference->getInterfaces() as $interface => $compat) { $output['interfaces'][$interface] = array( 'min' => nonempty($compat['php.min'], null), 'max' => nonempty($compat['php.max'], null), ); } foreach ($reference->getClasses() as $class => $compat) { $output['classes'][$class] = array( 'min' => nonempty($compat['php.min'], null), 'max' => nonempty($compat['php.max'], null), ); } + + foreach ($reference->getConstants() as $constant => $compat) { + $output['constants'][$constant] = array( + 'min' => nonempty($compat['php.min'], null), + 'max' => nonempty($compat['php.max'], null), + ); + } + + foreach ($reference->getClassMethods() as $class => $methods) { + if (!array_key_exists($class, $output['classMethods'])) { + $output['classMethods'][$class] = array(); + } + + foreach ($methods as $method => $compat) { + $output['classMethods'][$class][$method] = array( + 'min' => nonempty($compat['php.min'], null), + 'max' => nonempty($compat['php.max'], null), + ); + } + } } ksort($output['params']); ksort($output['functions']); ksort($output['classes']); ksort($output['interfaces']); +ksort($output['constants']); +ksort($output['classMethods']); // Grepped from PHP Manual. $output['functions_windows'] = array( 'apache_child_terminate' => '', 'chroot' => '', 'getrusage' => '', 'imagecreatefromxpm' => '', 'lchgrp' => '', 'lchown' => '', 'nl_langinfo' => '', 'strptime' => '', 'sys_getloadavg' => '', 'checkdnsrr' => '5.3.0', 'dns_get_record' => '5.3.0', 'fnmatch' => '5.3.0', 'getmxrr' => '5.3.0', 'getopt' => '5.3.0', 'imagecolorclosesthwb' => '5.3.0', 'inet_ntop' => '5.3.0', 'inet_pton' => '5.3.0', 'link' => '5.3.0', 'linkinfo' => '5.3.0', 'readlink' => '5.3.0', 'socket_create_pair' => '5.3.0', 'stream_socket_pair' => '5.3.0', 'symlink' => '5.3.0', 'time_nanosleep' => '5.3.0', 'time_sleep_until' => '5.3.0', ); file_put_contents( phutil_get_library_root('arcanist').'/../'.$target, id(new PhutilJSON())->encodeFormatted($output)); echo "Done.\n"; diff --git a/src/lint/linter/ArcanistXHPASTLinter.php b/src/lint/linter/ArcanistXHPASTLinter.php index 8bb5f85b..55e39b12 100644 --- a/src/lint/linter/ArcanistXHPASTLinter.php +++ b/src/lint/linter/ArcanistXHPASTLinter.php @@ -1,2547 +1,2562 @@ 'PHP Syntax Error!', self::LINT_UNABLE_TO_PARSE => 'Unable to Parse', self::LINT_VARIABLE_VARIABLE => 'Use of Variable Variable', self::LINT_EXTRACT_USE => 'Use of extract()', self::LINT_UNDECLARED_VARIABLE => 'Use of Undeclared Variable', self::LINT_PHP_SHORT_TAG => 'Use of Short Tag " 'Use of Echo Tag " 'Use of Close Tag "?>"', self::LINT_NAMING_CONVENTIONS => 'Naming Conventions', self::LINT_IMPLICIT_CONSTRUCTOR => 'Implicit Constructor', self::LINT_DYNAMIC_DEFINE => 'Dynamic define()', self::LINT_STATIC_THIS => 'Use of $this in Static Context', self::LINT_PREG_QUOTE_MISUSE => 'Misuse of preg_quote()', self::LINT_PHP_OPEN_TAG => 'Expected Open Tag', self::LINT_TODO_COMMENT => 'TODO Comment', self::LINT_EXIT_EXPRESSION => 'Exit Used as Expression', self::LINT_COMMENT_STYLE => 'Comment Style', self::LINT_CLASS_FILENAME_MISMATCH => 'Class-Filename Mismatch', self::LINT_TAUTOLOGICAL_EXPRESSION => 'Tautological Expression', self::LINT_PLUS_OPERATOR_ON_STRINGS => 'Not String Concatenation', self::LINT_DUPLICATE_KEYS_IN_ARRAY => 'Duplicate Keys in Array', self::LINT_REUSED_ITERATORS => 'Reuse of Iterator Variable', self::LINT_BRACE_FORMATTING => 'Brace placement', self::LINT_PARENTHESES_SPACING => 'Spaces Inside Parentheses', self::LINT_CONTROL_STATEMENT_SPACING => 'Space After Control Statement', self::LINT_BINARY_EXPRESSION_SPACING => 'Space Around Binary Operator', self::LINT_ARRAY_INDEX_SPACING => 'Spacing Before Array Index', self::LINT_RAGGED_CLASSTREE_EDGE => 'Class Not abstract Or final', self::LINT_IMPLICIT_FALLTHROUGH => 'Implicit Fallthrough', self::LINT_PHP_53_FEATURES => 'Use Of PHP 5.3 Features', self::LINT_PHP_54_FEATURES => 'Use Of PHP 5.4 Features', self::LINT_REUSED_AS_ITERATOR => 'Variable Reused As Iterator', self::LINT_COMMENT_SPACING => 'Comment Spaces', self::LINT_SLOWNESS => 'Slow Construct', self::LINT_CLOSING_CALL_PAREN => 'Call Formatting', self::LINT_CLOSING_DECL_PAREN => 'Declaration Formatting', self::LINT_REUSED_ITERATOR_REFERENCE => 'Reuse of Iterator References', self::LINT_KEYWORD_CASING => 'Keyword Conventions', self::LINT_DOUBLE_QUOTE => 'Unnecessary Double Quotes', self::LINT_ELSEIF_USAGE => 'ElseIf Usage', self::LINT_SEMICOLON_SPACING => 'Semicolon Spacing', self::LINT_CONCATENATION_OPERATOR => 'Concatenation Spacing', ); } public function getLinterName() { return 'XHP'; } public function getLinterConfigurationName() { return 'xhpast'; } public function getLintSeverityMap() { $disabled = ArcanistLintSeverity::SEVERITY_DISABLED; $advice = ArcanistLintSeverity::SEVERITY_ADVICE; $warning = ArcanistLintSeverity::SEVERITY_WARNING; return array( self::LINT_TODO_COMMENT => $disabled, self::LINT_UNABLE_TO_PARSE => $warning, self::LINT_NAMING_CONVENTIONS => $warning, self::LINT_PREG_QUOTE_MISUSE => $advice, self::LINT_BRACE_FORMATTING => $warning, self::LINT_PARENTHESES_SPACING => $warning, self::LINT_CONTROL_STATEMENT_SPACING => $warning, self::LINT_BINARY_EXPRESSION_SPACING => $warning, self::LINT_ARRAY_INDEX_SPACING => $warning, self::LINT_IMPLICIT_FALLTHROUGH => $warning, self::LINT_SLOWNESS => $warning, self::LINT_COMMENT_SPACING => $advice, self::LINT_CLOSING_CALL_PAREN => $warning, self::LINT_CLOSING_DECL_PAREN => $warning, self::LINT_REUSED_ITERATOR_REFERENCE => $warning, self::LINT_KEYWORD_CASING => $warning, self::LINT_DOUBLE_QUOTE => $advice, self::LINT_ELSEIF_USAGE => $advice, self::LINT_SEMICOLON_SPACING => $advice, self::LINT_CONCATENATION_OPERATOR => $warning, // This is disabled by default because it implies a very strict policy // which isn't necessary in the general case. self::LINT_RAGGED_CLASSTREE_EDGE => $disabled, // This is disabled by default because projects don't necessarily target // a specific minimum version. self::LINT_PHP_53_FEATURES => $disabled, self::LINT_PHP_54_FEATURES => $disabled, ); } public function getLinterConfigurationOptions() { return parent::getLinterConfigurationOptions() + array( 'xhpast.naminghook' => array( 'type' => 'optional string', 'help' => pht( 'Name of a concrete subclass of ArcanistXHPASTLintNamingHook which '. 'enforces more granular naming convention rules for symbols.'), ), 'xhpast.switchhook' => array( 'type' => 'optional string', 'help' => pht( 'Name of a concrete subclass of ArcanistXHPASTLintSwitchHook which '. 'tunes the analysis of switch() statements for this linter.'), ), ); } public function setLinterConfigurationValue($key, $value) { switch ($key) { case 'xhpast.naminghook': $this->naminghook = $value; return; case 'xhpast.switchhook': $this->switchhook = $value; return; } return parent::setLinterConfigurationValue($key, $value); } public function getVersion() { // The version number should be incremented whenever a new rule is added. - return '5'; + return '6'; } protected function resolveFuture($path, Future $future) { $tree = $this->getXHPASTTreeForPath($path); if (!$tree) { $ex = $this->getXHPASTExceptionForPath($path); if ($ex instanceof XHPASTSyntaxErrorException) { $this->raiseLintAtLine( $ex->getErrorLine(), 1, self::LINT_PHP_SYNTAX_ERROR, 'This file contains a syntax error: '.$ex->getMessage()); } else if ($ex instanceof Exception) { $this->raiseLintAtPath(self::LINT_UNABLE_TO_PARSE, $ex->getMessage()); } return; } $root = $tree->getRootNode(); $method_codes = array( 'lintStrstrUsedForCheck' => self::LINT_SLOWNESS, 'lintStrposUsedForStart' => self::LINT_SLOWNESS, 'lintPHP53Features' => self::LINT_PHP_53_FEATURES, 'lintPHP54Features' => self::LINT_PHP_54_FEATURES, 'lintImplicitFallthrough' => self::LINT_IMPLICIT_FALLTHROUGH, 'lintBraceFormatting' => self::LINT_BRACE_FORMATTING, 'lintTautologicalExpressions' => self::LINT_TAUTOLOGICAL_EXPRESSION, 'lintCommentSpaces' => self::LINT_COMMENT_SPACING, 'lintHashComments' => self::LINT_COMMENT_STYLE, 'lintReusedIterators' => self::LINT_REUSED_ITERATORS, 'lintReusedIteratorReferences' => self::LINT_REUSED_ITERATOR_REFERENCE, 'lintVariableVariables' => self::LINT_VARIABLE_VARIABLE, 'lintUndeclaredVariables' => array( self::LINT_EXTRACT_USE, self::LINT_REUSED_AS_ITERATOR, self::LINT_UNDECLARED_VARIABLE, ), 'lintPHPTagUse' => array( self::LINT_PHP_SHORT_TAG, self::LINT_PHP_ECHO_TAG, self::LINT_PHP_OPEN_TAG, self::LINT_PHP_CLOSE_TAG, ), 'lintNamingConventions' => self::LINT_NAMING_CONVENTIONS, 'lintSurpriseConstructors' => self::LINT_IMPLICIT_CONSTRUCTOR, 'lintParenthesesShouldHugExpressions' => self::LINT_PARENTHESES_SPACING, 'lintSpaceAfterControlStatementKeywords' => self::LINT_CONTROL_STATEMENT_SPACING, 'lintSpaceAroundBinaryOperators' => self::LINT_BINARY_EXPRESSION_SPACING, 'lintDynamicDefines' => self::LINT_DYNAMIC_DEFINE, 'lintUseOfThisInStaticMethods' => self::LINT_STATIC_THIS, 'lintPregQuote' => self::LINT_PREG_QUOTE_MISUSE, 'lintExitExpressions' => self::LINT_EXIT_EXPRESSION, 'lintArrayIndexWhitespace' => self::LINT_ARRAY_INDEX_SPACING, 'lintTODOComments' => self::LINT_TODO_COMMENT, 'lintPrimaryDeclarationFilenameMatch' => self::LINT_CLASS_FILENAME_MISMATCH, 'lintPlusOperatorOnStrings' => self::LINT_PLUS_OPERATOR_ON_STRINGS, 'lintDuplicateKeysInArray' => self::LINT_DUPLICATE_KEYS_IN_ARRAY, 'lintRaggedClasstreeEdges' => self::LINT_RAGGED_CLASSTREE_EDGE, 'lintClosingCallParen' => self::LINT_CLOSING_CALL_PAREN, 'lintClosingDeclarationParen' => self::LINT_CLOSING_DECL_PAREN, 'lintKeywordCasing' => self::LINT_KEYWORD_CASING, 'lintStrings' => self::LINT_DOUBLE_QUOTE, 'lintElseIfStatements' => self::LINT_ELSEIF_USAGE, 'lintSemicolons' => self::LINT_SEMICOLON_SPACING, 'lintSpaceAroundConcatenationOperators' => self::LINT_CONCATENATION_OPERATOR, ); foreach ($method_codes as $method => $codes) { foreach ((array)$codes as $code) { if ($this->isCodeEnabled($code)) { call_user_func(array($this, $method), $root); break; } } } } public function lintStrstrUsedForCheck(XHPASTNode $root) { $expressions = $root->selectDescendantsOfType('n_BINARY_EXPRESSION'); foreach ($expressions as $expression) { $operator = $expression->getChildOfType(1, 'n_OPERATOR'); $operator = $operator->getConcreteString(); if ($operator != '===' && $operator != '!==') { continue; } $false = $expression->getChildByIndex(0); if ($false->getTypeName() == 'n_SYMBOL_NAME' && $false->getConcreteString() == 'false') { $strstr = $expression->getChildByIndex(2); } else { $strstr = $false; $false = $expression->getChildByIndex(2); if ($false->getTypeName() != 'n_SYMBOL_NAME' || $false->getConcreteString() != 'false') { continue; } } if ($strstr->getTypeName() != 'n_FUNCTION_CALL') { continue; } $name = strtolower($strstr->getChildByIndex(0)->getConcreteString()); if ($name == 'strstr' || $name == 'strchr') { $this->raiseLintAtNode( $strstr, self::LINT_SLOWNESS, 'Use strpos() for checking if the string contains something.'); } else if ($name == 'stristr') { $this->raiseLintAtNode( $strstr, self::LINT_SLOWNESS, 'Use stripos() for checking if the string contains something.'); } } } public function lintStrposUsedForStart(XHPASTNode $root) { $expressions = $root->selectDescendantsOfType('n_BINARY_EXPRESSION'); foreach ($expressions as $expression) { $operator = $expression->getChildOfType(1, 'n_OPERATOR'); $operator = $operator->getConcreteString(); if ($operator != '===' && $operator != '!==') { continue; } $zero = $expression->getChildByIndex(0); if ($zero->getTypeName() == 'n_NUMERIC_SCALAR' && $zero->getConcreteString() == '0') { $strpos = $expression->getChildByIndex(2); } else { $strpos = $zero; $zero = $expression->getChildByIndex(2); if ($zero->getTypeName() != 'n_NUMERIC_SCALAR' || $zero->getConcreteString() != '0') { continue; } } if ($strpos->getTypeName() != 'n_FUNCTION_CALL') { continue; } $name = strtolower($strpos->getChildByIndex(0)->getConcreteString()); if ($name == 'strpos') { $this->raiseLintAtNode( $strpos, self::LINT_SLOWNESS, 'Use strncmp() for checking if the string starts with something.'); } else if ($name == 'stripos') { $this->raiseLintAtNode( $strpos, self::LINT_SLOWNESS, 'Use strncasecmp() for checking if the string starts with '. 'something.'); } } } public function lintPHP53Features(XHPASTNode $root) { $functions = $root->selectTokensOfType('T_FUNCTION'); foreach ($functions as $function) { $next = $function->getNextToken(); while ($next) { if ($next->isSemantic()) { break; } $next = $next->getNextToken(); } if ($next) { if ($next->getTypeName() == '(') { $this->raiseLintAtToken( $function, self::LINT_PHP_53_FEATURES, 'This codebase targets PHP 5.2, but anonymous functions were '. 'not introduced until PHP 5.3.'); } } } $namespaces = $root->selectTokensOfType('T_NAMESPACE'); foreach ($namespaces as $namespace) { $this->raiseLintAtToken( $namespace, self::LINT_PHP_53_FEATURES, 'This codebase targets PHP 5.2, but namespaces were not introduced '. 'until PHP 5.3.'); } // NOTE: This is only "use x;", in anonymous functions the node type is // n_LEXICAL_VARIABLE_LIST even though both tokens are T_USE. // TODO: We parse n_USE in a slightly crazy way right now; that would be // a better selector once it's fixed. $uses = $root->selectDescendantsOfType('n_USE_LIST'); foreach ($uses as $use) { $this->raiseLintAtNode( $use, self::LINT_PHP_53_FEATURES, 'This codebase targets PHP 5.2, but namespaces were not introduced '. 'until PHP 5.3.'); } $statics = $root->selectDescendantsOfType('n_CLASS_STATIC_ACCESS'); foreach ($statics as $static) { $name = $static->getChildByIndex(0); if ($name->getTypeName() != 'n_CLASS_NAME') { continue; } if ($name->getConcreteString() == 'static') { $this->raiseLintAtNode( $name, self::LINT_PHP_53_FEATURES, 'This codebase targets PHP 5.2, but `static::` was not introduced '. 'until PHP 5.3.'); } } $ternaries = $root->selectDescendantsOfType('n_TERNARY_EXPRESSION'); foreach ($ternaries as $ternary) { $yes = $ternary->getChildByIndex(1); if ($yes->getTypeName() == 'n_EMPTY') { $this->raiseLintAtNode( $ternary, self::LINT_PHP_53_FEATURES, 'This codebase targets PHP 5.2, but short ternary was not '. 'introduced until PHP 5.3.'); } } $heredocs = $root->selectDescendantsOfType('n_HEREDOC'); foreach ($heredocs as $heredoc) { if (preg_match('/^<<<[\'"]/', $heredoc->getConcreteString())) { $this->raiseLintAtNode( $heredoc, self::LINT_PHP_53_FEATURES, 'This codebase targets PHP 5.2, but nowdoc was not introduced until '. 'PHP 5.3.'); } } $this->lintPHP53Functions($root); } private function lintPHP53Functions(XHPASTNode $root) { $target = phutil_get_library_root('arcanist'). '/../resources/php_compat_info.json'; $compat_info = json_decode(file_get_contents($target), true); $required = '5.2.3'; $calls = $root->selectDescendantsOfType('n_FUNCTION_CALL'); foreach ($calls as $call) { $node = $call->getChildByIndex(0); $name = $node->getConcreteString(); $version = idx($compat_info['functions'], $name); $windows = idx($compat_info['functions_windows'], $name); if ($version && version_compare($version['min'], $required, '>')) { $this->raiseLintAtNode( $node, self::LINT_PHP_53_FEATURES, "This codebase targets PHP 5.2.3, but `{$name}()` was not ". "introduced until PHP {$version['min']}."); } else if (array_key_exists($name, $compat_info['params'])) { $params = $call->getChildOfType(1, 'n_CALL_PARAMETER_LIST'); foreach (array_values($params->getChildren()) as $i => $param) { $version = idx($compat_info['params'][$name], $i); if ($version && version_compare($version, $required, '>')) { $this->raiseLintAtNode( $param, self::LINT_PHP_53_FEATURES, "This codebase targets PHP 5.2.3, but parameter ".($i + 1)." ". "of `{$name}()` was not introduced until PHP {$version}."); } } } else if ($windows === '' || version_compare($windows, '5.3.0') > 0) { $this->raiseLintAtNode( $node, self::LINT_PHP_53_FEATURES, "This codebase targets PHP 5.3.0 on Windows, but `{$name}()` is not ". "available there". ($windows ? " until PHP {$windows}" : '')."."); } } $classes = $root->selectDescendantsOfType('n_CLASS_NAME'); foreach ($classes as $node) { $name = $node->getConcreteString(); $version = idx($compat_info['interfaces'], $name); $version = idx($compat_info['classes'], $name, $version); if ($version && version_compare($version['min'], $required, '>')) { $this->raiseLintAtNode( $node, self::LINT_PHP_53_FEATURES, "This codebase targets PHP 5.2.3, but `{$name}` was not ". "introduced until PHP {$version['min']}."); } } + // TODO: Technically, this will include function names. This is unlikely to + // cause any issues (unless, of course, there existed a function that had + // the same name as some constant). + $constants = $root->selectDescendantsOfType('n_SYMBOL_NAME'); + foreach ($constants as $node) { + $name = $node->getConcreteString(); + $version = idx($compat_info['constants'], $name); + if ($version && version_compare($version['min'], $required, '>')) { + $this->raiseLintAtNode( + $node, + self::LINT_PHP_53_FEATURES, + "This codebase targets PHP 5.2.3, but `{$name}` was not ". + "introduced until PHP {$version['min']}."); + } + } } public function lintPHP54Features(XHPASTNode $root) { $indexes = $root->selectDescendantsOfType('n_INDEX_ACCESS'); foreach ($indexes as $index) { $left = $index->getChildByIndex(0); switch ($left->getTypeName()) { case 'n_FUNCTION_CALL': case 'n_METHOD_CALL': $this->raiseLintAtNode( $index->getChildByIndex(1), self::LINT_PHP_54_FEATURES, 'The f()[...] syntax was not introduced until PHP 5.4, but this '. 'codebase targets an earlier version of PHP. You can rewrite '. 'this expression using idx().'); break; } } } private function lintImplicitFallthrough(XHPASTNode $root) { $hook_obj = null; $working_copy = $this->getEngine()->getWorkingCopy(); if ($working_copy) { $hook_class = $this->switchhook ? $this->switchhook : $this->getDeprecatedConfiguration('lint.xhpast.switchhook'); if ($hook_class) { $hook_obj = newv($hook_class, array()); assert_instances_of(array($hook_obj), 'ArcanistXHPASTLintSwitchHook'); } } $switches = $root->selectDescendantsOfType('n_SWITCH'); foreach ($switches as $switch) { $blocks = array(); $cases = $switch->selectDescendantsOfType('n_CASE'); foreach ($cases as $case) { $blocks[] = $case; } $defaults = $switch->selectDescendantsOfType('n_DEFAULT'); foreach ($defaults as $default) { $blocks[] = $default; } foreach ($blocks as $key => $block) { // Collect all the tokens in this block which aren't at top level. // We want to ignore "break", and "continue" in these blocks. $lower_level = $block->selectDescendantsOfType('n_WHILE'); $lower_level->add($block->selectDescendantsOfType('n_DO_WHILE')); $lower_level->add($block->selectDescendantsOfType('n_FOR')); $lower_level->add($block->selectDescendantsOfType('n_FOREACH')); $lower_level->add($block->selectDescendantsOfType('n_SWITCH')); $lower_level_tokens = array(); foreach ($lower_level as $lower_level_block) { $lower_level_tokens += $lower_level_block->getTokens(); } // Collect all the tokens in this block which aren't in this scope // (because they're inside class, function or interface declarations). // We want to ignore all of these tokens. $decls = $block->selectDescendantsOfType('n_FUNCTION_DECLARATION'); $decls->add($block->selectDescendantsOfType('n_CLASS_DECLARATION')); // For completeness; these can't actually have anything. $decls->add($block->selectDescendantsOfType('n_INTERFACE_DECLARATION')); $different_scope_tokens = array(); foreach ($decls as $decl) { $different_scope_tokens += $decl->getTokens(); } $lower_level_tokens += $different_scope_tokens; // Get all the trailing nonsemantic tokens, since we need to look for // "fallthrough" comments past the end of the semantic block. $tokens = $block->getTokens(); $last = end($tokens); while ($last && $last = $last->getNextToken()) { if ($last->isSemantic()) { break; } $tokens[$last->getTokenID()] = $last; } $blocks[$key] = array( $tokens, $lower_level_tokens, $different_scope_tokens, ); } foreach ($blocks as $token_lists) { list( $tokens, $lower_level_tokens, $different_scope_tokens) = $token_lists; // Test each block (case or default statement) to see if it's OK. It's // OK if: // // - it is empty; or // - it ends in break, return, throw, continue or exit at top level; or // - it has a comment with "fallthrough" in its text. // Empty blocks are OK, so we start this at `true` and only set it to // false if we find a statement. $block_ok = true; // Keeps track of whether the current statement is one that validates // the block (break, return, throw, continue) or something else. $statement_ok = false; foreach ($tokens as $token_id => $token) { if (!$token->isSemantic()) { // Liberally match "fall" in the comment text so that comments like // "fallthru", "fall through", "fallthrough", etc., are accepted. if (preg_match('/fall/i', $token->getValue())) { $block_ok = true; break; } continue; } $tok_type = $token->getTypeName(); if ($tok_type == 'T_FUNCTION' || $tok_type == 'T_CLASS' || $tok_type == 'T_INTERFACE') { // These aren't statements, but mark the block as nonempty anyway. $block_ok = false; continue; } if ($tok_type == ';') { if ($statement_ok) { $statment_ok = false; } else { $block_ok = false; } continue; } if ($tok_type == 'T_BREAK' || $tok_type == 'T_CONTINUE') { if (empty($lower_level_tokens[$token_id])) { $statement_ok = true; $block_ok = true; } continue; } if ($tok_type == 'T_RETURN' || $tok_type == 'T_THROW' || $tok_type == 'T_EXIT' || ($hook_obj && $hook_obj->checkSwitchToken($token))) { if (empty($different_scope_tokens[$token_id])) { $statement_ok = true; $block_ok = true; } continue; } } if (!$block_ok) { $this->raiseLintAtToken( head($tokens), self::LINT_IMPLICIT_FALLTHROUGH, "This 'case' or 'default' has a nonempty block which does not ". "end with 'break', 'continue', 'return', 'throw' or 'exit'. Did ". "you forget to add one of those? If you intend to fall through, ". "add a '// fallthrough' comment to silence this warning."); } } } } private function lintBraceFormatting(XHPASTNode $root) { foreach ($root->selectDescendantsOfType('n_STATEMENT_LIST') as $list) { $tokens = $list->getTokens(); if (!$tokens || head($tokens)->getValue() != '{') { continue; } list($before, $after) = $list->getSurroundingNonsemanticTokens(); if (!$before) { $first = head($tokens); // Only insert the space if we're after a closing parenthesis. If // we're in a construct like "else{}", other rules will insert space // after the 'else' correctly. $prev = $first->getPrevToken(); if (!$prev || $prev->getValue() != ')') { continue; } $this->raiseLintAtToken( $first, self::LINT_BRACE_FORMATTING, 'Put opening braces on the same line as control statements and '. 'declarations, with a single space before them.', ' '.$first->getValue()); } else if (count($before) == 1) { $before = reset($before); if ($before->getValue() != ' ') { $this->raiseLintAtToken( $before, self::LINT_BRACE_FORMATTING, 'Put opening braces on the same line as control statements and '. 'declarations, with a single space before them.', ' '); } } } } private function lintTautologicalExpressions(XHPASTNode $root) { $expressions = $root->selectDescendantsOfType('n_BINARY_EXPRESSION'); static $operators = array( '-' => true, '/' => true, '-=' => true, '/=' => true, '<=' => true, '<' => true, '==' => true, '===' => true, '!=' => true, '!==' => true, '>=' => true, '>' => true, ); static $logical = array( '||' => true, '&&' => true, ); foreach ($expressions as $expr) { $operator = $expr->getChildByIndex(1)->getConcreteString(); if (!empty($operators[$operator])) { $left = $expr->getChildByIndex(0)->getSemanticString(); $right = $expr->getChildByIndex(2)->getSemanticString(); if ($left == $right) { $this->raiseLintAtNode( $expr, self::LINT_TAUTOLOGICAL_EXPRESSION, 'Both sides of this expression are identical, so it always '. 'evaluates to a constant.'); } } if (!empty($logical[$operator])) { $left = $expr->getChildByIndex(0)->getSemanticString(); $right = $expr->getChildByIndex(2)->getSemanticString(); // NOTE: These will be null to indicate "could not evaluate". $left = $this->evaluateStaticBoolean($left); $right = $this->evaluateStaticBoolean($right); if (($operator == '||' && ($left === true || $right === true)) || ($operator == '&&' && ($left === false || $right === false))) { $this->raiseLintAtNode( $expr, self::LINT_TAUTOLOGICAL_EXPRESSION, 'The logical value of this expression is static. Did you forget '. 'to remove some debugging code?'); } } } } /** * Statically evaluate a boolean value from an XHP tree. * * TODO: Improve this and move it to XHPAST proper? * * @param string The "semantic string" of a single value. * @return mixed ##true## or ##false## if the value could be evaluated * statically; ##null## if static evaluation was not possible. */ private function evaluateStaticBoolean($string) { switch (strtolower($string)) { case '0': case 'null': case 'false': return false; case '1': case 'true': return true; } return null; } protected function lintCommentSpaces(XHPASTNode $root) { foreach ($root->selectTokensOfType('T_COMMENT') as $comment) { $value = $comment->getValue(); if ($value[0] != '#') { $match = null; if (preg_match('@^(/[/*]+)[^/*\s]@', $value, $match)) { $this->raiseLintAtOffset( $comment->getOffset(), self::LINT_COMMENT_SPACING, 'Put space after comment start.', $match[1], $match[1].' '); } } } } protected function lintHashComments(XHPASTNode $root) { foreach ($root->selectTokensOfType('T_COMMENT') as $comment) { $value = $comment->getValue(); if ($value[0] != '#') { continue; } $this->raiseLintAtOffset( $comment->getOffset(), self::LINT_COMMENT_STYLE, 'Use "//" single-line comments, not "#".', '#', (preg_match('/^#\S/', $value) ? '// ' : '//')); } } /** * Find cases where loops get nested inside each other but use the same * iterator variable. For example: * * COUNTEREXAMPLE * foreach ($list as $thing) { * foreach ($stuff as $thing) { // <-- Raises an error for reuse of $thing * // ... * } * } * */ private function lintReusedIterators(XHPASTNode $root) { $used_vars = array(); $for_loops = $root->selectDescendantsOfType('n_FOR'); foreach ($for_loops as $for_loop) { $var_map = array(); // Find all the variables that are assigned to in the for() expression. $for_expr = $for_loop->getChildOfType(0, 'n_FOR_EXPRESSION'); $bin_exprs = $for_expr->selectDescendantsOfType('n_BINARY_EXPRESSION'); foreach ($bin_exprs as $bin_expr) { if ($bin_expr->getChildByIndex(1)->getConcreteString() == '=') { $var = $bin_expr->getChildByIndex(0); $var_map[$var->getConcreteString()] = $var; } } $used_vars[$for_loop->getID()] = $var_map; } $foreach_loops = $root->selectDescendantsOfType('n_FOREACH'); foreach ($foreach_loops as $foreach_loop) { $var_map = array(); $foreach_expr = $foreach_loop->getChildOftype(0, 'n_FOREACH_EXPRESSION'); // We might use one or two vars, i.e. "foreach ($x as $y => $z)" or // "foreach ($x as $y)". $possible_used_vars = array( $foreach_expr->getChildByIndex(1), $foreach_expr->getChildByIndex(2), ); foreach ($possible_used_vars as $var) { if ($var->getTypeName() == 'n_EMPTY') { continue; } $name = $var->getConcreteString(); $name = trim($name, '&'); // Get rid of ref silliness. $var_map[$name] = $var; } $used_vars[$foreach_loop->getID()] = $var_map; } $all_loops = $for_loops->add($foreach_loops); foreach ($all_loops as $loop) { $child_for_loops = $loop->selectDescendantsOfType('n_FOR'); $child_foreach_loops = $loop->selectDescendantsOfType('n_FOREACH'); $child_loops = $child_for_loops->add($child_foreach_loops); $outer_vars = $used_vars[$loop->getID()]; foreach ($child_loops as $inner_loop) { $inner_vars = $used_vars[$inner_loop->getID()]; $shared = array_intersect_key($outer_vars, $inner_vars); if ($shared) { $shared_desc = implode(', ', array_keys($shared)); $message = $this->raiseLintAtNode( $inner_loop->getChildByIndex(0), self::LINT_REUSED_ITERATORS, "This loop reuses iterator variables ({$shared_desc}) from an ". "outer loop. You might be clobbering the outer iterator. Change ". "the inner loop to use a different iterator name."); $locations = array(); foreach ($shared as $var) { $locations[] = $this->getOtherLocation($var->getOffset()); } $message->setOtherLocations($locations); } } } } /** * Find cases where a foreach loop is being iterated using a variable * reference and the same variable is used outside of the loop without * calling unset() or reassigning the variable to another variable * reference. * * COUNTEREXAMPLE * foreach ($ar as &$a) { * // ... * } * $a = 1; // <-- Raises an error for using $a * */ protected function lintReusedIteratorReferences(XHPASTNode $root) { $fdefs = $root->selectDescendantsOfType('n_FUNCTION_DECLARATION'); $mdefs = $root->selectDescendantsOfType('n_METHOD_DECLARATION'); $defs = $fdefs->add($mdefs); foreach ($defs as $def) { $body = $def->getChildByIndex(5); if ($body->getTypeName() == 'n_EMPTY') { // Abstract method declaration. continue; } $exclude = array(); // Exclude uses of variables, unsets, and foreach loops // within closures - they are checked on their own $func_defs = $body->selectDescendantsOfType('n_FUNCTION_DECLARATION'); foreach ($func_defs as $func_def) { $vars = $func_def->selectDescendantsOfType('n_VARIABLE'); foreach ($vars as $var) { $exclude[$var->getID()] = true; } $unset_lists = $func_def->selectDescendantsOfType('n_UNSET_LIST'); foreach ($unset_lists as $unset_list) { $exclude[$unset_list->getID()] = true; } $foreaches = $func_def->selectDescendantsOfType('n_FOREACH'); foreach ($foreaches as $foreach) { $exclude[$foreach->getID()] = true; } } // Find all variables that are unset within the scope $unset_vars = array(); $unset_lists = $body->selectDescendantsOfType('n_UNSET_LIST'); foreach ($unset_lists as $unset_list) { if (isset($exclude[$unset_list->getID()])) { continue; } $unset_list_vars = $unset_list->selectDescendantsOfType('n_VARIABLE'); foreach ($unset_list_vars as $var) { $concrete = $this->getConcreteVariableString($var); $unset_vars[$concrete][] = $var->getOffset(); $exclude[$var->getID()] = true; } } // Find all reference variables in foreach expressions $reference_vars = array(); $foreaches = $body->selectDescendantsOfType('n_FOREACH'); foreach ($foreaches as $foreach) { if (isset($exclude[$foreach->getID()])) { continue; } $foreach_expr = $foreach->getChildOfType(0, 'n_FOREACH_EXPRESSION'); $var = $foreach_expr->getChildByIndex(2); if ($var->getTypeName() != 'n_VARIABLE_REFERENCE') { continue; } $reference = $var->getChildByIndex(0); if ($reference->getTypeName() != 'n_VARIABLE') { continue; } $reference_name = $this->getConcreteVariableString($reference); $reference_vars[$reference_name][] = $reference->getOffset(); $exclude[$reference->getID()] = true; // Exclude uses of the reference variable within the foreach loop $foreach_vars = $foreach->selectDescendantsOfType('n_VARIABLE'); foreach ($foreach_vars as $var) { $name = $this->getConcreteVariableString($var); if ($name == $reference_name) { $exclude[$var->getID()] = true; } } } // Allow usage if the reference variable is assigned to another // reference variable $binary = $body->selectDescendantsOfType('n_BINARY_EXPRESSION'); foreach ($binary as $expr) { if ($expr->getChildByIndex(1)->getConcreteString() != '=') { continue; } $lval = $expr->getChildByIndex(0); if ($lval->getTypeName() != 'n_VARIABLE') { continue; } $rval = $expr->getChildByIndex(2); if ($rval->getTypeName() != 'n_VARIABLE_REFERENCE') { continue; } // Counts as unsetting a variable $concrete = $this->getConcreteVariableString($lval); $unset_vars[$concrete][] = $lval->getOffset(); $exclude[$lval->getID()] = true; } $all_vars = array(); $all = $body->selectDescendantsOfType('n_VARIABLE'); foreach ($all as $var) { if (isset($exclude[$var->getID()])) { continue; } $name = $this->getConcreteVariableString($var); if (!isset($reference_vars[$name])) { continue; } // Find the closest reference offset to this variable $reference_offset = null; foreach ($reference_vars[$name] as $offset) { if ($offset < $var->getOffset()) { $reference_offset = $offset; } else { break; } } if (!$reference_offset) { continue; } // Check if an unset exists between reference and usage of this // variable $warn = true; if (isset($unset_vars[$name])) { foreach ($unset_vars[$name] as $unset_offset) { if ($unset_offset > $reference_offset && $unset_offset < $var->getOffset()) { $warn = false; break; } } } if ($warn) { $this->raiseLintAtNode( $var, self::LINT_REUSED_ITERATOR_REFERENCE, 'This variable was used already as a by-reference iterator '. 'variable. Such variables survive outside the foreach loop, '. 'do not reuse.'); } } } } protected function lintVariableVariables(XHPASTNode $root) { $vvars = $root->selectDescendantsOfType('n_VARIABLE_VARIABLE'); foreach ($vvars as $vvar) { $this->raiseLintAtNode( $vvar, self::LINT_VARIABLE_VARIABLE, 'Rewrite this code to use an array. Variable variables are unclear '. 'and hinder static analysis.'); } } protected function lintUndeclaredVariables(XHPASTNode $root) { // These things declare variables in a function: // Explicit parameters // Assignment // Assignment via list() // Static // Global // Lexical vars // Builtins ($this) // foreach() // catch // // These things make lexical scope unknowable: // Use of extract() // Assignment to variable variables ($$x) // Global with variable variables // // These things don't count as "using" a variable: // isset() // empty() // Static class variables // // The general approach here is to find each function/method declaration, // then: // // 1. Identify all the variable declarations, and where they first occur // in the function/method declaration. // 2. Identify all the uses that don't really count (as above). // 3. Everything else must be a use of a variable. // 4. For each variable, check if any uses occur before the declaration // and warn about them. // // We also keep track of where lexical scope becomes unknowable (e.g., // because the function calls extract() or uses dynamic variables, // preventing us from keeping track of which variables are defined) so we // can stop issuing warnings after that. // // TODO: Support functions defined inside other functions which is commonly // used with anonymous functions. $fdefs = $root->selectDescendantsOfType('n_FUNCTION_DECLARATION'); $mdefs = $root->selectDescendantsOfType('n_METHOD_DECLARATION'); $defs = $fdefs->add($mdefs); foreach ($defs as $def) { // We keep track of the first offset where scope becomes unknowable, and // silence any warnings after that. Default it to INT_MAX so we can min() // it later to keep track of the first problem we encounter. $scope_destroyed_at = PHP_INT_MAX; $declarations = array( '$this' => 0, ) + array_fill_keys($this->getSuperGlobalNames(), 0); $declaration_tokens = array(); $exclude_tokens = array(); $vars = array(); // First up, find all the different kinds of declarations, as explained // above. Put the tokens into the $vars array. $param_list = $def->getChildOfType(3, 'n_DECLARATION_PARAMETER_LIST'); $param_vars = $param_list->selectDescendantsOfType('n_VARIABLE'); foreach ($param_vars as $var) { $vars[] = $var; } // This is PHP5.3 closure syntax: function () use ($x) {}; $lexical_vars = $def ->getChildByIndex(4) ->selectDescendantsOfType('n_VARIABLE'); foreach ($lexical_vars as $var) { $vars[] = $var; } $body = $def->getChildByIndex(5); if ($body->getTypeName() == 'n_EMPTY') { // Abstract method declaration. continue; } $static_vars = $body ->selectDescendantsOfType('n_STATIC_DECLARATION') ->selectDescendantsOfType('n_VARIABLE'); foreach ($static_vars as $var) { $vars[] = $var; } $global_vars = $body ->selectDescendantsOfType('n_GLOBAL_DECLARATION_LIST'); foreach ($global_vars as $var_list) { foreach ($var_list->getChildren() as $var) { if ($var->getTypeName() == 'n_VARIABLE') { $vars[] = $var; } else { // Dynamic global variable, i.e. "global $$x;". $scope_destroyed_at = min($scope_destroyed_at, $var->getOffset()); // An error is raised elsewhere, no need to raise here. } } } // Include "catch (Exception $ex)", but not variables in the body of the // catch block. $catches = $body->selectDescendantsOfType('n_CATCH'); foreach ($catches as $catch) { $vars[] = $catch->getChildOfType(1, 'n_VARIABLE'); } $binary = $body->selectDescendantsOfType('n_BINARY_EXPRESSION'); foreach ($binary as $expr) { if ($expr->getChildByIndex(1)->getConcreteString() != '=') { continue; } $lval = $expr->getChildByIndex(0); if ($lval->getTypeName() == 'n_VARIABLE') { $vars[] = $lval; } else if ($lval->getTypeName() == 'n_LIST') { // Recursivey grab everything out of list(), since the grammar // permits list() to be nested. Also note that list() is ONLY valid // as an lval assignments, so we could safely lift this out of the // n_BINARY_EXPRESSION branch. $assign_vars = $lval->selectDescendantsOfType('n_VARIABLE'); foreach ($assign_vars as $var) { $vars[] = $var; } } if ($lval->getTypeName() == 'n_VARIABLE_VARIABLE') { $scope_destroyed_at = min($scope_destroyed_at, $lval->getOffset()); // No need to raise here since we raise an error elsewhere. } } $calls = $body->selectDescendantsOfType('n_FUNCTION_CALL'); foreach ($calls as $call) { $name = strtolower($call->getChildByIndex(0)->getConcreteString()); if ($name == 'empty' || $name == 'isset') { $params = $call ->getChildOfType(1, 'n_CALL_PARAMETER_LIST') ->selectDescendantsOfType('n_VARIABLE'); foreach ($params as $var) { $exclude_tokens[$var->getID()] = true; } continue; } if ($name != 'extract') { continue; } $scope_destroyed_at = min($scope_destroyed_at, $call->getOffset()); $this->raiseLintAtNode( $call, self::LINT_EXTRACT_USE, 'Avoid extract(). It is confusing and hinders static analysis.'); } // Now we have every declaration except foreach(), handled below. Build // two maps, one which just keeps track of which tokens are part of // declarations ($declaration_tokens) and one which has the first offset // where a variable is declared ($declarations). foreach ($vars as $var) { $concrete = $this->getConcreteVariableString($var); $declarations[$concrete] = min( idx($declarations, $concrete, PHP_INT_MAX), $var->getOffset()); $declaration_tokens[$var->getID()] = true; } // Excluded tokens are ones we don't "count" as being used, described // above. Put them into $exclude_tokens. $class_statics = $body ->selectDescendantsOfType('n_CLASS_STATIC_ACCESS'); $class_static_vars = $class_statics ->selectDescendantsOfType('n_VARIABLE'); foreach ($class_static_vars as $var) { $exclude_tokens[$var->getID()] = true; } // Find all the variables in scope, and figure out where they are used. // We want to find foreach() iterators which are both declared before and // used after the foreach() loop. $uses = array(); $all_vars = $body->selectDescendantsOfType('n_VARIABLE'); $all = array(); // NOTE: $all_vars is not a real array so we can't unset() it. foreach ($all_vars as $var) { // Be strict since it's easier; we don't let you reuse an iterator you // declared before a loop after the loop, even if you're just assigning // to it. $concrete = $this->getConcreteVariableString($var); $uses[$concrete][$var->getID()] = $var->getOffset(); if (isset($declaration_tokens[$var->getID()])) { // We know this is part of a declaration, so it's fine. continue; } if (isset($exclude_tokens[$var->getID()])) { // We know this is part of isset() or similar, so it's fine. continue; } $all[$var->getOffset()] = $concrete; } // Do foreach() last, we want to handle implicit redeclaration of a // variable already in scope since this probably means we're ovewriting a // local. // NOTE: Processing foreach expressions in order allows programs which // reuse iterator variables in other foreach() loops -- this is fine. We // have a separate warning to prevent nested loops from reusing the same // iterators. $foreaches = $body->selectDescendantsOfType('n_FOREACH'); $all_foreach_vars = array(); foreach ($foreaches as $foreach) { $foreach_expr = $foreach->getChildOfType(0, 'n_FOREACH_EXPRESSION'); $foreach_vars = array(); // Determine the end of the foreach() loop. $foreach_tokens = $foreach->getTokens(); $last_token = end($foreach_tokens); $foreach_end = $last_token->getOffset(); $key_var = $foreach_expr->getChildByIndex(1); if ($key_var->getTypeName() == 'n_VARIABLE') { $foreach_vars[] = $key_var; } $value_var = $foreach_expr->getChildByIndex(2); if ($value_var->getTypeName() == 'n_VARIABLE') { $foreach_vars[] = $value_var; } else { // The root-level token may be a reference, as in: // foreach ($a as $b => &$c) { ... } // Reach into the n_VARIABLE_REFERENCE node to grab the n_VARIABLE // node. $var = $value_var->getChildByIndex(0); if ($var->getTypeName() == 'n_VARIABLE_VARIABLE') { $var = $var->getChildByIndex(0); } $foreach_vars[] = $var; } // Remove all uses of the iterators inside of the foreach() loop from // the $uses map. foreach ($foreach_vars as $var) { $concrete = $this->getConcreteVariableString($var); $offset = $var->getOffset(); foreach ($uses[$concrete] as $id => $use_offset) { if (($use_offset >= $offset) && ($use_offset < $foreach_end)) { unset($uses[$concrete][$id]); } } $all_foreach_vars[] = $var; } } foreach ($all_foreach_vars as $var) { $concrete = $this->getConcreteVariableString($var); $offset = $var->getOffset(); // If a variable was declared before a foreach() and is used after // it, raise a message. if (isset($declarations[$concrete])) { if ($declarations[$concrete] < $offset) { if (!empty($uses[$concrete]) && max($uses[$concrete]) > $offset) { $message = $this->raiseLintAtNode( $var, self::LINT_REUSED_AS_ITERATOR, 'This iterator variable is a previously declared local '. 'variable. To avoid overwriting locals, do not reuse them '. 'as iterator variables.'); $message->setOtherLocations(array( $this->getOtherLocation($declarations[$concrete]), $this->getOtherLocation(max($uses[$concrete])), )); } } } // This is a declaration, exclude it from the "declare variables prior // to use" check below. unset($all[$var->getOffset()]); $vars[] = $var; } // Now rebuild declarations to include foreach(). foreach ($vars as $var) { $concrete = $this->getConcreteVariableString($var); $declarations[$concrete] = min( idx($declarations, $concrete, PHP_INT_MAX), $var->getOffset()); $declaration_tokens[$var->getID()] = true; } foreach (array('n_STRING_SCALAR', 'n_HEREDOC') as $type) { foreach ($body->selectDescendantsOfType($type) as $string) { foreach ($string->getStringVariables() as $offset => $var) { $all[$string->getOffset() + $offset - 1] = '$'.$var; } } } // Issue a warning for every variable token, unless it appears in a // declaration, we know about a prior declaration, we have explicitly // exlcuded it, or scope has been made unknowable before it appears. $issued_warnings = array(); foreach ($all as $offset => $concrete) { if ($offset >= $scope_destroyed_at) { // This appears after an extract() or $$var so we have no idea // whether it's legitimate or not. We raised a harshly-worded warning // when scope was made unknowable, so just ignore anything we can't // figure out. continue; } if ($offset >= idx($declarations, $concrete, PHP_INT_MAX)) { // The use appears after the variable is declared, so it's fine. continue; } if (!empty($issued_warnings[$concrete])) { // We've already issued a warning for this variable so we don't need // to issue another one. continue; } $this->raiseLintAtOffset( $offset, self::LINT_UNDECLARED_VARIABLE, 'Declare variables prior to use (even if you are passing them '. 'as reference parameters). You may have misspelled this '. 'variable name.', $concrete); $issued_warnings[$concrete] = true; } } } private function getConcreteVariableString(XHPASTNode $var) { $concrete = $var->getConcreteString(); // Strip off curly braces as in $obj->{$property}. $concrete = trim($concrete, '{}'); return $concrete; } protected function lintPHPTagUse(XHPASTNode $root) { $tokens = $root->getTokens(); foreach ($tokens as $token) { if ($token->getTypeName() == 'T_OPEN_TAG') { if (trim($token->getValue()) == 'raiseLintAtToken( $token, self::LINT_PHP_SHORT_TAG, 'Use the full form of the PHP open tag, "getTypeName() == 'T_OPEN_TAG_WITH_ECHO') { $this->raiseLintAtToken( $token, self::LINT_PHP_ECHO_TAG, 'Avoid the PHP echo short form, "getValue())) { $this->raiseLintAtToken( $token, self::LINT_PHP_OPEN_TAG, 'PHP files should start with "selectTokensOfType('T_CLOSE_TAG') as $token) { $this->raiseLintAtToken( $token, self::LINT_PHP_CLOSE_TAG, 'Do not use the PHP closing tag, "?>".'); } } protected function lintNamingConventions(XHPASTNode $root) { // We're going to build up a list of tuples // and then try to instantiate a hook class which has the opportunity to // override us. $names = array(); $classes = $root->selectDescendantsOfType('n_CLASS_DECLARATION'); foreach ($classes as $class) { $name_token = $class->getChildByIndex(1); $name_string = $name_token->getConcreteString(); $names[] = array( 'class', $name_string, $name_token, ArcanistXHPASTLintNamingHook::isUpperCamelCase($name_string) ? null : 'Follow naming conventions: classes should be named using '. 'UpperCamelCase.', ); } $ifaces = $root->selectDescendantsOfType('n_INTERFACE_DECLARATION'); foreach ($ifaces as $iface) { $name_token = $iface->getChildByIndex(1); $name_string = $name_token->getConcreteString(); $names[] = array( 'interface', $name_string, $name_token, ArcanistXHPASTLintNamingHook::isUpperCamelCase($name_string) ? null : 'Follow naming conventions: interfaces should be named using '. 'UpperCamelCase.', ); } $functions = $root->selectDescendantsOfType('n_FUNCTION_DECLARATION'); foreach ($functions as $function) { $name_token = $function->getChildByIndex(2); if ($name_token->getTypeName() == 'n_EMPTY') { // Unnamed closure. continue; } $name_string = $name_token->getConcreteString(); $names[] = array( 'function', $name_string, $name_token, ArcanistXHPASTLintNamingHook::isLowercaseWithUnderscores( ArcanistXHPASTLintNamingHook::stripPHPFunction($name_string)) ? null : 'Follow naming conventions: functions should be named using '. 'lowercase_with_underscores.', ); } $methods = $root->selectDescendantsOfType('n_METHOD_DECLARATION'); foreach ($methods as $method) { $name_token = $method->getChildByIndex(2); $name_string = $name_token->getConcreteString(); $names[] = array( 'method', $name_string, $name_token, ArcanistXHPASTLintNamingHook::isLowerCamelCase( ArcanistXHPASTLintNamingHook::stripPHPFunction($name_string)) ? null : 'Follow naming conventions: methods should be named using '. 'lowerCamelCase.', ); } $param_tokens = array(); $params = $root->selectDescendantsOfType('n_DECLARATION_PARAMETER_LIST'); foreach ($params as $param_list) { foreach ($param_list->getChildren() as $param) { $name_token = $param->getChildByIndex(1); if ($name_token->getTypeName() == 'n_VARIABLE_REFERENCE') { $name_token = $name_token->getChildOfType(0, 'n_VARIABLE'); } $param_tokens[$name_token->getID()] = true; $name_string = $name_token->getConcreteString(); $names[] = array( 'parameter', $name_string, $name_token, ArcanistXHPASTLintNamingHook::isLowercaseWithUnderscores( ArcanistXHPASTLintNamingHook::stripPHPVariable($name_string)) ? null : 'Follow naming conventions: parameters should be named using '. 'lowercase_with_underscores.', ); } } $constants = $root->selectDescendantsOfType( 'n_CLASS_CONSTANT_DECLARATION_LIST'); foreach ($constants as $constant_list) { foreach ($constant_list->getChildren() as $constant) { $name_token = $constant->getChildByIndex(0); $name_string = $name_token->getConcreteString(); $names[] = array( 'constant', $name_string, $name_token, ArcanistXHPASTLintNamingHook::isUppercaseWithUnderscores($name_string) ? null : 'Follow naming conventions: class constants should be named '. 'using UPPERCASE_WITH_UNDERSCORES.', ); } } $member_tokens = array(); $props = $root->selectDescendantsOfType('n_CLASS_MEMBER_DECLARATION_LIST'); foreach ($props as $prop_list) { foreach ($prop_list->getChildren() as $token_id => $prop) { if ($prop->getTypeName() == 'n_CLASS_MEMBER_MODIFIER_LIST') { continue; } $name_token = $prop->getChildByIndex(0); $member_tokens[$name_token->getID()] = true; $name_string = $name_token->getConcreteString(); $names[] = array( 'member', $name_string, $name_token, ArcanistXHPASTLintNamingHook::isLowerCamelCase( ArcanistXHPASTLintNamingHook::stripPHPVariable($name_string)) ? null : 'Follow naming conventions: class properties should be named '. 'using lowerCamelCase.', ); } } $superglobal_map = array_fill_keys( $this->getSuperGlobalNames(), true); $fdefs = $root->selectDescendantsOfType('n_FUNCTION_DECLARATION'); $mdefs = $root->selectDescendantsOfType('n_METHOD_DECLARATION'); $defs = $fdefs->add($mdefs); foreach ($defs as $def) { $globals = $def->selectDescendantsOfType('n_GLOBAL_DECLARATION_LIST'); $globals = $globals->selectDescendantsOfType('n_VARIABLE'); $globals_map = array(); foreach ($globals as $global) { $global_string = $global->getConcreteString(); $globals_map[$global_string] = true; $names[] = array( 'user', $global_string, $global, // No advice for globals, but hooks have an option to provide some. null); } // Exclude access of static properties, since lint will be raised at // their declaration if they're invalid and they may not conform to // variable rules. This is slightly overbroad (includes the entire // rhs of a "Class::..." token) to cover cases like "Class:$x[0]". These // variables are simply made exempt from naming conventions. $exclude_tokens = array(); $statics = $def->selectDescendantsOfType('n_CLASS_STATIC_ACCESS'); foreach ($statics as $static) { $rhs = $static->getChildByIndex(1); $rhs_vars = $def->selectDescendantsOfType('n_VARIABLE'); foreach ($rhs_vars as $var) { $exclude_tokens[$var->getID()] = true; } } $vars = $def->selectDescendantsOfType('n_VARIABLE'); foreach ($vars as $token_id => $var) { if (isset($member_tokens[$token_id])) { continue; } if (isset($param_tokens[$token_id])) { continue; } if (isset($exclude_tokens[$token_id])) { continue; } $var_string = $var->getConcreteString(); // Awkward artifact of "$o->{$x}". $var_string = trim($var_string, '{}'); if (isset($superglobal_map[$var_string])) { continue; } if (isset($globals_map[$var_string])) { continue; } $names[] = array( 'variable', $var_string, $var, ArcanistXHPASTLintNamingHook::isLowercaseWithUnderscores( ArcanistXHPASTLintNamingHook::stripPHPVariable($var_string)) ? null : 'Follow naming conventions: variables should be named using '. 'lowercase_with_underscores.', ); } } $engine = $this->getEngine(); $working_copy = $engine->getWorkingCopy(); if ($working_copy) { // If a naming hook is configured, give it a chance to override the // default results for all the symbol names. $hook_class = $this->naminghook ? $this->naminghook : $working_copy->getProjectConfig('lint.xhpast.naminghook'); if ($hook_class) { $hook_obj = newv($hook_class, array()); foreach ($names as $k => $name_attrs) { list($type, $name, $token, $default) = $name_attrs; $result = $hook_obj->lintSymbolName($type, $name, $default); $names[$k][3] = $result; } } } // Raise anything we're left with. foreach ($names as $k => $name_attrs) { list($type, $name, $token, $result) = $name_attrs; if ($result) { $this->raiseLintAtNode( $token, self::LINT_NAMING_CONVENTIONS, $result); } } } protected function lintSurpriseConstructors(XHPASTNode $root) { $classes = $root->selectDescendantsOfType('n_CLASS_DECLARATION'); foreach ($classes as $class) { $class_name = $class->getChildByIndex(1)->getConcreteString(); $methods = $class->selectDescendantsOfType('n_METHOD_DECLARATION'); foreach ($methods as $method) { $method_name_token = $method->getChildByIndex(2); $method_name = $method_name_token->getConcreteString(); if (strtolower($class_name) == strtolower($method_name)) { $this->raiseLintAtNode( $method_name_token, self::LINT_IMPLICIT_CONSTRUCTOR, 'Name constructors __construct() explicitly. This method is a '. 'constructor because it has the same name as the class it is '. 'defined in.'); } } } } protected function lintParenthesesShouldHugExpressions(XHPASTNode $root) { $calls = $root->selectDescendantsOfType('n_CALL_PARAMETER_LIST'); $controls = $root->selectDescendantsOfType('n_CONTROL_CONDITION'); $fors = $root->selectDescendantsOfType('n_FOR_EXPRESSION'); $foreach = $root->selectDescendantsOfType('n_FOREACH_EXPRESSION'); $decl = $root->selectDescendantsOfType('n_DECLARATION_PARAMETER_LIST'); $all_paren_groups = $calls ->add($controls) ->add($fors) ->add($foreach) ->add($decl); foreach ($all_paren_groups as $group) { $tokens = $group->getTokens(); $token_o = array_shift($tokens); $token_c = array_pop($tokens); if ($token_o->getTypeName() != '(') { throw new Exception('Expected open paren!'); } if ($token_c->getTypeName() != ')') { throw new Exception('Expected close paren!'); } $nonsem_o = $token_o->getNonsemanticTokensAfter(); $nonsem_c = $token_c->getNonsemanticTokensBefore(); if (!$nonsem_o) { continue; } $raise = array(); $string_o = implode('', mpull($nonsem_o, 'getValue')); if (preg_match('/^[ ]+$/', $string_o)) { $raise[] = array($nonsem_o, $string_o); } if ($nonsem_o !== $nonsem_c) { $string_c = implode('', mpull($nonsem_c, 'getValue')); if (preg_match('/^[ ]+$/', $string_c)) { $raise[] = array($nonsem_c, $string_c); } } foreach ($raise as $warning) { list($tokens, $string) = $warning; $this->raiseLintAtOffset( reset($tokens)->getOffset(), self::LINT_PARENTHESES_SPACING, 'Parentheses should hug their contents.', $string, ''); } } } protected function lintSpaceAfterControlStatementKeywords(XHPASTNode $root) { foreach ($root->getTokens() as $id => $token) { switch ($token->getTypeName()) { case 'T_IF': case 'T_ELSE': case 'T_FOR': case 'T_FOREACH': case 'T_WHILE': case 'T_DO': case 'T_SWITCH': $after = $token->getNonsemanticTokensAfter(); if (empty($after)) { $this->raiseLintAtToken( $token, self::LINT_CONTROL_STATEMENT_SPACING, 'Convention: put a space after control statements.', $token->getValue().' '); } else if (count($after) == 1) { $space = head($after); // If we have an else clause with braces, $space may not be // a single white space. e.g., // // if ($x) // echo 'foo' // else // <- $space is not " " but "\n ". // echo 'bar' // // We just require it starts with either a whitespace or a newline. if ($token->getTypeName() == 'T_ELSE' || $token->getTypeName() == 'T_DO') { break; } if ($space->isAnyWhitespace() && $space->getValue() != ' ') { $this->raiseLintAtToken( $space, self::LINT_CONTROL_STATEMENT_SPACING, 'Convention: put a single space after control statements.', ' '); } } break; } } } protected function lintSpaceAroundBinaryOperators(XHPASTNode $root) { $expressions = $root->selectDescendantsOfType('n_BINARY_EXPRESSION'); foreach ($expressions as $expression) { $operator = $expression->getChildByIndex(1); $operator_value = $operator->getConcreteString(); list($before, $after) = $operator->getSurroundingNonsemanticTokens(); $replace = null; if (empty($before) && empty($after)) { $replace = " {$operator_value} "; } else if (empty($before)) { $replace = " {$operator_value}"; } else if (empty($after)) { $replace = "{$operator_value} "; } if ($replace !== null) { $this->raiseLintAtNode( $operator, self::LINT_BINARY_EXPRESSION_SPACING, 'Convention: logical and arithmetic operators should be '. 'surrounded by whitespace.', $replace); } } $tokens = $root->selectTokensOfType(','); foreach ($tokens as $token) { $next = $token->getNextToken(); switch ($next->getTypeName()) { case ')': case 'T_WHITESPACE': break; default: $this->raiseLintAtToken( $token, self::LINT_BINARY_EXPRESSION_SPACING, 'Convention: comma should be followed by space.', ', '); break; } } $tokens = $root->selectTokensOfType('T_DOUBLE_ARROW'); foreach ($tokens as $token) { $prev = $token->getPrevToken(); $next = $token->getNextToken(); $prev_type = $prev->getTypeName(); $next_type = $next->getTypeName(); $prev_space = ($prev_type == 'T_WHITESPACE'); $next_space = ($next_type == 'T_WHITESPACE'); $replace = null; if (!$prev_space && !$next_space) { $replace = ' => '; } else if ($prev_space && !$next_space) { $replace = '=> '; } else if (!$prev_space && $next_space) { $replace = ' =>'; } if ($replace !== null) { $this->raiseLintAtToken( $token, self::LINT_BINARY_EXPRESSION_SPACING, 'Convention: double arrow should be surrounded by whitespace.', $replace); } } // TODO: Spacing around default parameter assignment in function/method // declarations (which is not n_BINARY_EXPRESSION). } protected function lintSpaceAroundConcatenationOperators(XHPASTNode $root) { $tokens = $root->selectTokensOfType('.'); foreach ($tokens as $token) { $prev = $token->getPrevToken(); $next = $token->getNextToken(); foreach (array('prev' => $prev, 'next' => $next) as $wtoken) { if ($wtoken->getTypeName() != 'T_WHITESPACE') { continue; } $value = $wtoken->getValue(); if (strpos($value, "\n") !== false) { // If the whitespace has a newline, it's conventional. continue; } $next = $wtoken->getNextToken(); if ($next && $next->getTypeName() == 'T_COMMENT') { continue; } $this->raiseLintAtToken( $wtoken, self::LINT_BINARY_EXPRESSION_SPACING, 'Convention: no spaces around "." (string concatenation) operator.', ''); } } } protected function lintDynamicDefines(XHPASTNode $root) { $calls = $root->selectDescendantsOfType('n_FUNCTION_CALL'); foreach ($calls as $call) { $name = $call->getChildByIndex(0)->getConcreteString(); if (strtolower($name) == 'define') { $parameter_list = $call->getChildOfType(1, 'n_CALL_PARAMETER_LIST'); $defined = $parameter_list->getChildByIndex(0); if (!$defined->isStaticScalar()) { $this->raiseLintAtNode( $defined, self::LINT_DYNAMIC_DEFINE, 'First argument to define() must be a string literal.'); } } } } protected function lintUseOfThisInStaticMethods(XHPASTNode $root) { $classes = $root->selectDescendantsOfType('n_CLASS_DECLARATION'); foreach ($classes as $class) { $methods = $class->selectDescendantsOfType('n_METHOD_DECLARATION'); foreach ($methods as $method) { $attributes = $method ->getChildByIndex(0, 'n_METHOD_MODIFIER_LIST') ->selectDescendantsOfType('n_STRING'); $method_is_static = false; $method_is_abstract = false; foreach ($attributes as $attribute) { if (strtolower($attribute->getConcreteString()) == 'static') { $method_is_static = true; } if (strtolower($attribute->getConcreteString()) == 'abstract') { $method_is_abstract = true; } } if ($method_is_abstract) { continue; } if (!$method_is_static) { continue; } $body = $method->getChildOfType(5, 'n_STATEMENT_LIST'); $variables = $body->selectDescendantsOfType('n_VARIABLE'); foreach ($variables as $variable) { if ($method_is_static && strtolower($variable->getConcreteString()) == '$this') { $this->raiseLintAtNode( $variable, self::LINT_STATIC_THIS, 'You can not reference "$this" inside a static method.'); } } } } } /** * preg_quote() takes two arguments, but the second one is optional because * it is possible to use (), [] or {} as regular expression delimiters. If * you don't pass a second argument, you're probably going to get something * wrong. */ protected function lintPregQuote(XHPASTNode $root) { $function_calls = $root->selectDescendantsOfType('n_FUNCTION_CALL'); foreach ($function_calls as $call) { $name = $call->getChildByIndex(0)->getConcreteString(); if (strtolower($name) === 'preg_quote') { $parameter_list = $call->getChildOfType(1, 'n_CALL_PARAMETER_LIST'); if (count($parameter_list->getChildren()) !== 2) { $this->raiseLintAtNode( $call, self::LINT_PREG_QUOTE_MISUSE, 'If you use pattern delimiters that require escaping (such as //, '. 'but not ()) then you should pass two arguments to preg_quote(), '. 'so that preg_quote() knows which delimiter to escape.'); } } } } /** * Exit is parsed as an expression, but using it as such is almost always * wrong. That is, this is valid: * * strtoupper(33 * exit - 6); * * When exit is used as an expression, it causes the program to terminate with * exit code 0. This is likely not what is intended; these statements have * different effects: * * exit(-1); * exit -1; * * The former exits with a failure code, the latter with a success code! */ protected function lintExitExpressions(XHPASTNode $root) { $unaries = $root->selectDescendantsOfType('n_UNARY_PREFIX_EXPRESSION'); foreach ($unaries as $unary) { $operator = $unary->getChildByIndex(0)->getConcreteString(); if (strtolower($operator) == 'exit') { if ($unary->getParentNode()->getTypeName() != 'n_STATEMENT') { $this->raiseLintAtNode( $unary, self::LINT_EXIT_EXPRESSION, 'Use exit as a statement, not an expression.'); } } } } private function lintArrayIndexWhitespace(XHPASTNode $root) { $indexes = $root->selectDescendantsOfType('n_INDEX_ACCESS'); foreach ($indexes as $index) { $tokens = $index->getChildByIndex(0)->getTokens(); $last = array_pop($tokens); $trailing = $last->getNonsemanticTokensAfter(); $trailing_text = implode('', mpull($trailing, 'getValue')); if (preg_match('/^ +$/', $trailing_text)) { $this->raiseLintAtOffset( $last->getOffset() + strlen($last->getValue()), self::LINT_ARRAY_INDEX_SPACING, 'Convention: no spaces before index access.', $trailing_text, ''); } } } protected function lintTODOComments(XHPASTNode $root) { $comments = $root->selectTokensOfType('T_COMMENT') + $root->selectTokensOfType('T_DOC_COMMENT'); foreach ($comments as $token) { $value = $token->getValue(); if ($token->getTypeName() === 'T_DOC_COMMENT') { $regex = '/(TODO|@todo)/'; } else { $regex = '/TODO/'; } $matches = null; $preg = preg_match_all( $regex, $value, $matches, PREG_OFFSET_CAPTURE); foreach ($matches[0] as $match) { list($string, $offset) = $match; $this->raiseLintAtOffset( $token->getOffset() + $offset, self::LINT_TODO_COMMENT, 'This comment has a TODO.', $string); } } } /** * Lint that if the file declares exactly one interface or class, * the name of the file matches the name of the class, * unless the classname is funky like an XHP element. */ private function lintPrimaryDeclarationFilenameMatch(XHPASTNode $root) { $classes = $root->selectDescendantsOfType('n_CLASS_DECLARATION'); $interfaces = $root->selectDescendantsOfType('n_INTERFACE_DECLARATION'); if (count($classes) + count($interfaces) != 1) { return; } $declarations = count($classes) ? $classes : $interfaces; $declarations->rewind(); $declaration = $declarations->current(); $decl_name = $declaration->getChildByIndex(1); $decl_string = $decl_name->getConcreteString(); // Exclude strangely named classes, e.g. XHP tags. if (!preg_match('/^\w+$/', $decl_string)) { return; } $rename = $decl_string.'.php'; $path = $this->getActivePath(); $filename = basename($path); if ($rename == $filename) { return; } $this->raiseLintAtNode( $decl_name, self::LINT_CLASS_FILENAME_MISMATCH, "The name of this file differs from the name of the class or interface ". "it declares. Rename the file to '{$rename}'."); } private function lintPlusOperatorOnStrings(XHPASTNode $root) { $binops = $root->selectDescendantsOfType('n_BINARY_EXPRESSION'); foreach ($binops as $binop) { $op = $binop->getChildByIndex(1); if ($op->getConcreteString() != '+') { continue; } $left = $binop->getChildByIndex(0); $right = $binop->getChildByIndex(2); if (($left->getTypeName() == 'n_STRING_SCALAR') || ($right->getTypeName() == 'n_STRING_SCALAR')) { $this->raiseLintAtNode( $binop, self::LINT_PLUS_OPERATOR_ON_STRINGS, "In PHP, '.' is the string concatenation operator, not '+'. This ". "expression uses '+' with a string literal as an operand."); } } } /** * Finds duplicate keys in array initializers, as in * array(1 => 'anything', 1 => 'foo'). Since the first entry is ignored, * this is almost certainly an error. */ private function lintDuplicateKeysInArray(XHPASTNode $root) { $array_literals = $root->selectDescendantsOfType('n_ARRAY_LITERAL'); foreach ($array_literals as $array_literal) { $nodes_by_key = array(); $keys_warn = array(); $list_node = $array_literal->getChildByIndex(0); foreach ($list_node->getChildren() as $array_entry) { $key_node = $array_entry->getChildByIndex(0); switch ($key_node->getTypeName()) { case 'n_STRING_SCALAR': case 'n_NUMERIC_SCALAR': // Scalars: array(1 => 'v1', '1' => 'v2'); $key = 'scalar:'.(string)$key_node->evalStatic(); break; case 'n_SYMBOL_NAME': case 'n_VARIABLE': case 'n_CLASS_STATIC_ACCESS': // Constants: array(CONST => 'v1', CONST => 'v2'); // Variables: array($a => 'v1', $a => 'v2'); // Class constants and vars: array(C::A => 'v1', C::A => 'v2'); $key = $key_node->getTypeName().':'.$key_node->getConcreteString(); break; default: $key = null; break; } if ($key !== null) { if (isset($nodes_by_key[$key])) { $keys_warn[$key] = true; } $nodes_by_key[$key][] = $key_node; } } foreach ($keys_warn as $key => $_) { $node = array_pop($nodes_by_key[$key]); $message = $this->raiseLintAtNode( $node, self::LINT_DUPLICATE_KEYS_IN_ARRAY, 'Duplicate key in array initializer. PHP will ignore all '. 'but the last entry.'); $locations = array(); foreach ($nodes_by_key[$key] as $node) { $locations[] = $this->getOtherLocation($node->getOffset()); } $message->setOtherLocations($locations); } } } private function lintRaggedClasstreeEdges(XHPASTNode $root) { $parser = new PhutilDocblockParser(); $classes = $root->selectDescendantsOfType('n_CLASS_DECLARATION'); foreach ($classes as $class) { $is_final = false; $is_abstract = false; $is_concrete_extensible = false; $attributes = $class->getChildOfType(0, 'n_CLASS_ATTRIBUTES'); foreach ($attributes->getChildren() as $child) { if ($child->getConcreteString() == 'final') { $is_final = true; } if ($child->getConcreteString() == 'abstract') { $is_abstract = true; } } $docblock = $class->getDocblockToken(); if ($docblock) { list($text, $specials) = $parser->parse($docblock->getValue()); $is_concrete_extensible = idx($specials, 'concrete-extensible'); } if (!$is_final && !$is_abstract && !$is_concrete_extensible) { $this->raiseLintAtNode( $class->getChildOfType(1, 'n_CLASS_NAME'), self::LINT_RAGGED_CLASSTREE_EDGE, "This class is neither 'final' nor 'abstract', and does not have ". "a docblock marking it '@concrete-extensible'."); } } } private function lintClosingCallParen(XHPASTNode $root) { $calls = $root->selectDescendantsOfType('n_FUNCTION_CALL'); $calls = $calls->add($root->selectDescendantsOfType('n_METHOD_CALL')); foreach ($calls as $call) { // If the last parameter of a call is a HEREDOC, don't apply this rule. $params = $call ->getChildOfType(1, 'n_CALL_PARAMETER_LIST') ->getChildren(); if ($params) { $last_param = last($params); if ($last_param->getTypeName() == 'n_HEREDOC') { continue; } } $tokens = $call->getTokens(); $last = array_pop($tokens); $trailing = $last->getNonsemanticTokensBefore(); $trailing_text = implode('', mpull($trailing, 'getValue')); if (preg_match('/^\s+$/', $trailing_text)) { $this->raiseLintAtOffset( $last->getOffset() - strlen($trailing_text), self::LINT_CLOSING_CALL_PAREN, 'Convention: no spaces before closing parenthesis in calls.', $trailing_text, ''); } } } private function lintClosingDeclarationParen(XHPASTNode $root) { $decs = $root->selectDescendantsOfType('n_FUNCTION_DECLARATION'); $decs = $decs->add($root->selectDescendantsOfType('n_METHOD_DECLARATION')); foreach ($decs as $dec) { $params = $dec->getChildOfType(3, 'n_DECLARATION_PARAMETER_LIST'); $tokens = $params->getTokens(); $last = array_pop($tokens); $trailing = $last->getNonsemanticTokensBefore(); $trailing_text = implode('', mpull($trailing, 'getValue')); if (preg_match('/^\s+$/', $trailing_text)) { $this->raiseLintAtOffset( $last->getOffset() - strlen($trailing_text), self::LINT_CLOSING_DECL_PAREN, 'Convention: no spaces before closing parenthesis in function and '. 'method declarations.', $trailing_text, ''); } } } private function lintKeywordCasing(XHPASTNode $root) { $keywords = array(); $symbols = $root->selectDescendantsOfType('n_SYMBOL_NAME'); foreach ($symbols as $symbol) { $keywords[] = head($symbol->getTokens()); } $arrays = $root->selectDescendantsOfType('n_ARRAY_LITERAL'); foreach ($arrays as $array) { $keywords[] = head($array->getTokens()); } $typehints = $root->selectDescendantsOfType('n_TYPE_NAME'); foreach ($typehints as $typehint) { $keywords[] = head($typehint->getTokens()); } $new_invocations = $root->selectDescendantsOfType('n_NEW'); foreach ($new_invocations as $invocation) { $keywords[] = head($invocation->getTokens()); } // NOTE: Although PHP generally allows arbitrary casing for all language // keywords, it's exceedingly rare for anyone to type, e.g., "CLASS" or // "cLaSs" in the wild. This list just attempts to cover unconventional // spellings which see some level of use, not all keywords exhaustively. // There is no token or node type which spans all keywords, so this is // significantly simpler. static $keyword_map = array( 'true' => 'true', 'false' => 'false', 'null' => 'null', 'array' => 'array', 'new' => 'new', ); foreach ($keywords as $keyword) { $value = $keyword->getValue(); $value_key = strtolower($value); if (!isset($keyword_map[$value_key])) { continue; } $expected_spelling = $keyword_map[$value_key]; if ($value !== $expected_spelling) { $this->raiseLintAtToken( $keyword, self::LINT_KEYWORD_CASING, "Convention: spell keyword '{$value}' as '{$expected_spelling}'.", $expected_spelling); } } } private function lintStrings(XHPASTNode $root) { $nodes = $root->selectDescendantsOfTypes(array( 'n_CONCATENATION_LIST', 'n_STRING_SCALAR')); foreach ($nodes as $node) { $strings = array(); if ($node->getTypeName() === 'n_CONCATENATION_LIST') { $strings = $node->selectDescendantsOfType('n_STRING_SCALAR'); } else if ($node->getTypeName() === 'n_STRING_SCALAR') { $strings = array($node); if ($node->getParentNode()->getTypeName() === 'n_CONCATENATION_LIST') { continue; } } $valid = false; $invalid_nodes = array(); $fixes = array(); foreach ($strings as $string) { $concrete_string = $string->getConcreteString(); $single_quoted = ($concrete_string[0] === "'"); $contents = substr($concrete_string, 1, -1); // Double quoted strings are allowed when the string contains the // following characters. static $allowed_chars = array( '\n', '\r', '\t', '\v', '\e', '\f', '\'', '\0', '\1', '\2', '\3', '\4', '\5', '\6', '\7', '\x', ); $contains_special_chars = false; foreach ($allowed_chars as $allowed_char) { if (strpos($contents, $allowed_char) !== false) { $contains_special_chars = true; } } if (!$string->isConstantString()) { $valid = true; } else if ($contains_special_chars && !$single_quoted) { $valid = true; } else if (!$contains_special_chars && !$single_quoted) { $invalid_nodes[] = $string; $fixes[$string->getID()] = "'".str_replace('\"', '"', $contents)."'"; } } if (!$valid) { foreach ($invalid_nodes as $invalid_node) { $this->raiseLintAtNode( $invalid_node, self::LINT_DOUBLE_QUOTE, pht( 'String does not require double quotes. For consistency, '. 'prefer single quotes.'), $fixes[$invalid_node->getID()]); } } } } protected function lintElseIfStatements(XHPASTNode $root) { $tokens = $root->selectTokensOfType('T_ELSEIF'); foreach ($tokens as $token) { $this->raiseLintAtToken( $token, self::LINT_ELSEIF_USAGE, pht('Usage of `else if` is preferred over `elseif`.'), 'else if'); } } protected function lintSemicolons(XHPASTNode $root) { $tokens = $root->selectTokensOfType(';'); foreach ($tokens as $token) { $prev = $token->getPrevToken(); if ($prev->isAnyWhitespace()) { $this->raiseLintAtToken( $prev, self::LINT_SEMICOLON_SPACING, pht('Space found before semicolon.'), ''); } } } public function getSuperGlobalNames() { return array( '$GLOBALS', '$_SERVER', '$_GET', '$_POST', '$_FILES', '$_COOKIE', '$_SESSION', '$_REQUEST', '$_ENV', ); } }