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

📄 php4isapi.c

📁 php-4.4.7学习linux时下载的源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
{	LPEXTENSION_CONTROL_BLOCK lpECB = (LPEXTENSION_CONTROL_BLOCK) SG(server_context);	DWORD read_from_buf=0;	DWORD read_from_input=0;	DWORD total_read=0;	if ((DWORD) SG(read_post_bytes) < lpECB->cbAvailable) {		read_from_buf = MIN(lpECB->cbAvailable-SG(read_post_bytes), count_bytes);		memcpy(buffer, lpECB->lpbData+SG(read_post_bytes), read_from_buf);		total_read += read_from_buf;	}	if (read_from_buf<count_bytes		&& (SG(read_post_bytes)+read_from_buf) < lpECB->cbTotalBytes) {		DWORD cbRead=0, cbSize;		read_from_input = MIN(count_bytes-read_from_buf, lpECB->cbTotalBytes-SG(read_post_bytes)-read_from_buf);		while (cbRead < read_from_input) {			cbSize = read_from_input - cbRead;			if (!lpECB->ReadClient(lpECB->ConnID, buffer+read_from_buf+cbRead, &cbSize) || cbSize==0) {				break;			}			cbRead += cbSize;		}		total_read += cbRead;	}	return total_read;}static char *sapi_isapi_read_cookies(TSRMLS_D){	LPEXTENSION_CONTROL_BLOCK lpECB = (LPEXTENSION_CONTROL_BLOCK) SG(server_context);	char variable_buf[ISAPI_SERVER_VAR_BUF_SIZE];	DWORD variable_len = ISAPI_SERVER_VAR_BUF_SIZE;	if (lpECB->GetServerVariable(lpECB->ConnID, "HTTP_COOKIE", variable_buf, &variable_len)) {		return estrndup(variable_buf, variable_len);	} else if (GetLastError()==ERROR_INSUFFICIENT_BUFFER) {		char *tmp_variable_buf = (char *) emalloc(variable_len+1);		if (lpECB->GetServerVariable(lpECB->ConnID, "HTTP_COOKIE", tmp_variable_buf, &variable_len)) {			tmp_variable_buf[variable_len] = 0;			return tmp_variable_buf;		} else {			efree(tmp_variable_buf);		}	}	return estrndup("", sizeof("")-1);}#ifdef WITH_ZEUSstatic void sapi_isapi_register_zeus_ssl_variables(LPEXTENSION_CONTROL_BLOCK lpECB, zval *track_vars_array TSRMLS_DC){	char static_variable_buf[ISAPI_SERVER_VAR_BUF_SIZE];	DWORD variable_len = ISAPI_SERVER_VAR_BUF_SIZE;	char static_cons_buf[ISAPI_SERVER_VAR_BUF_SIZE];	/*	 * We need to construct the /C=.../ST=...	 * DN's for SSL_CLIENT_DN and SSL_CLIENT_I_DN	 */	strcpy( static_cons_buf, "/C=" );	if( lpECB->GetServerVariable( lpECB->ConnID, "SSL_CLIENT_C", static_variable_buf, &variable_len ) && static_variable_buf[0] ) {		strlcat( static_cons_buf, static_variable_buf, ISAPI_SERVER_VAR_BUF_SIZE );	}	strlcat( static_cons_buf, "/ST=", ISAPI_SERVER_VAR_BUF_SIZE );	variable_len = ISAPI_SERVER_VAR_BUF_SIZE;	if( lpECB->GetServerVariable( lpECB->ConnID, "SSL_CLIENT_ST", static_variable_buf, &variable_len ) && static_variable_buf[0] ) {		strlcat( static_cons_buf, static_variable_buf, ISAPI_SERVER_VAR_BUF_SIZE );	}	php_register_variable( "SSL_CLIENT_DN", static_cons_buf, track_vars_array TSRMLS_CC );		strcpy( static_cons_buf, "/C=" );	variable_len = ISAPI_SERVER_VAR_BUF_SIZE;	if( lpECB->GetServerVariable( lpECB->ConnID, "SSL_CLIENT_I_C", static_variable_buf, &variable_len ) && static_variable_buf[0] ) {		strlcat( static_cons_buf, static_variable_buf, ISAPI_SERVER_VAR_BUF_SIZE );	}	strlcat( static_cons_buf, "/ST=", ISAPI_SERVER_VAR_BUF_SIZE );	variable_len = ISAPI_SERVER_VAR_BUF_SIZE;	if( lpECB->GetServerVariable( lpECB->ConnID, "SSL_CLIENT_I_ST", static_variable_buf, &variable_len ) && static_variable_buf[0] ) {		strlcat( static_cons_buf, static_variable_buf, ISAPI_SERVER_VAR_BUF_SIZE );	}	php_register_variable( "SSL_CLIENT_I_DN", static_cons_buf, track_vars_array TSRMLS_CC );	}static void sapi_isapi_register_zeus_variables(LPEXTENSION_CONTROL_BLOCK lpECB, zval *track_vars_array TSRMLS_DC){	char static_variable_buf[ISAPI_SERVER_VAR_BUF_SIZE];	DWORD variable_len = ISAPI_SERVER_VAR_BUF_SIZE;	DWORD scriptname_len = ISAPI_SERVER_VAR_BUF_SIZE;	DWORD pathinfo_len = 0;	char *strtok_buf = NULL;	/* Get SCRIPT_NAME, we use this to work out which bit of the URL	 * belongs in PHP's version of PATH_INFO	 */	lpECB->GetServerVariable(lpECB->ConnID, "SCRIPT_NAME", static_variable_buf, &scriptname_len);	/* Adjust Zeus' version of PATH_INFO, set PHP_SELF,	 * and generate REQUEST_URI	 */	if ( lpECB->GetServerVariable(lpECB->ConnID, "PATH_INFO", static_variable_buf, &variable_len) && static_variable_buf[0] ) {		/* PHP_SELF is just PATH_INFO */		php_register_variable( "PHP_SELF", static_variable_buf, track_vars_array TSRMLS_CC );		/* Chop off filename to get just the 'real' PATH_INFO' */		pathinfo_len = variable_len - scriptname_len;		php_register_variable( "PATH_INFO", static_variable_buf + scriptname_len - 1, track_vars_array TSRMLS_CC );		/* append query string to give url... extra byte for '?' */		if ( strlen(lpECB->lpszQueryString) + variable_len + 1 < ISAPI_SERVER_VAR_BUF_SIZE ) {			/* append query string only if it is present... */			if ( strlen(lpECB->lpszQueryString) ) {				static_variable_buf[ variable_len - 1 ] = '?';				strcpy( static_variable_buf + variable_len, lpECB->lpszQueryString );			}			php_register_variable( "URL", static_variable_buf, track_vars_array TSRMLS_CC );			php_register_variable( "REQUEST_URI", static_variable_buf, track_vars_array TSRMLS_CC );		}	}	/* Get and adjust PATH_TRANSLATED to what PHP wants */	variable_len = ISAPI_SERVER_VAR_BUF_SIZE;	if ( lpECB->GetServerVariable(lpECB->ConnID, "PATH_TRANSLATED", static_variable_buf, &variable_len) && static_variable_buf[0] ) {		static_variable_buf[ variable_len - pathinfo_len - 1 ] = '\0';		php_register_variable( "PATH_TRANSLATED", static_variable_buf, track_vars_array TSRMLS_CC );	}	/* Bring in the AUTHENTICATION stuff as needed */	variable_len = ISAPI_SERVER_VAR_BUF_SIZE;	if ( lpECB->GetServerVariable(lpECB->ConnID, "AUTH_USER", static_variable_buf, &variable_len) && static_variable_buf[0] )  {		php_register_variable( "PHP_AUTH_USER", static_variable_buf, track_vars_array TSRMLS_CC );	}	variable_len = ISAPI_SERVER_VAR_BUF_SIZE;	if ( lpECB->GetServerVariable(lpECB->ConnID, "AUTH_PASSWORD", static_variable_buf, &variable_len) && static_variable_buf[0] )  {		php_register_variable( "PHP_AUTH_PW", static_variable_buf, track_vars_array TSRMLS_CC );	}	variable_len = ISAPI_SERVER_VAR_BUF_SIZE;	if ( lpECB->GetServerVariable(lpECB->ConnID, "AUTH_TYPE", static_variable_buf, &variable_len) && static_variable_buf[0] )  {		php_register_variable( "AUTH_TYPE", static_variable_buf, track_vars_array TSRMLS_CC );	}		/* And now, for the SSL variables (if applicable) */	variable_len = ISAPI_SERVER_VAR_BUF_SIZE;	if ( lpECB->GetServerVariable(lpECB->ConnID, "CERT_COOKIE", static_variable_buf, &variable_len) && static_variable_buf[0] ) {		sapi_isapi_register_zeus_ssl_variables( lpECB, track_vars_array TSRMLS_CC );	}	/* Copy some of the variables we need to meet Apache specs */	variable_len = ISAPI_SERVER_VAR_BUF_SIZE;	if ( lpECB->GetServerVariable(lpECB->ConnID, "SERVER_SOFTWARE", static_variable_buf, &variable_len) && static_variable_buf[0] )  {		php_register_variable( "SERVER_SIGNATURE", static_variable_buf, track_vars_array TSRMLS_CC );	}}#elsestatic void sapi_isapi_register_iis_variables(LPEXTENSION_CONTROL_BLOCK lpECB, zval *track_vars_array TSRMLS_DC){	char static_variable_buf[ISAPI_SERVER_VAR_BUF_SIZE];	char path_info_buf[ISAPI_SERVER_VAR_BUF_SIZE];	DWORD variable_len = ISAPI_SERVER_VAR_BUF_SIZE;	DWORD scriptname_len = ISAPI_SERVER_VAR_BUF_SIZE;	DWORD pathinfo_len = 0;	HSE_URL_MAPEX_INFO humi;	/* Get SCRIPT_NAME, we use this to work out which bit of the URL	 * belongs in PHP's version of PATH_INFO.  SCRIPT_NAME also becomes PHP_SELF.	 */	lpECB->GetServerVariable(lpECB->ConnID, "SCRIPT_NAME", static_variable_buf, &scriptname_len);	php_register_variable("SCRIPT_FILENAME", SG(request_info).path_translated, track_vars_array TSRMLS_CC);	/* Adjust IIS' version of PATH_INFO, set PHP_SELF,	 * and generate REQUEST_URI	 * Get and adjust PATH_TRANSLATED to what PHP wants	 */	if ( lpECB->GetServerVariable(lpECB->ConnID, "PATH_INFO", static_variable_buf, &variable_len) && static_variable_buf[0] ) {		/* Chop off filename to get just the 'real' PATH_INFO' */		php_register_variable( "ORIG_PATH_INFO", static_variable_buf, track_vars_array TSRMLS_CC );		pathinfo_len = variable_len - scriptname_len;		strncpy(path_info_buf, static_variable_buf + scriptname_len - 1, sizeof(path_info_buf)-1);		php_register_variable( "PATH_INFO", path_info_buf, track_vars_array TSRMLS_CC );		/* append query string to give url... extra byte for '?' */		if ( strlen(lpECB->lpszQueryString) + variable_len + 1 < ISAPI_SERVER_VAR_BUF_SIZE ) {			/* append query string only if it is present... */			if ( strlen(lpECB->lpszQueryString) ) {				static_variable_buf[ variable_len - 1 ] = '?';				strcpy( static_variable_buf + variable_len, lpECB->lpszQueryString );			}			php_register_variable( "URL", static_variable_buf, track_vars_array TSRMLS_CC );			php_register_variable( "REQUEST_URI", static_variable_buf, track_vars_array TSRMLS_CC );		}		variable_len = ISAPI_SERVER_VAR_BUF_SIZE;		if ( lpECB->GetServerVariable(lpECB->ConnID, "PATH_TRANSLATED", static_variable_buf, &variable_len) && static_variable_buf[0] ) {			php_register_variable( "ORIG_PATH_TRANSLATED", static_variable_buf, track_vars_array TSRMLS_CC );		}		if (lpECB->ServerSupportFunction(lpECB->ConnID, HSE_REQ_MAP_URL_TO_PATH_EX, path_info_buf, &pathinfo_len, (LPDWORD) &humi)) {			/* Remove trailing \  */			if (humi.lpszPath[variable_len-2] == '\\') {				humi.lpszPath[variable_len-2] = 0;			}			php_register_variable("PATH_TRANSLATED", humi.lpszPath, track_vars_array TSRMLS_CC);		}	}	static_variable_buf[0] = '/';	static_variable_buf[1] = 0;	variable_len = 2;	if (lpECB->ServerSupportFunction(lpECB->ConnID, HSE_REQ_MAP_URL_TO_PATH_EX, static_variable_buf, &variable_len, (LPDWORD) &humi)) {		/* Remove trailing \  */		if (humi.lpszPath[variable_len-2] == '\\') {			humi.lpszPath[variable_len-2] = 0;		}		php_register_variable("DOCUMENT_ROOT", humi.lpszPath, track_vars_array TSRMLS_CC);	}	if (!SG(request_info).auth_user || !SG(request_info).auth_password || 		!SG(request_info).auth_user[0] || !SG(request_info).auth_password[0]) {		variable_len = ISAPI_SERVER_VAR_BUF_SIZE;		if (lpECB->GetServerVariable(lpECB->ConnID, "HTTP_AUTHORIZATION", static_variable_buf, &variable_len)			&& static_variable_buf[0]) {			php_handle_auth_data(static_variable_buf TSRMLS_CC);		}	}	if (SG(request_info).auth_user)  {		php_register_variable("PHP_AUTH_USER", SG(request_info).auth_user, track_vars_array TSRMLS_CC );	}	if (SG(request_info).auth_password) {		php_register_variable("PHP_AUTH_PW", SG(request_info).auth_password, track_vars_array TSRMLS_CC );	}}#endifstatic void sapi_isapi_register_server_variables2(char **server_variables, LPEXTENSION_CONTROL_BLOCK lpECB, zval *track_vars_array, char **recorded_values TSRMLS_DC){	char **p=server_variables;	DWORD variable_len;	char static_variable_buf[ISAPI_SERVER_VAR_BUF_SIZE];	char *variable_buf;	while (*p) {		variable_len = ISAPI_SERVER_VAR_BUF_SIZE;		if (lpECB->GetServerVariable(lpECB->ConnID, *p, static_variable_buf, &variable_len)			&& static_variable_buf[0]) {			php_register_variable(*p, static_variable_buf, track_vars_array TSRMLS_CC);			if (recorded_values) {				recorded_values[p-server_variables] = estrndup(static_variable_buf, variable_len);			}		} else if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {			variable_buf = (char *) emalloc(variable_len+1);			if (lpECB->GetServerVariable(lpECB->ConnID, *p, variable_buf, &variable_len)				&& variable_buf[0]) {				php_register_variable(*p, variable_buf, track_vars_array TSRMLS_CC);			}			if (recorded_values) {				recorded_values[p-server_variables] = variable_buf;			} else {				efree(variable_buf);			}		} else { /* for compatibility with Apache SAPIs */			php_register_variable(*p, "", track_vars_array TSRMLS_CC);		}		p++;	}}static void sapi_isapi_register_server_variables(zval *track_vars_array TSRMLS_DC){	DWORD variable_len = ISAPI_SERVER_VAR_BUF_SIZE;	char *variable;	char *strtok_buf = NULL;	char *isapi_special_server_variables[NUM_SPECIAL_VARS];	LPEXTENSION_CONTROL_BLOCK lpECB;	lpECB = (LPEXTENSION_CONTROL_BLOCK) SG(server_context);	/* Register the special ISAPI variables */	memset(isapi_special_server_variables, 0, sizeof(isapi_special_server_variables));	sapi_isapi_register_server_variables2(isapi_special_server_variable_names, lpECB, track_vars_array, isapi_special_server_variables TSRMLS_CC);	if (SG(request_info).cookie_data) {		php_register_variable("HTTP_COOKIE", SG(request_info).cookie_data, track_vars_array TSRMLS_CC);	}	/* Register the standard ISAPI variables */	sapi_isapi_register_server_variables2(isapi_server_variable_names, lpECB, track_vars_array, NULL TSRMLS_CC);	if (isapi_special_server_variables[SPECIAL_VAR_HTTPS]		&& (atoi(isapi_special_server_variables[SPECIAL_VAR_HTTPS])		|| !strcasecmp(isapi_special_server_variables[SPECIAL_VAR_HTTPS], "on"))	) {		/* Register SSL ISAPI variables */		sapi_isapi_register_server_variables2(isapi_secure_server_variable_names, lpECB, track_vars_array, NULL TSRMLS_CC);	}	if (isapi_special_server_variables[SPECIAL_VAR_HTTPS]) {		efree(isapi_special_server_variables[SPECIAL_VAR_HTTPS]);	}#ifdef WITH_ZEUS	sapi_isapi_register_zeus_variables(lpECB, track_vars_array TSRMLS_CC);#else	sapi_isapi_register_iis_variables(lpECB, track_vars_array TSRMLS_CC);#endif	/* PHP_SELF support */	if (isapi_special_server_variables[SPECIAL_VAR_PHP_SELF]) {		php_register_variable("PHP_SELF", isapi_special_server_variables[SPECIAL_VAR_PHP_SELF], track_vars_array TSRMLS_CC);		efree(isapi_special_server_variables[SPECIAL_VAR_PHP_SELF]);	}	if (isapi_special_server_variables[SPECIAL_VAR_ALL_HTTP]) {		/* Register the internal bits of ALL_HTTP */		variable = php_strtok_r(isapi_special_server_variables[SPECIAL_VAR_ALL_HTTP], "\r\n", &strtok_buf);		while (variable) {			char *colon = strchr(variable, ':');			if (colon) {				char *value = colon+1;				while (*value==' ') {

⌨️ 快捷键说明

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