2 +--------------------------------------------------------------------+
4 +--------------------------------------------------------------------+
5 | Redistribution and use in source and binary forms, with or without |
6 | modification, are permitted provided that the conditions mentioned |
7 | in the accompanying LICENSE file are met. |
8 +--------------------------------------------------------------------+
9 | Copyright (c) 2015, Michael Wallner <mike@php.net> |
10 +--------------------------------------------------------------------+
20 #include "ext/standard/info.h"
21 #include "ext/json/php_json.h"
22 #include "php_json_post.h"
25 ZEND_DECLARE_MODULE_GLOBALS(json_post
);
28 STD_PHP_INI_ENTRY("json_post.flags", "1", PHP_INI_PERDIR
, OnUpdateLong
, flags
, zend_json_post_globals
, json_post_globals
)
31 static void php_json_post_init_globals(zend_json_post_globals
*json_post_globals
)
33 #if PHP_VERSION_ID >= 50400
34 json_post_globals
->flags
= PHP_JSON_OBJECT_AS_ARRAY
;
36 json_post_globals
->flags
= 1;
40 PHP_MINFO_FUNCTION(json_post
)
42 php_info_print_table_start();
43 php_info_print_table_header(2, "json_post support", "enabled");
44 php_info_print_table_end();
46 DISPLAY_INI_ENTRIES();
49 static SAPI_POST_HANDLER_FUNC(php_json_post_handler
)
52 char *json_str
= NULL
;
55 #if PHP_VERSION_ID >= 50600
56 if (SG(request_info
).request_body
) {
57 /* FG(stream_wrappers) not initialized yet, so we cannot use php://input */
58 php_stream_rewind(SG(request_info
).request_body
);
59 json_len
= php_stream_copy_to_mem(SG(request_info
).request_body
, &json_str
, PHP_STREAM_COPY_ALL
, 0);
62 json_str
= SG(request_info
).raw_post_data
;
63 json_len
= SG(request_info
).raw_post_data_length
;
70 #if PHP_VERSION_ID >= 50400
71 php_json_decode_ex(&zjson
, json_str
, json_len
, JSON_POST_G(flags
), PG(max_input_nesting_level
) TSRMLS_CC
);
72 if (Z_TYPE(zjson
) != IS_NULL
) {
74 ZVAL_COPY_VALUE(zarg
, (&zjson
));
76 php_json_decode(&zjson
, json_str
, json_len
, (zend_bool
)(JSON_POST_G(flags
)&1), PG(max_input_nesting_level
) TSRMLS_CC
);
77 if (Z_TYPE(zjson
) != IS_NULL
) {
79 zarg
->value
= zjson
.value
;
80 Z_TYPE_P(zarg
) = Z_TYPE(zjson
);
84 #if PHP_VERSION_ID >= 50600
91 PHP_MINIT_FUNCTION(json_post
)
93 sapi_post_entry entry
= {NULL
, 0, NULL
, NULL
};
95 entry
.post_reader
= sapi_read_standard_form_data
;
96 entry
.post_handler
= php_json_post_handler
;
98 entry
.content_type
= "text/json";
99 entry
.content_type_len
= sizeof("text/json")-1;
100 sapi_register_post_entry(&entry TSRMLS_CC
);
102 ZEND_INIT_MODULE_GLOBALS(json_post
, php_json_post_init_globals
, NULL
);
103 REGISTER_INI_ENTRIES();
107 PHP_MSHUTDOWN_FUNCTION(json_post
)
109 UNREGISTER_INI_ENTRIES();
114 zend_function_entry json_post_functions
[] = {
118 static zend_module_dep json_post_module_deps
[] = {
119 ZEND_MOD_REQUIRED("json")
120 {NULL
, NULL
, NULL
, 0}
123 zend_module_entry json_post_module_entry
= {
124 STANDARD_MODULE_HEADER_EX
,
126 json_post_module_deps
,
129 PHP_MINIT(json_post
),
130 PHP_MSHUTDOWN(json_post
),
133 PHP_MINFO(json_post
),
134 PHP_JSON_POST_VERSION
,
135 STANDARD_MODULE_PROPERTIES
139 #ifdef COMPILE_DL_JSON_POST
140 ZEND_GET_MODULE(json_post
)
148 * vim600: noet sw=4 ts=4 fdm=marker
149 * vim<600: noet sw=4 ts=4