X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_api.c;h=e2e04208a531e037ebaf47f5070558fbb5c32309;hp=a5b898d8f6931ce91d6a33ff269686b85d4e910f;hb=007a8514b1fd679453526f96dc8a908a8e6354e8;hpb=21ef2bd1b65e683b5a6cca71de490528f9e0f80b diff --git a/http_api.c b/http_api.c index a5b898d..e2e0420 100644 --- a/http_api.c +++ b/http_api.c @@ -34,7 +34,6 @@ #include "ext/standard/php_string.h" #include "ext/standard/php_smart_str.h" #include "ext/standard/php_lcg.h" -#include "ext/standard/php_filestat.h" #include "SAPI.h" @@ -59,6 +58,9 @@ #endif +#if !defined(CURLINFO_RESONSE_CODE) && defined(CURLINFO_HTTP_CODE) +#define CURLINFO_RESONSE_CODE CURLINFO_HTTP_CODE +#endif ZEND_DECLARE_MODULE_GLOBALS(http) @@ -433,7 +435,7 @@ static inline void _http_curl_setopts(CURL *ch, const char *url, HashTable *opti curl_easy_setopt(ch, CURLOPT_AUTOREFERER, 1); curl_easy_setopt(ch, CURLOPT_WRITEFUNCTION, http_curl_body_callback); curl_easy_setopt(ch, CURLOPT_HEADERFUNCTION, http_curl_hdrs_callback); -#ifdef ZTS +#if defined(ZTS) && (LIBCURL_VERSION_NUM >= 0x070a00) curl_easy_setopt(ch, CURLOPT_NOSIGNAL, 1); #endif @@ -463,19 +465,23 @@ static inline void _http_curl_setopts(CURL *ch, const char *url, HashTable *opti if (zoption = http_curl_getopt1(options, "proxyauth", IS_STRING)) { curl_easy_setopt(ch, CURLOPT_PROXYUSERPWD, Z_STRVAL_P(zoption)); } +#if LIBCURL_VERSION_NUM > 0x070a06 /* auth method */ if (zoption = http_curl_getopt1(options, "proxyauthtype", IS_LONG)) { curl_easy_setopt(ch, CURLOPT_PROXYAUTH, Z_LVAL_P(zoption)); } +#endif } /* auth */ if (zoption = http_curl_getopt1(options, "httpauth", IS_STRING)) { curl_easy_setopt(ch, CURLOPT_USERPWD, Z_STRVAL_P(zoption)); } +#if LIBCURL_VERSION_NUM > 0x070a05 if (zoption = http_curl_getopt1(options, "httpauthtype", IS_LONG)) { curl_easy_setopt(ch, CURLOPT_HTTPAUTH, Z_LVAL_P(zoption)); } +#endif /* compress, enabled by default (empty string enables deflate and gzip) */ if (zoption = http_curl_getopt2(options, "compress", IS_LONG, IS_BOOL)) { @@ -527,6 +533,7 @@ static inline void _http_curl_setopts(CURL *ch, const char *url, HashTable *opti if (qstr.c) { curl_easy_setopt(ch, CURLOPT_COOKIE, qstr.c); + efree(qstr.c); } } @@ -563,13 +570,17 @@ static inline void _http_curl_setopts(CURL *ch, const char *url, HashTable *opti /* {{{ static inline char *http_curl_getinfoname(CURLINFO) */ static inline char *_http_curl_getinfoname(CURLINFO i TSRMLS_DC) { -#define CASE(I) case CURLINFO_ ##I : return pretty_key(estrdup( #I ), strlen(#I), 0, 0) +#define CASE(I) case CURLINFO_ ##I : { static char I[] = #I; return pretty_key(I, sizeof(#I)-1, 0, 0); } switch (i) { /* CURLINFO_EFFECTIVE_URL = CURLINFO_STRING +1, */ CASE(EFFECTIVE_URL); /* CURLINFO_RESPONSE_CODE = CURLINFO_LONG +2, */ +#if LIBCURL_VERSION_NUM > 0x070a06 CASE(RESPONSE_CODE); +#else + CASE(HTTP_CODE); +#endif /* CURLINFO_TOTAL_TIME = CURLINFO_DOUBLE +3, */ CASE(TOTAL_TIME); /* CURLINFO_NAMELOOKUP_TIME = CURLINFO_DOUBLE +4, */ @@ -606,14 +617,16 @@ static inline char *_http_curl_getinfoname(CURLINFO i TSRMLS_DC) CASE(REDIRECT_TIME); /* CURLINFO_REDIRECT_COUNT = CURLINFO_LONG +20, */ CASE(REDIRECT_COUNT); - /* CURLINFO_PRIVATE = CURLINFO_STRING +21, */ + /* CURLINFO_PRIVATE = CURLINFO_STRING +21, * (mike) / CASE(PRIVATE); /* CURLINFO_HTTP_CONNECTCODE = CURLINFO_LONG +22, */ CASE(HTTP_CONNECTCODE); +#if LIBCURL_VERSION_NUM > 0x070a07 /* CURLINFO_HTTPAUTH_AVAIL = CURLINFO_LONG +23, */ CASE(HTTPAUTH_AVAIL); /* CURLINFO_PROXYAUTH_AVAIL = CURLINFO_LONG +24, */ CASE(PROXYAUTH_AVAIL); +#endif } #undef CASE return NULL; @@ -667,8 +680,12 @@ static inline void _http_curl_getinfo(CURL *ch, HashTable *info TSRMLS_DC) #define INFO(I) http_curl_getinfo_ex(ch, CURLINFO_ ##I , &array) /* CURLINFO_EFFECTIVE_URL = CURLINFO_STRING +1, */ INFO(EFFECTIVE_URL); +#if LIBCURL_VERSION_NUM > 0x070a06 /* CURLINFO_RESPONSE_CODE = CURLINFO_LONG +2, */ INFO(RESPONSE_CODE); +#else + INFO(HTTP_CODE); +#endif /* CURLINFO_TOTAL_TIME = CURLINFO_DOUBLE +3, */ INFO(TOTAL_TIME); /* CURLINFO_NAMELOOKUP_TIME = CURLINFO_DOUBLE +4, */ @@ -709,10 +726,12 @@ static inline void _http_curl_getinfo(CURL *ch, HashTable *info TSRMLS_DC) INFO(PRIVATE); /* CURLINFO_HTTP_CONNECTCODE = CURLINFO_LONG +22, */ INFO(HTTP_CONNECTCODE); +#if LIBCURL_VERSION_NUM > 0x070a07 /* CURLINFO_HTTPAUTH_AVAIL = CURLINFO_LONG +23, */ INFO(HTTPAUTH_AVAIL); /* CURLINFO_PROXYAUTH_AVAIL = CURLINFO_LONG +24, */ INFO(PROXYAUTH_AVAIL); +#endif #undef INFO } /* }}} */ @@ -1061,9 +1080,12 @@ PHP_HTTP_API inline time_t _http_lmod(const void *data_ptr, const http_send_mode default: { - zval mtime; - php_stat(Z_STRVAL_P((zval *) data_ptr), Z_STRLEN_P((zval *) data_ptr), 6, &mtime TSRMLS_CC); - return Z_LVAL(mtime); + if (!HTTP_G(ssb).sb.st_mtime) { + if(php_stream_stat_path(Z_STRVAL_P((zval *) data_ptr), &HTTP_G(ssb))) { + return 0; + } + } + return HTTP_G(ssb).sb.st_mtime; } } }