PHP_FE(http_chunked_decode, NULL)
PHP_FE(http_split_response, NULL)
PHP_FE(http_parse_headers, NULL)
+ PHP_FE(http_get_request_headers, NULL)
#ifdef HTTP_HAVE_CURL
PHP_FE(http_get, http_request_info_ref_3)
PHP_FE(http_head, http_request_info_ref_3)
* content body. The returned array may look simliar to the following example:
*
* <pre>
+ * <?php
* array(
* 0 => array(
* 'Status' => '200 Ok',
* ),
* 1 => "Hello World!"
* );
+ * ?>
* </pre>
*/
PHP_FUNCTION(http_split_response)
}
/* }}} */
-/* {{{ proto array http_parse_headers(string header) */
+/* {{{ proto array http_parse_headers(string header)
+ *
+ */
PHP_FUNCTION(http_parse_headers)
{
char *header, *rnrn;
}
/* }}}*/
+/* {{{ proto array http_get_request_headers(void)
+ *
+ */
+PHP_FUNCTION(http_get_request_headers)
+{
+ if (ZEND_NUM_ARGS()) {
+ WRONG_PARAM_COUNT;
+ }
+
+ array_init(return_value);
+ http_get_request_headers(return_value);
+}
+/* }}} */
+
/* {{{ HAVE_CURL */
#ifdef HTTP_HAVE_CURL
* </pre>
*
* The optional third parameter will be filled with some additional information
- * in form af an associative array, if supplied (don't forget to initialize it
- * with NULL or array()).
+ * in form af an associative array, if supplied, like the following example:
+ * <pre>
+ * <?php
+ * array (
+ * 'effective_url' => 'http://localhost',
+ * 'response_code' => 403,
+ * 'total_time' => 0.017,
+ * 'namelookup_time' => 0.013,
+ * 'connect_time' => 0.014,
+ * 'pretransfer_time' => 0.014,
+ * 'size_upload' => 0,
+ * 'size_download' => 202,
+ * 'speed_download' => 11882,
+ * 'speed_upload' => 0,
+ * 'header_size' => 145,
+ * 'request_size' => 62,
+ * 'ssl_verifyresult' => 0,
+ * 'filetime' => -1,
+ * 'content_length_download' => 202,
+ * 'content_length_upload' => 0,
+ * 'starttransfer_time' => 0.017,
+ * 'content_type' => 'text/html; charset=iso-8859-1',
+ * 'redirect_time' => 0,
+ * 'redirect_count' => 0,
+ * 'private' => '',
+ * 'http_connectcode' => 0,
+ * 'httpauth_avail' => 0,
+ * 'proxyauth_avail' => 0,
+ * )
+ * ?>
+ * </pre>
*/
PHP_FUNCTION(http_get)
{
static int check_month(char *month);
static int check_tzone(char *tzone);
+static char *pretty_key(char *key, int key_len, int uctitle, int xhyphen);
+
/* {{{ HAVE_CURL */
#ifdef HTTP_HAVE_CURL
#define http_curl_initbuf(m) _http_curl_initbuf((m) TSRMLS_CC)
/* {{{ static inline char *http_curl_getinfoname(CURLINFO) */
static inline char *_http_curl_getinfoname(CURLINFO i TSRMLS_DC)
{
-#define CASE(I) case CURLINFO_ ##I : return #I
+#define CASE(I) case CURLINFO_ ##I : return pretty_key(estrdup( #I ), strlen(#I), 0, 0)
switch (i)
{
/* CURLINFO_EFFECTIVE_URL = CURLINFO_STRING +1, */
}
/* }}} */
+/* static char *pretty_key(char *, int, int, int) */
+static char *pretty_key(char *key, int key_len, int uctitle, int xhyphen)
+{
+ if (key && key_len) {
+ int i, wasalpha;
+ if (wasalpha = isalpha(key[0])) {
+ key[0] = uctitle ? toupper(key[0]) : tolower(key[0]);
+ }
+ for (i = 1; i < key_len; i++) {
+ if (isalpha(key[i])) {
+ key[i] = ((!wasalpha) && uctitle) ? toupper(key[i]) : tolower(key[i]);
+ wasalpha = 1;
+ } else {
+ if (xhyphen && (key[i] == '_')) {
+ key[i] = '-';
+ }
+ wasalpha = 0;
+ }
+ }
+ }
+ return key;
+}
+/* }}} */
+
/* }}} internals */
/* {{{ public API */
}
/* }}} */
+/* {{{ void http_get_request_headers(zval *) */
+PHP_HTTP_API void _http_get_request_headers(zval *array TSRMLS_DC)
+{
+ char *key;
+
+ for ( zend_hash_internal_pointer_reset(HTTP_SERVER_VARS);
+ zend_hash_get_current_key(HTTP_SERVER_VARS, &key, NULL, 0) != HASH_KEY_NON_EXISTANT;
+ zend_hash_move_forward(HTTP_SERVER_VARS)) {
+ if (!strncmp(key, "HTTP_", 5)) {
+ zval **header;
+ zend_hash_get_current_data(HTTP_SERVER_VARS, (void **) &header);
+ add_assoc_stringl(array, pretty_key(key + 5, strlen(key) - 5, 1, 1), Z_STRVAL_PP(header), Z_STRLEN_PP(header), 1);
+ }
+ }
+}
+/* }}} */
+
/* {{{ HAVE_CURL */
#ifdef HTTP_HAVE_CURL