⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 curl.c

📁 php-4.4.7学习linux时下载的源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
	REGISTER_CURL_CONSTANT(CURLE_FTP_CANT_RECONNECT);	REGISTER_CURL_CONSTANT(CURLE_FTP_COULDNT_SET_BINARY);	REGISTER_CURL_CONSTANT(CURLE_PARTIAL_FILE);	REGISTER_CURL_CONSTANT(CURLE_FTP_COULDNT_RETR_FILE);	REGISTER_CURL_CONSTANT(CURLE_FTP_WRITE_ERROR);	REGISTER_CURL_CONSTANT(CURLE_FTP_QUOTE_ERROR);	REGISTER_CURL_CONSTANT(CURLE_HTTP_NOT_FOUND);	REGISTER_CURL_CONSTANT(CURLE_WRITE_ERROR);	REGISTER_CURL_CONSTANT(CURLE_MALFORMAT_USER);	REGISTER_CURL_CONSTANT(CURLE_FTP_COULDNT_STOR_FILE);	REGISTER_CURL_CONSTANT(CURLE_READ_ERROR);	REGISTER_CURL_CONSTANT(CURLE_OUT_OF_MEMORY);	REGISTER_CURL_CONSTANT(CURLE_OPERATION_TIMEOUTED);	REGISTER_CURL_CONSTANT(CURLE_FTP_COULDNT_SET_ASCII);	REGISTER_CURL_CONSTANT(CURLE_FTP_PORT_FAILED);	REGISTER_CURL_CONSTANT(CURLE_FTP_COULDNT_USE_REST);	REGISTER_CURL_CONSTANT(CURLE_FTP_COULDNT_GET_SIZE);	REGISTER_CURL_CONSTANT(CURLE_HTTP_RANGE_ERROR);	REGISTER_CURL_CONSTANT(CURLE_HTTP_POST_ERROR);	REGISTER_CURL_CONSTANT(CURLE_SSL_CONNECT_ERROR);	REGISTER_CURL_CONSTANT(CURLE_FTP_BAD_DOWNLOAD_RESUME);	REGISTER_CURL_CONSTANT(CURLE_FILE_COULDNT_READ_FILE);	REGISTER_CURL_CONSTANT(CURLE_LDAP_CANNOT_BIND);	REGISTER_CURL_CONSTANT(CURLE_LDAP_SEARCH_FAILED);	REGISTER_CURL_CONSTANT(CURLE_LIBRARY_NOT_FOUND);	REGISTER_CURL_CONSTANT(CURLE_FUNCTION_NOT_FOUND);	REGISTER_CURL_CONSTANT(CURLE_ABORTED_BY_CALLBACK);	REGISTER_CURL_CONSTANT(CURLE_BAD_FUNCTION_ARGUMENT);	REGISTER_CURL_CONSTANT(CURLE_BAD_CALLING_ORDER);	REGISTER_CURL_CONSTANT(CURLE_HTTP_PORT_FAILED);	REGISTER_CURL_CONSTANT(CURLE_BAD_PASSWORD_ENTERED);	REGISTER_CURL_CONSTANT(CURLE_TOO_MANY_REDIRECTS);	REGISTER_CURL_CONSTANT(CURLE_UNKNOWN_TELNET_OPTION);	REGISTER_CURL_CONSTANT(CURLE_TELNET_OPTION_SYNTAX);	REGISTER_CURL_CONSTANT(CURLE_OBSOLETE);	REGISTER_CURL_CONSTANT(CURLE_SSL_PEER_CERTIFICATE);	REGISTER_CURL_CONSTANT(CURLE_GOT_NOTHING);	REGISTER_CURL_CONSTANT(CURLE_SSL_ENGINE_NOTFOUND);	REGISTER_CURL_CONSTANT(CURLE_SSL_ENGINE_SETFAILED);	REGISTER_CURL_CONSTANT(CURLE_SEND_ERROR);	REGISTER_CURL_CONSTANT(CURLE_RECV_ERROR);#ifdef CURLE_SHARE_IN_USE	REGISTER_CURL_CONSTANT(CURLE_SHARE_IN_USE);#endif#ifdef CURLE_SSL_CERTPROBLEM	REGISTER_CURL_CONSTANT(CURLE_SSL_CERTPROBLEM);#endif#ifdef CURLE_SSL_CIPHER	REGISTER_CURL_CONSTANT(CURLE_SSL_CIPHER);#endif#ifdef CURLE_SSL_CACERT		REGISTER_CURL_CONSTANT(CURLE_SSL_CACERT);#endif#ifdef CURLE_BAD_CONTENT_ENCODING	REGISTER_CURL_CONSTANT(CURLE_BAD_CONTENT_ENCODING);#endif	#ifdef CURLE_LDAP_INVALID_URL	REGISTER_CURL_CONSTANT(CURLE_LDAP_INVALID_URL);#endif	#ifdef CURLE_FILESIZE_EXCEEDED	REGISTER_CURL_CONSTANT(CURLE_FILESIZE_EXCEEDED);#endif#ifdef CURLE_FTP_SSL_FAILED	REGISTER_CURL_CONSTANT(CURLE_FTP_SSL_FAILED);#endif	REGISTER_CURL_CONSTANT(CURL_NETRC_OPTIONAL);	REGISTER_CURL_CONSTANT(CURL_NETRC_IGNORED);	REGISTER_CURL_CONSTANT(CURL_NETRC_REQUIRED);	REGISTER_CURL_CONSTANT(CURL_HTTP_VERSION_NONE);	REGISTER_CURL_CONSTANT(CURL_HTTP_VERSION_1_0);	REGISTER_CURL_CONSTANT(CURL_HTTP_VERSION_1_1);	#ifdef PHP_CURL_NEED_OPENSSL_TSL	{		int i, c = CRYPTO_num_locks();					php_curl_openssl_tsl = malloc(c * sizeof(MUTEX_T));					for (i = 0; i < c; ++i) {			php_curl_openssl_tsl[i] = tsrm_mutex_alloc();		}					CRYPTO_set_id_callback(php_curl_ssl_id);		CRYPTO_set_locking_callback(php_curl_ssl_lock);	}#endif#ifdef PHP_CURL_NEED_GNUTLS_TSL	gcry_control(GCRYCTL_SET_THREAD_CBS, &php_curl_gnutls_tsl);#endif		if (curl_global_init(CURL_GLOBAL_SSL) != CURLE_OK) {		return FAILURE;	}#ifdef PHP_CURL_URL_WRAPPERS	php_register_url_stream_wrapper("http", &php_curl_wrapper TSRMLS_CC);	php_register_url_stream_wrapper("https", &php_curl_wrapper TSRMLS_CC);	php_register_url_stream_wrapper("ftp", &php_curl_wrapper TSRMLS_CC);	php_register_url_stream_wrapper("ldap", &php_curl_wrapper TSRMLS_CC);#endif		return SUCCESS;}/* }}} *//* {{{ PHP_MSHUTDOWN_FUNCTION */PHP_MSHUTDOWN_FUNCTION(curl){#ifdef PHP_CURL_URL_WRAPPERS	php_unregister_url_stream_wrapper("http" TSRMLS_CC);	php_unregister_url_stream_wrapper("https" TSRMLS_CC);	php_unregister_url_stream_wrapper("ftp" TSRMLS_CC);	php_unregister_url_stream_wrapper("ldap" TSRMLS_CC);#endif#ifdef PHP_CURL_NEED_OPENSSL_TSL	/* ensure there are valid callbacks set */	CRYPTO_set_id_callback(php_curl_ssl_id);	CRYPTO_set_locking_callback(php_curl_ssl_lock);#endif	curl_global_cleanup();#ifdef PHP_CURL_NEED_OPENSSL_TSL	if (php_curl_openssl_tsl) {		int i, c = CRYPTO_num_locks();					CRYPTO_set_id_callback(NULL);		CRYPTO_set_locking_callback(NULL);					for (i = 0; i < c; ++i) {			tsrm_mutex_free(php_curl_openssl_tsl[i]);		}					free(php_curl_openssl_tsl);		php_curl_openssl_tsl = NULL;	}#endif	return SUCCESS;}/* }}} */#define PHP_CURL_STDOUT 0#define PHP_CURL_FILE   1#define PHP_CURL_USER   2#define PHP_CURL_DIRECT 3#define PHP_CURL_RETURN 4#define PHP_CURL_ASCII  5#define PHP_CURL_BINARY 6#define PHP_CURL_IGNORE 7/* {{{ curl_write */static size_t curl_write(char *data, size_t size, size_t nmemb, void *ctx){	php_curl       *ch     = (php_curl *) ctx;	php_curl_write *t      = ch->handlers->write;	size_t          length = size * nmemb;	TSRMLS_FETCH();	switch (t->method) {	case PHP_CURL_STDOUT:		PHPWRITE(data, length);		break;	case PHP_CURL_FILE:		return fwrite(data, size, nmemb, t->fp);	case PHP_CURL_RETURN:		if (length > 0) {			smart_str_appendl(&t->buf, data, (int) length);		}		break;	case PHP_CURL_USER: {		zval *argv[2];		zval *retval;		int   error;		MAKE_STD_ZVAL(argv[0]);		MAKE_STD_ZVAL(argv[1]);		MAKE_STD_ZVAL(retval);		ZVAL_RESOURCE(argv[0], ch->id);		zend_list_addref(ch->id);		ZVAL_STRINGL(argv[1], data, length, 1);		ch->in_callback = 1;		error = call_user_function(EG(function_table),		                           NULL,		                           t->func,		                           retval, 2, argv TSRMLS_CC);		ch->in_callback = 0;		if (error == FAILURE) {			php_error(E_WARNING, "%s(): Couldn't call the CURLOPT_WRITEFUNCTION", 					  get_active_function_name(TSRMLS_C));			length = -1;		}		else {			if (Z_TYPE_P(retval) != IS_LONG) {				convert_to_long_ex(&retval);			}			length = Z_LVAL_P(retval);		}		zval_ptr_dtor(&argv[0]);		zval_ptr_dtor(&argv[1]);		zval_ptr_dtor(&retval);		break;	}	}	return length;}/* }}} *//* {{{ curl_read */static size_t curl_read(char *data, size_t size, size_t nmemb, void *ctx){	php_curl       *ch = (php_curl *) ctx;	php_curl_read  *t  = ch->handlers->read;	int             length = -1;	switch (t->method) {	case PHP_CURL_DIRECT:		if (t->fp) {			length = fread(data, size, nmemb, t->fp);		}		break;	case PHP_CURL_USER: {		zval *argv[3];		zval *retval;		int   error;		TSRMLS_FETCH();		MAKE_STD_ZVAL(argv[0]);		MAKE_STD_ZVAL(argv[1]);		MAKE_STD_ZVAL(argv[2]);		MAKE_STD_ZVAL(retval);		ZVAL_RESOURCE(argv[0], ch->id);		zend_list_addref(ch->id);		ZVAL_RESOURCE(argv[1], t->fd);		zend_list_addref(t->fd);		ZVAL_LONG(argv[2], (int) size * nmemb);		ch->in_callback = 1;		error = call_user_function(EG(function_table),		                           NULL,		                           t->func,		                           retval, 3, argv TSRMLS_CC);		ch->in_callback = 0;		if (error == FAILURE) {			php_error(E_WARNING, "%s(): Cannot call the CURLOPT_READFUNCTION", 					  get_active_function_name(TSRMLS_C));		} else if (Z_TYPE_P(retval) == IS_STRING) {			length = MIN(size * nmemb, Z_STRLEN_P(retval));			memcpy(data, Z_STRVAL_P(retval), length);		}		zval_ptr_dtor(&argv[0]);		zval_ptr_dtor(&argv[1]);		zval_ptr_dtor(&argv[2]);		zval_ptr_dtor(&retval);		break;	}	}	return length;}/* }}} *//* {{{ curl_write_header */static size_t curl_write_header(char *data, size_t size, size_t nmemb, void *ctx){	php_curl       *ch  = (php_curl *) ctx;	php_curl_write *t   = ch->handlers->write_header;	size_t          length = size * nmemb;	TSRMLS_FETCH();		switch (t->method) {		case PHP_CURL_STDOUT:			/* Handle special case write when we're returning the entire transfer			 */			if (ch->handlers->write->method == PHP_CURL_RETURN && length > 0) {				smart_str_appendl(&ch->handlers->write->buf, data, (int) length);			} else {				PHPWRITE(data, length);			}			break;		case PHP_CURL_FILE:			return fwrite(data, size, nmemb, t->fp);		case PHP_CURL_USER: {			zval *argv[2];			zval *retval;			int   error;			TSRMLS_FETCH();			MAKE_STD_ZVAL(argv[0]);			MAKE_STD_ZVAL(argv[1]);			MAKE_STD_ZVAL(retval);			ZVAL_RESOURCE(argv[0], ch->id);			zend_list_addref(ch->id);			ZVAL_STRINGL(argv[1], data, length, 1);			ch->in_callback = 1;			error = call_user_function(EG(function_table),									   NULL,									   t->func,									   retval, 2, argv TSRMLS_CC);			ch->in_callback = 0;			if (error == FAILURE) {				php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not call the CURLOPT_HEADERFUNCTION");				length = -1;			} else {				if (Z_TYPE_P(retval) != IS_LONG) {					convert_to_long_ex(&retval);				}				length = Z_LVAL_P(retval);				zval_ptr_dtor(&retval);			}			zval_ptr_dtor(&argv[0]);			zval_ptr_dtor(&argv[1]);			break;		}		case PHP_CURL_IGNORE:			return length;		default:			return -1;	}	return length;}/* }}} */#if CURLOPT_PASSWDFUNCTION != 0/* {{{ curl_passwd */static size_t curl_passwd(void *ctx, char *prompt, char *buf, int buflen){	php_curl    *ch   = (php_curl *) ctx;	zval        *func = ch->handlers->passwd;	zval        *argv[3];	zval        *retval = NULL;	int          error;	int          ret = -1;	TSRMLS_FETCH();	MAKE_STD_ZVAL(argv[0]);	MAKE_STD_ZVAL(argv[1]);	MAKE_STD_ZVAL(argv[2]);	ZVAL_RESOURCE(argv[0], ch->id);	zend_list_addref(ch->id);	ZVAL_STRING(argv[1], prompt, 1);	ZVAL_LONG(argv[2], buflen);	ch->in_callback = 1;	error = call_user_function(EG(function_table),	                           NULL,	                           func,	                           retval, 2, argv TSRMLS_CC);	ch->in_callback = 0;	if (error == FAILURE) {		php_error(E_WARNING, "%s(): Couldn't call the CURLOPT_PASSWDFUNCTION", get_active_function_name(TSRMLS_C));	} else if (Z_TYPE_P(retval) == IS_STRING) {		if (Z_STRLEN_P(retval) > buflen) {			php_error(E_WARNING, "%s(): Returned password is too long for libcurl to handle", 					  get_active_function_name(TSRMLS_C));		} else {			strlcpy(buf, Z_STRVAL_P(retval), Z_STRLEN_P(retval));		}	} else {		php_error_docref(NULL TSRMLS_CC, E_WARNING, "User handler '%s' did not return a string.", Z_STRVAL_P(func));	}		zval_ptr_dtor(&argv[0]);	zval_ptr_dtor(&argv[1]);	zval_ptr_dtor(&argv[2]);	zval_ptr_dtor(&retval);	return ret;}/* }}} */#endif/* {{{ curl_free_string */static void curl_free_string(void **string){	efree(*string);}	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -