diff options
| -rw-r--r-- | ext/curl/curl.c | 323 | ||||
| -rw-r--r-- | ext/curl/php_curl.h | 60 | 
2 files changed, 285 insertions, 98 deletions
diff --git a/ext/curl/curl.c b/ext/curl/curl.c index f5e8bf23e2..65a2ad4251 100644 --- a/ext/curl/curl.c +++ b/ext/curl/curl.c @@ -36,11 +36,11 @@ php_curl_globals curl_globals;  #endif  function_entry curl_functions[] = { -	PHP_FE (curl_init,		NULL) -	PHP_FE (curl_version,		NULL) -	PHP_FE (curl_setopt,	NULL) -	PHP_FE (curl_exec,		NULL) -	PHP_FE (curl_close,		NULL) +	PHP_FE(curl_init,     NULL) +	PHP_FE(curl_version,  NULL) +	PHP_FE(curl_setopt,   NULL) +	PHP_FE(curl_exec,     NULL) +	PHP_FE(curl_close,    NULL)  	{NULL, NULL, NULL}  }; @@ -59,68 +59,117 @@ zend_module_entry curl_module_entry = {  ZEND_GET_MODULE (curl)  #endif -static void php_curl_close (CURL *cp); -static void php_curl_close (CURL *cp) +static void php_curl_close(CURL *cp); +static int php_curl_error_translator(CURLcode err); + +static void php_curl_close(CURL *cp)  { -	curl_easy_cleanup (cp); +	curl_easy_cleanup(cp);  }  PHP_MINFO_FUNCTION(curl)  { -	php_info_print_table_start (); -	php_info_print_table_row (2, "CURL support",     "enabled"); -	php_info_print_table_row (2, "CURL Information", curl_version()); -	php_info_print_table_end (); +	php_info_print_table_start(); +	php_info_print_table_row(2, "CURL support",     "enabled"); +	php_info_print_table_row(2, "CURL Information", curl_version()); +	php_info_print_table_end();  }  PHP_MINIT_FUNCTION(curl)  {  	CURLLS_FETCH(); -	CURLG(le_curl) = register_list_destructors (php_curl_close, NULL); -	REGISTER_LONG_CONSTANT ("CURLOPT_PORT", CURLOPT_PORT, CONST_CS | CONST_PERSISTENT); -	REGISTER_LONG_CONSTANT ("CURLOPT_FILE", CURLOPT_FILE, CONST_CS | CONST_PERSISTENT); -	REGISTER_LONG_CONSTANT ("CURLOPT_INFILE", CURLOPT_INFILE, CONST_CS | CONST_PERSISTENT); -	REGISTER_LONG_CONSTANT ("CURLOPT_INFILESIZE", CURLOPT_INFILESIZE, CONST_CS | CONST_PERSISTENT); -	REGISTER_LONG_CONSTANT ("CURLOPT_URL", CURLOPT_URL, CONST_CS | CONST_PERSISTENT); -	REGISTER_LONG_CONSTANT ("CURLOPT_PROXY", CURLOPT_PROXY, CONST_CS | CONST_PERSISTENT); -	REGISTER_LONG_CONSTANT ("CURLOPT_VERBOSE", CURLOPT_VERBOSE, CONST_CS | CONST_PERSISTENT); -	REGISTER_LONG_CONSTANT ("CURLOPT_HEADER", CURLOPT_HEADER, CONST_CS | CONST_PERSISTENT); -	REGISTER_LONG_CONSTANT ("CURLOPT_NOPROGRESS", CURLOPT_NOPROGRESS, CONST_CS | CONST_PERSISTENT); -	REGISTER_LONG_CONSTANT ("CURLOPT_NOBODY", CURLOPT_NOBODY, CONST_CS | CONST_PERSISTENT); -	REGISTER_LONG_CONSTANT ("CURLOPT_FAILONERROR", CURLOPT_FAILONERROR, CONST_CS | CONST_PERSISTENT); -	REGISTER_LONG_CONSTANT ("CURLOPT_UPLOAD", CURLOPT_UPLOAD, CONST_CS | CONST_PERSISTENT); -	REGISTER_LONG_CONSTANT ("CURLOPT_POST", CURLOPT_POST, CONST_CS | CONST_PERSISTENT); -	REGISTER_LONG_CONSTANT ("CURLOPT_FTPLISTONLY", CURLOPT_FTPLISTONLY, CONST_CS | CONST_PERSISTENT); -	REGISTER_LONG_CONSTANT ("CURLOPT_FTPAPPEND", CURLOPT_FTPAPPEND, CONST_CS | CONST_PERSISTENT); -	REGISTER_LONG_CONSTANT ("CURLOPT_NETRC", CURLOPT_NETRC, CONST_CS | CONST_PERSISTENT); -	REGISTER_LONG_CONSTANT ("CURLOPT_FOLLOWLOCATION", CURLOPT_FOLLOWLOCATION, CONST_CS | CONST_PERSISTENT); -	REGISTER_LONG_CONSTANT ("CURLOPT_FTPASCII", CURLOPT_FTPASCII, CONST_CS | CONST_PERSISTENT); -	REGISTER_LONG_CONSTANT ("CURLOPT_PUT", CURLOPT_PUT, CONST_CS | CONST_PERSISTENT); -	REGISTER_LONG_CONSTANT ("CURLOPT_MUTE", CURLOPT_MUTE, CONST_CS | CONST_PERSISTENT); -	REGISTER_LONG_CONSTANT ("CURLOPT_USERPWD", CURLOPT_USERPWD, CONST_CS | CONST_PERSISTENT); -	REGISTER_LONG_CONSTANT ("CURLOPT_PROXYUSERPWD", CURLOPT_PROXYUSERPWD, CONST_CS | CONST_PERSISTENT); -	REGISTER_LONG_CONSTANT ("CURLOPT_RANGE", CURLOPT_RANGE, CONST_CS | CONST_PERSISTENT); -	REGISTER_LONG_CONSTANT ("CURLOPT_TIMEOUT", CURLOPT_TIMEOUT, CONST_CS | CONST_PERSISTENT); -	REGISTER_LONG_CONSTANT ("CURLOPT_POSTFIELDS", CURLOPT_POSTFIELDS, CONST_CS | CONST_PERSISTENT); -	REGISTER_LONG_CONSTANT ("CURLOPT_REFERER", CURLOPT_REFERER, CONST_CS | CONST_PERSISTENT); -	REGISTER_LONG_CONSTANT ("CURLOPT_USERAGENT", CURLOPT_USERAGENT, CONST_CS | CONST_PERSISTENT); -	REGISTER_LONG_CONSTANT ("CURLOPT_FTPPORT", CURLOPT_FTPPORT, CONST_CS | CONST_PERSISTENT); -	REGISTER_LONG_CONSTANT ("CURLOPT_LOW_SPEED_LIMIT", CURLOPT_LOW_SPEED_LIMIT, CONST_CS | CONST_PERSISTENT); -	REGISTER_LONG_CONSTANT ("CURLOPT_LOW_SPEED_TIME", CURLOPT_LOW_SPEED_TIME, CONST_CS | CONST_PERSISTENT); -	REGISTER_LONG_CONSTANT ("CURLOPT_RESUME_FROM", CURLOPT_RESUME_FROM, CONST_CS | CONST_PERSISTENT); -	REGISTER_LONG_CONSTANT ("CURLOPT_COOKIE", CURLOPT_COOKIE, CONST_CS | CONST_PERSISTENT); -	REGISTER_LONG_CONSTANT ("CURLOPT_SSLCERT", CURLOPT_SSLCERT, CONST_CS | CONST_PERSISTENT); -	REGISTER_LONG_CONSTANT ("CURLOPT_SSLCERTPASSWD", CURLOPT_SSLCERTPASSWD, CONST_CS | CONST_PERSISTENT); -	REGISTER_LONG_CONSTANT ("CURLOPT_WRITEHEADER", CURLOPT_WRITEHEADER, CONST_CS | CONST_PERSISTENT); -	REGISTER_LONG_CONSTANT ("CURLOPT_COOKIEFILE", CURLOPT_COOKIEFILE, CONST_CS | CONST_PERSISTENT); -	REGISTER_LONG_CONSTANT ("CURLOPT_SSLVERSION", CURLOPT_SSLVERSION, CONST_CS | CONST_PERSISTENT); -	REGISTER_LONG_CONSTANT ("CURLOPT_TIMECONDITION", CURLOPT_TIMECONDITION, CONST_CS | CONST_PERSISTENT); -	REGISTER_LONG_CONSTANT ("CURLOPT_TIMEVALUE", CURLOPT_TIMEVALUE, CONST_CS | CONST_PERSISTENT); -	REGISTER_LONG_CONSTANT ("CURLOPT_CUSTOMREQUEST", CURLOPT_CUSTOMREQUEST, CONST_CS | CONST_PERSISTENT); -	REGISTER_LONG_CONSTANT ("CURLOPT_STDERR", CURLOPT_STDERR, CONST_CS | CONST_PERSISTENT); -	REGISTER_LONG_CONSTANT ("CURLOPT_WRITEINFO", CURLOPT_WRITEINFO, CONST_CS | CONST_PERSISTENT); -	REGISTER_LONG_CONSTANT ("CURLOPT_TRANSFERTEXT", CURLOPT_TRANSFERTEXT, CONST_CS | CONST_PERSISTENT); +	CURLG(le_curl) = register_list_destructors(php_curl_close, NULL); +	REGISTER_LONG_CONSTANT("CURLOPT_PORT", CURLOPT_PORT, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLOPT_FILE", CURLOPT_FILE, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLOPT_INFILE", CURLOPT_INFILE, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLOPT_INFILESIZE", CURLOPT_INFILESIZE, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLOPT_URL", CURLOPT_URL, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLOPT_PROXY", CURLOPT_PROXY, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLOPT_VERBOSE", CURLOPT_VERBOSE, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLOPT_HEADER", CURLOPT_HEADER, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLOPT_NOPROGRESS", CURLOPT_NOPROGRESS, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLOPT_NOBODY", CURLOPT_NOBODY, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLOPT_FAILONERROR", CURLOPT_FAILONERROR, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLOPT_UPLOAD", CURLOPT_UPLOAD, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLOPT_POST", CURLOPT_POST, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLOPT_FTPLISTONLY", CURLOPT_FTPLISTONLY, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLOPT_FTPAPPEND", CURLOPT_FTPAPPEND, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLOPT_NETRC", CURLOPT_NETRC, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLOPT_FOLLOWLOCATION", CURLOPT_FOLLOWLOCATION, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLOPT_FTPASCII", CURLOPT_FTPASCII, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLOPT_PUT", CURLOPT_PUT, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLOPT_MUTE", CURLOPT_MUTE, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLOPT_USERPWD", CURLOPT_USERPWD, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLOPT_PROXYUSERPWD", CURLOPT_PROXYUSERPWD, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLOPT_RANGE", CURLOPT_RANGE, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLOPT_TIMEOUT", CURLOPT_TIMEOUT, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLOPT_POSTFIELDS", CURLOPT_POSTFIELDS, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLOPT_REFERER", CURLOPT_REFERER, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLOPT_USERAGENT", CURLOPT_USERAGENT, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLOPT_FTPPORT", CURLOPT_FTPPORT, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLOPT_LOW_SPEED_LIMIT", CURLOPT_LOW_SPEED_LIMIT, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLOPT_LOW_SPEED_TIME", CURLOPT_LOW_SPEED_TIME, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLOPT_RESUME_FROM", CURLOPT_RESUME_FROM, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLOPT_COOKIE", CURLOPT_COOKIE, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLOPT_SSLCERT", CURLOPT_SSLCERT, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLOPT_SSLCERTPASSWD", CURLOPT_SSLCERTPASSWD, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLOPT_WRITEHEADER", CURLOPT_WRITEHEADER, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLOPT_COOKIEFILE", CURLOPT_COOKIEFILE, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLOPT_SSLVERSION", CURLOPT_SSLVERSION, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLOPT_TIMECONDITION", CURLOPT_TIMECONDITION, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLOPT_TIMEVALUE", CURLOPT_TIMEVALUE, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLOPT_CUSTOMREQUEST", CURLOPT_CUSTOMREQUEST, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLOPT_STDERR", CURLOPT_STDERR, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLOPT_WRITEINFO", CURLOPT_WRITEINFO, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLOPT_TRANSFERTEXT", CURLOPT_TRANSFERTEXT, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLE_OK", CE_OK, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLE_UNSUPPORTED_PROTOCOL", CE_UNSUPPORTED_PROTOCOL, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLE_FAILED_INIT", CE_FAILED_INIT, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLE_URL_MALFORMAT", CE_URL_MALFORMAT, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLE_URL_MALFORMAT_USER", CE_URL_MALFORMAT_USER, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLE_COULDNT_RESOLVE_PROXY", CE_COULDNT_RESOLVE_PROXY, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLE_COULDNT_RESOLVE_HOST", CE_COULDNT_RESOLVE_HOST, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLE_COULDNT_CONNECT", CE_COULDNT_CONNECT, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLE_FTP_WEIRD_SERVER_REPLY", CE_FTP_WEIRD_SERVER_REPLY, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLE_FTP_ACCESS_DENIED", CE_FTP_ACCESS_DENIED, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLE_FTP_USER_PASSWORD_INCORRECT", CE_FTP_USER_PASSWORD_INCORRECT, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLE_FTP_WEIRD_PASS_REPLY", CE_FTP_WEIRD_PASS_REPLY, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLE_FTP_WEIRD_USER_REPLY", CE_FTP_WEIRD_USER_REPLY, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLE_FTP_WEIRD_PASV_REPLY", CE_FTP_WEIRD_PASV_REPLY, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLE_FTP_WEIRD_227_FORMAT", CE_FTP_WEIRD_227_FORMAT, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLE_FTP_CANT_GET_HOST", CE_FTP_CANT_GET_HOST, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLE_FTP_CANT_RECONNECT", CE_FTP_CANT_RECONNECT, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLE_FTP_COULDNT_SET_BINARY", CE_FTP_COULDNT_SET_BINARY, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLE_PARTIAL_FILE", CE_PARTIAL_FILE, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLE_FTP_COULDNT_RETR_FILE", CE_FTP_COULDNT_RETR_FILE, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLE_FTP_WRITE_ERROR", CE_FTP_WRITE_ERROR, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLE_FTP_QUOTE_ERROR", CE_FTP_QUOTE_ERROR, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLE_HTTP_NOT_FOUND", CE_HTTP_NOT_FOUND, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLE_WRITE_ERROR", CE_WRITE_ERROR, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLE_MALFORMAT_USER", CE_MALFORMAT_USER, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLE_FTP_COULDNT_STOR_FILE", CE_FTP_COULDNT_STOR_FILE, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLE_READ_ERROR", CE_READ_ERROR, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLE_OUT_OF_MEMORY", CE_OUT_OF_MEMORY, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLE_OPERATION_TIMEOUTED", CE_OPERATION_TIMEOUTED, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLE_FTP_COULDNT_SET_ASCII", CE_FTP_COULDNT_SET_ASCII, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLE_FTP_PORT_FAILED", CE_FTP_PORT_FAILED, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLE_FTP_COULDNT_USE_REST", CE_FTP_COULDNT_USE_REST, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLE_FTP_COULDNT_GET_SIZE", CE_FTP_COULDNT_GET_SIZE, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLE_HTTP_RANGE_ERROR", CE_HTTP_RANGE_ERROR, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLE_HTTP_POST_ERROR", CE_HTTP_POST_ERROR, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLE_SSL_CONNECT_ERROR", CE_SSL_CONNECT_ERROR, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLE_FTP_BAD_DOWNLOAD_RESUME", CE_FTP_BAD_DOWNLOAD_RESUME, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLE_FILE_COULDNT_READ_FILE", CE_FILE_COULDNT_READ_FILE, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLE_LDAP_CANNOT_BIND", CE_LDAP_CANNOT_BIND, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLE_LDAP_SEARCH_FAILED", CE_LDAP_SEARCH_FAILED, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLE_LIBRARY_NOT_FOUND", CE_LIBRARY_NOT_FOUND, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLE_FUNCTION_NOT_FOUND", CE_FUNCTION_NOT_FOUND, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLE_ABORTED_BY_CALLBACK", CE_ABORTED_BY_CALLBACK, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLE_BAD_FUNCTION_ARGUMENT", CE_BAD_FUNCTION_ARGUMENT, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURLE_BAD_CALLING_ORDER", CE_BAD_CALLING_ORDER, CONST_CS | CONST_PERSISTENT); +	REGISTER_LONG_CONSTANT("CURL_LAST", C_LAST, CONST_CS | CONST_PERSISTENT); +  	return SUCCESS;  } @@ -134,40 +183,40 @@ PHP_FUNCTION (curl_version)  /* {{{ proto int curl_init ([string url])     Initialize a CURL session */ -PHP_FUNCTION (curl_init) +PHP_FUNCTION(curl_init)  {  	zval **uUrl;  	CURL *cp; -	int numArgs = ZEND_NUM_ARGS(); +	int argcount = ZEND_NUM_ARGS();  	CURLLS_FETCH(); -	if (numArgs < 0 || numArgs > 1 || -	    zend_get_parameters_ex (numArgs, &uUrl) == FAILURE) { +	if (argcount < 0 || argcount > 1 || +	    zend_get_parameters_ex(argcount, &uUrl) == FAILURE) {  		WRONG_PARAM_COUNT;  	} -	cp = curl_easy_init (); +	cp = curl_easy_init();  	if (!cp) { -		php_error (E_ERROR, "Cannot initialize CURL Handle"); +		php_error(E_ERROR, "Cannot initialize CURL Handle");  		RETURN_FALSE;  	} -	if (numArgs > 0) { -		convert_to_string_ex (uUrl); -		curl_easy_setopt (cp, CURLOPT_URL, Z_STRVAL_PP (uUrl)); +	if (argcount > 0) { +		convert_to_string_ex(uUrl); +		curl_easy_setopt(cp, CURLOPT_URL, Z_STRVAL_PP(uUrl));  	}  	curl_easy_setopt(cp, CURLOPT_NOPROGRESS, 1);  	curl_easy_setopt(cp, CURLOPT_VERBOSE,    0); -	ZEND_REGISTER_RESOURCE (return_value, cp, CURLG(le_curl)); +	ZEND_REGISTER_RESOURCE(return_value, cp, CURLG(le_curl));  }  /* }}} */  /* {{{ proto bool curl_setopt (int ch, string option, mixed value)     Set an option for a CURL transfer */ -PHP_FUNCTION (curl_setopt) +PHP_FUNCTION(curl_setopt)  {  	zval **uCurlId, **uCurlOption, **uCurlValue;  	CURL *cp; @@ -176,14 +225,14 @@ PHP_FUNCTION (curl_setopt)  	CURLLS_FETCH();  	if (ZEND_NUM_ARGS() != 3 || -	    zend_get_parameters_ex (3, &uCurlId, &uCurlOption, &uCurlValue) == FAILURE) { +	    zend_get_parameters_ex(3, &uCurlId, &uCurlOption, &uCurlValue) == FAILURE) {  		WRONG_PARAM_COUNT;  	} -	ZEND_FETCH_RESOURCE (cp, CURL *, uCurlId, -1, "CURL Handle", CURLG(le_curl)); +	ZEND_FETCH_RESOURCE(cp, CURL *, uCurlId, -1, "CURL Handle", CURLG(le_curl)); -	convert_to_long_ex (uCurlOption); -	option = Z_LVAL_PP (uCurlOption); +	convert_to_long_ex(uCurlOption); +	option = Z_LVAL_PP(uCurlOption);  	if (option == CURLOPT_INFILESIZE      || option == CURLOPT_VERBOSE         ||  	    option == CURLOPT_HEADER          || option == CURLOPT_NOPROGRESS      || @@ -197,8 +246,8 @@ PHP_FUNCTION (curl_setopt)  	    option == CURLOPT_SSLVERSION      || option == CURLOPT_TIMECONDITION   ||  	    option == CURLOPT_TIMEVALUE       || option == CURLOPT_TRANSFERTEXT) { -		convert_to_long_ex (uCurlValue); -		ret = curl_easy_setopt (cp, option, Z_LVAL_PP (uCurlValue)); +		convert_to_long_ex(uCurlValue); +		ret = curl_easy_setopt(cp, option, Z_LVAL_PP(uCurlValue));  	} else if (option == CURLOPT_URL           || option == CURLOPT_PROXY        ||  	           option == CURLOPT_USERPWD       || option == CURLOPT_PROXYUSERPWD || @@ -208,22 +257,18 @@ PHP_FUNCTION (curl_setopt)  	           option == CURLOPT_SSLCERTPASSWD || option == CURLOPT_COOKIEFILE   ||  	           option == CURLOPT_CUSTOMREQUEST) { -		convert_to_string_ex (uCurlValue); -		ret = curl_easy_setopt (cp, option, Z_STRVAL_PP (uCurlValue)); +		convert_to_string_ex(uCurlValue); +		ret = curl_easy_setopt(cp, option, Z_STRVAL_PP(uCurlValue));  	} else if (option == CURLOPT_FILE        || option == CURLOPT_INFILE ||  	           option == CURLOPT_WRITEHEADER || option == CURLOPT_STDERR) {  		FILE *fp; -		ZEND_FETCH_RESOURCE (fp, FILE *, uCurlValue, -1, "File-handle", php_file_le_fopen ()); -		ret = curl_easy_setopt (cp, option, fp); +		ZEND_FETCH_RESOURCE(fp, FILE *, uCurlValue, -1, "File-handle", php_file_le_fopen()); +		ret = curl_easy_setopt(cp, option, fp);  	} -	if (ret == CURLE_OK) { -		RETURN_TRUE; -	} else { -		RETURN_FALSE; -	} +	RETURN_LONG(php_curl_error_translator(ret));  }  /* }}} */ @@ -241,14 +286,10 @@ PHP_FUNCTION (curl_exec)  		WRONG_PARAM_COUNT;  	} -	ZEND_FETCH_RESOURCE (cp, CURL *, uCurlId, -1, "CURL Handle", CURLG(le_curl)); +	ZEND_FETCH_RESOURCE(cp, CURL *, uCurlId, -1, "CURL Handle", CURLG(le_curl));  	ret = curl_easy_perform (cp); - -	if (ret == CURLE_OK) { -		RETURN_TRUE; -	} else { -		RETURN_FALSE; -	} +	 +	RETURN_LONG(php_curl_error_translator(ret));  }  /* }}} */ @@ -265,9 +306,109 @@ PHP_FUNCTION (curl_close)  		WRONG_PARAM_COUNT;  	} -	ZEND_FETCH_RESOURCE (cp, CURL *, uCurlId, -1, "CURL Handle", CURLG(le_curl)); -	zend_list_delete (Z_LVAL_PP (uCurlId)); +	ZEND_FETCH_RESOURCE(cp, CURL *, uCurlId, -1, "CURL Handle", CURLG(le_curl)); +	zend_list_delete(Z_LVAL_PP (uCurlId));  }  /* }}} */ + +static int php_curl_error_translator(CURLcode err) +{ +	switch (err) +	{ +		case CURLE_OK: +			return(CE_OK); +		case CURLE_UNSUPPORTED_PROTOCOL: +			return(CE_UNSUPPORTED_PROTOCOL); +		case CURLE_FAILED_INIT: +			return(CE_FAILED_INIT); +		case CURLE_URL_MALFORMAT: +			return(CE_URL_MALFORMAT); +		case CURLE_URL_MALFORMAT_USER: +			return(CE_URL_MALFORMAT_USER); +		case CURLE_COULDNT_RESOLVE_PROXY: +			return(CE_COULDNT_RESOLVE_PROXY); +		case CURLE_COULDNT_RESOLVE_HOST: +			return(CE_COULDNT_RESOLVE_HOST); +		case CURLE_COULDNT_CONNECT: +			return(CE_COULDNT_CONNECT); +		case CURLE_FTP_WEIRD_SERVER_REPLY: +			return(CE_FTP_WEIRD_SERVER_REPLY); +		case CURLE_FTP_ACCESS_DENIED: +			return(CE_FTP_ACCESS_DENIED); +		case CURLE_FTP_USER_PASSWORD_INCORRECT: +			return(CE_FTP_USER_PASSWORD_INCORRECT); +		case CURLE_FTP_WEIRD_PASS_REPLY: +			return(CE_FTP_WEIRD_PASS_REPLY); +		case CURLE_FTP_WEIRD_USER_REPLY: +			return(CE_FTP_WEIRD_USER_REPLY); +		case CURLE_FTP_WEIRD_PASV_REPLY: +			return(CE_FTP_WEIRD_PASV_REPLY); +		case CURLE_FTP_WEIRD_227_FORMAT: +			return(CE_FTP_WEIRD_227_FORMAT); +		case CURLE_FTP_CANT_GET_HOST: +			return(CE_FTP_CANT_GET_HOST); +		case CURLE_FTP_CANT_RECONNECT: +			return(CE_FTP_CANT_RECONNECT); +		case CURLE_FTP_COULDNT_SET_BINARY: +			return(CE_FTP_COULDNT_SET_BINARY); +		case CURLE_PARTIAL_FILE: +			return(CE_PARTIAL_FILE); +		case CURLE_FTP_COULDNT_RETR_FILE: +			return(CE_FTP_COULDNT_RETR_FILE); +		case CURLE_FTP_WRITE_ERROR: +			return(CE_FTP_WRITE_ERROR); +		case CURLE_FTP_QUOTE_ERROR: +			return(CE_FTP_QUOTE_ERROR); +		case CURLE_HTTP_NOT_FOUND: +			return(CE_HTTP_NOT_FOUND); +		case CURLE_WRITE_ERROR: +			return(CE_WRITE_ERROR); +		case CURLE_MALFORMAT_USER: +			return(CE_MALFORMAT_USER); +		case CURLE_FTP_COULDNT_STOR_FILE: +			return(CE_FTP_COULDNT_STOR_FILE); +		case CURLE_READ_ERROR: +			return(CE_READ_ERROR); +		case CURLE_OUT_OF_MEMORY: +			return(CE_OUT_OF_MEMORY); +		case CURLE_OPERATION_TIMEOUTED: +			return(CE_OPERATION_TIMEOUTED); +		case CURLE_FTP_COULDNT_SET_ASCII: +			return(CE_FTP_COULDNT_SET_ASCII); +		case CURLE_FTP_PORT_FAILED: +			return(CE_FTP_PORT_FAILED); +		case CURLE_FTP_COULDNT_USE_REST: +			return(CE_FTP_COULDNT_USE_REST); +		case CURLE_FTP_COULDNT_GET_SIZE: +			return(CE_FTP_COULDNT_GET_SIZE); +		case CURLE_HTTP_RANGE_ERROR: +			return(CE_HTTP_RANGE_ERROR); +		case CURLE_HTTP_POST_ERROR: +			return(CE_HTTP_POST_ERROR); +		case CURLE_SSL_CONNECT_ERROR: +			return(CE_SSL_CONNECT_ERROR); +		case CURLE_FTP_BAD_DOWNLOAD_RESUME: +			return(CE_FTP_BAD_DOWNLOAD_RESUME); +		case CURLE_FILE_COULDNT_READ_FILE: +			return(CE_FILE_COULDNT_READ_FILE); +		case CURLE_LDAP_CANNOT_BIND: +			return(CE_LDAP_CANNOT_BIND); +		case CURLE_LDAP_SEARCH_FAILED: +			return(CE_LDAP_SEARCH_FAILED); +		case CURLE_LIBRARY_NOT_FOUND: +			return(CE_LIBRARY_NOT_FOUND); +		case CURLE_FUNCTION_NOT_FOUND: +			return(CE_FUNCTION_NOT_FOUND); +		case CURLE_ABORTED_BY_CALLBACK: +			return(CE_ABORTED_BY_CALLBACK); +		case CURLE_BAD_FUNCTION_ARGUMENT: +			return(CE_BAD_FUNCTION_ARGUMENT); +		case CURLE_BAD_CALLING_ORDER: +			return(CE_BAD_CALLING_ORDER); +		case CURL_LAST: +			return(C_LAST); +	} +} +  #endif diff --git a/ext/curl/php_curl.h b/ext/curl/php_curl.h index 0f82b27bc5..10248f9cb3 100644 --- a/ext/curl/php_curl.h +++ b/ext/curl/php_curl.h @@ -31,14 +31,60 @@  extern zend_module_entry curl_module_entry;  #define curl_module_ptr &curl_module_entry -PHP_MINIT_FUNCTION (curl); -PHP_MINFO_FUNCTION (curl); -PHP_FUNCTION (curl_version); -PHP_FUNCTION (curl_init); -PHP_FUNCTION (curl_setopt); -PHP_FUNCTION (curl_exec); -PHP_FUNCTION (curl_close); +PHP_MINIT_FUNCTION(curl); +PHP_MINFO_FUNCTION(curl); +PHP_FUNCTION(curl_version); +PHP_FUNCTION(curl_init); +PHP_FUNCTION(curl_setopt); +PHP_FUNCTION(curl_exec); +PHP_FUNCTION(curl_close); +#define CE_OK 0 +#define CE_UNSUPPORTED_PROTOCOL 1 +#define CE_FAILED_INIT 2 +#define CE_URL_MALFORMAT 3 +#define CE_URL_MALFORMAT_USER 4 +#define CE_COULDNT_RESOLVE_PROXY 5 +#define CE_COULDNT_RESOLVE_HOST 6 +#define CE_COULDNT_CONNECT 7 +#define CE_FTP_WEIRD_SERVER_REPLY 8 +#define CE_FTP_ACCESS_DENIED 9 +#define CE_FTP_USER_PASSWORD_INCORRECT 10 +#define CE_FTP_WEIRD_PASS_REPLY 11 +#define CE_FTP_WEIRD_USER_REPLY 12 +#define CE_FTP_WEIRD_PASV_REPLY 13 +#define CE_FTP_WEIRD_227_FORMAT 14 +#define CE_FTP_CANT_GET_HOST 15 +#define CE_FTP_CANT_RECONNECT 16 +#define CE_FTP_COULDNT_SET_BINARY 17 +#define CE_PARTIAL_FILE 18 +#define CE_FTP_COULDNT_RETR_FILE 19 +#define CE_FTP_WRITE_ERROR 20 +#define CE_FTP_QUOTE_ERROR 21 +#define CE_HTTP_NOT_FOUND 22 +#define CE_WRITE_ERROR 23 +#define CE_MALFORMAT_USER 24 +#define CE_FTP_COULDNT_STOR_FILE 25 +#define CE_READ_ERROR 26 +#define CE_OUT_OF_MEMORY 27 +#define CE_OPERATION_TIMEOUTED 28 +#define CE_FTP_COULDNT_SET_ASCII 29 +#define CE_FTP_PORT_FAILED 30 +#define CE_FTP_COULDNT_USE_REST 31 +#define CE_FTP_COULDNT_GET_SIZE 32 +#define CE_HTTP_RANGE_ERROR 33 +#define CE_HTTP_POST_ERROR 34 +#define CE_SSL_CONNECT_ERROR 35 +#define CE_FTP_BAD_DOWNLOAD_RESUME 36 +#define CE_FILE_COULDNT_READ_FILE 37 +#define CE_LDAP_CANNOT_BIND 38 +#define CE_LDAP_SEARCH_FAILED 39 +#define CE_LIBRARY_NOT_FOUND 40 +#define CE_FUNCTION_NOT_FOUND 41 +#define CE_ABORTED_BY_CALLBACK 42 +#define CE_BAD_FUNCTION_ARGUMENT 43 +#define CE_BAD_CALLING_ORDER 44 +#define C_LAST 45  typedef struct {  	int le_curl;  | 
