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

📄 php_mnogo.c

📁 php-4.4.7学习linux时下载的源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
		UdmVarListReplaceStr(&Agent->Conf->Vars,var,val);		if (!strcasecmp(var,"LocalCharset")) {		const char * charset=UdmVarListFindStr(&Agent->Conf->Vars,"LocalCharset","iso-8859-1");		Agent->Conf->lcs=UdmGetCharSet(charset);	} else if (!strcasecmp(var,"BrowserCharset")) {		const char * charset=UdmVarListFindStr(&Agent->Conf->Vars,"BrowserCharset","iso-8859-1");		Agent->Conf->bcs=UdmGetCharSet(charset);	} else if (!strcasecmp(var,"Synonym")) {		if (UdmSynonymListLoad(Agent->Conf,val)) {			php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s",Agent->Conf->errstr);			RETURN_FALSE;		} else UdmSynonymListSort(&(Agent->Conf->Synonyms));	} else if (!strcasecmp(var,"Stopwordfile")) {		if (UdmStopListLoad(Agent->Conf,val)) {			php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", Agent->Conf->errstr);			RETURN_FALSE;		}	} else if (!strcasecmp(var,"MinWordLen")) {		Agent->Conf->WordParam.min_word_len=atoi(val);	} else if (!strcasecmp(var,"MaxWordLen")) {		Agent->Conf->WordParam.max_word_len=atoi(val);#if UDM_VERSION_ID <= 30207	} else if (!strcasecmp(var,"VarDir")) {		snprintf(Agent->Conf->vardir,sizeof(Agent->Conf->vardir)-1,"%s%s",val,UDMSLASHSTR);#endif	}	RETURN_TRUE;}/* {{{ proto string udm_get_res_field_ex(int res, int row, string field)   Fetch mnoGoSearch result field */DLEXPORT PHP_FUNCTION(udm_get_res_field_ex){	pval **yyres, **yyrow_num, **yyfield_name;	UDM_RESULT * Res;	int row;	char *field;		switch(ZEND_NUM_ARGS()){		case 3: {				if (zend_get_parameters_ex(3, &yyres,&yyrow_num,&yyfield_name)==FAILURE){					RETURN_FALSE;				}				convert_to_string_ex(yyrow_num);				convert_to_string_ex(yyfield_name);				field = Z_STRVAL_PP(yyfield_name);				row = atoi(Z_STRVAL_PP(yyrow_num));			}			break;		default:			WRONG_PARAM_COUNT;			break;	}		ZEND_FETCH_RESOURCE(Res, UDM_RESULT *, yyres, -1, "mnoGoSearch-Result", le_res);	if(row<Res->num_rows){		if (!strcasecmp(field,"URL")) {		    char	*al;		    al = (char *)MyRemoveHiLightDup((const char *)(UdmVarListFindStr(&(Res->Doc[row].Sections), field, "")));		    UdmVarListReplaceStr(&Res->Doc[row].Sections,field,al);		    free(al);		}		RETURN_STRING((char *)UdmVarListFindStr(&Res->Doc[row].Sections,field,""),1);	} else {		php_error_docref(NULL TSRMLS_CC, E_WARNING,"row number too large");		RETURN_FALSE;	}}/* }}} */#endif#if UDM_VERSION_ID >= 30211/* {{{ proto int udm_alloc_agent_array(array dbaddr)   Allocate mnoGoSearch session */DLEXPORT PHP_FUNCTION(udm_alloc_agent_array){	switch(ZEND_NUM_ARGS()){		case 1: {				pval **yydbaddr;				zval **tmp;				char *dbaddr;				UDM_ENV   * Env;				UDM_AGENT * Agent;				HashPosition   pos;								if(zend_get_parameters_ex(1,&yydbaddr)==FAILURE){					RETURN_FALSE;				}								if (Z_TYPE_PP(yydbaddr) != IS_ARRAY) {				    	php_error_docref(NULL TSRMLS_CC, E_WARNING, "Argument DBAddr must be an array.");					RETURN_FALSE;				}				convert_to_array_ex(yydbaddr);								Env=UdmEnvInit(NULL);				UdmVarListReplaceStr(&Env->Vars,"SyslogFacility","local7");#if UDM_VERSION_ID >= 30215				UdmSetLogLevel(NULL,0);#else				UdmSetLogLevel(Env,0);#endif				UdmOpenLog("mnoGoSearch-php",Env,0);								zend_hash_internal_pointer_reset_ex(HASH_OF(*yydbaddr), &pos);								while (zend_hash_get_current_data_ex(HASH_OF(*yydbaddr), (void **)&tmp, &pos) == SUCCESS) {				    convert_to_string_ex(tmp);				    dbaddr = Z_STRVAL_PP(tmp);				    UdmDBListAdd(&Env->dbl,dbaddr, UDM_OPEN_MODE_WRITE);				    				    zend_hash_move_forward_ex(HASH_OF(*yydbaddr), &pos);				}								Agent=UdmAgentInit(NULL,Env,0);				ZEND_REGISTER_RESOURCE(return_value,Agent,le_link);			}			break;					default:			WRONG_PARAM_COUNT;			break;	}}/* }}} *//* {{{ proto int udm_hash32(int agent, string str)   Return Hash32 checksum of gived string */DLEXPORT PHP_FUNCTION(udm_hash32){	pval ** yystr, ** yyagent;	char *str;	udmhash32_t hash32;	char buf[32];	UDM_AGENT * Agent;	int id=-1;	switch(ZEND_NUM_ARGS()){		case 2: {				if (zend_get_parameters_ex(2, &yyagent,&yystr)==FAILURE) {					RETURN_FALSE;				}			}			break;		default:							WRONG_PARAM_COUNT;			break;	}	ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, id, "mnoGoSearch-Agent", le_link);	convert_to_string_ex(yystr);	str = Z_STRVAL_PP(yystr);	hash32=UdmHash32((str),strlen(str));#if UDM_VERSION_ID >= 30215	snprintf(buf,sizeof(buf)-1,"%i",hash32);#else	snprintf(buf,sizeof(buf)-1,"%u",hash32);#endif		RETURN_STRING(buf,1);}/* }}} */#endif/* {{{ proto int udm_find(int agent, string query)   Perform search */DLEXPORT PHP_FUNCTION(udm_find){	pval ** yyquery, ** yyagent;	UDM_RESULT * Res;	UDM_AGENT * Agent;	int id=-1;	switch(ZEND_NUM_ARGS()){#if UDM_VERSION_ID >= 30213		case 1: {				if (zend_get_parameters_ex(1, &yyagent)==FAILURE) {					RETURN_FALSE;				}			}			break;#endif		case 2: {				if (zend_get_parameters_ex(2, &yyagent,&yyquery)==FAILURE) {					RETURN_FALSE;				}				convert_to_string_ex(yyquery);			}			break;		default:			WRONG_PARAM_COUNT;			break;	}	ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, id, "mnoGoSearch-Agent", le_link);	#if UDM_VERSION_ID < 30200	if ((Res=UdmFind(Agent,UdmTolower(Z_STRVAL_PP(yyquery),Agent->charset)))) {#else#if UDM_VERSION_ID >= 30213	if ((Res=UdmFind(Agent))) {#else	if ((Res=UdmFind(Agent,Z_STRVAL_PP(yyquery)))) {#endif#endif		    ZEND_REGISTER_RESOURCE(return_value,Res,le_res);	} else {	    RETURN_FALSE;	}	}/* }}} *//* {{{ proto string udm_get_res_field(int res, int row, int field)   Fetch mnoGoSearch result field */DLEXPORT PHP_FUNCTION(udm_get_res_field){	pval **yyres, **yyrow_num, **yyfield_name;	UDM_RESULT * Res;	int row,field;		switch(ZEND_NUM_ARGS()){		case 3: {				if (zend_get_parameters_ex(3, &yyres,&yyrow_num,&yyfield_name)==FAILURE){					RETURN_FALSE;				}				convert_to_string_ex(yyrow_num);				convert_to_string_ex(yyfield_name);				field=atoi(Z_STRVAL_PP(yyfield_name));				row=atoi(Z_STRVAL_PP(yyrow_num));			}			break;		default:			WRONG_PARAM_COUNT;			break;	}	ZEND_FETCH_RESOURCE(Res, UDM_RESULT *, yyres, -1, "mnoGoSearch-Result", le_res);	if(row<Res->num_rows){		switch(field){			case UDM_FIELD_URL: 		#if UDM_VERSION_ID >= 30204			    {				char	*al;				al = (char *)MyRemoveHiLightDup((const char *)(UdmVarListFindStr(&(Res->Doc[row].Sections), "URL", "")));				UdmVarListReplaceStr(&Res->Doc[row].Sections,"URL",al);				free(al);								RETURN_STRING((char *)UdmVarListFindStr(&Res->Doc[row].Sections,"URL",""),1);			    }#else				RETURN_STRING((Res->Doc[row].url)?(Res->Doc[row].url):"",1);#endif				break;							case UDM_FIELD_CONTENT: 	#if UDM_VERSION_ID >= 30204				RETURN_STRING((char *)UdmVarListFindStr(&(Res->Doc[row].Sections),"Content-Type",""),1);#else				RETURN_STRING((Res->Doc[row].content_type)?(Res->Doc[row].content_type):"",1);#endif				break;							case UDM_FIELD_TITLE:		#if UDM_VERSION_ID >= 30204				RETURN_STRING((char *)UdmVarListFindStr(&(Res->Doc[row].Sections),"Title",""),1);#else				RETURN_STRING((Res->Doc[row].title)?(Res->Doc[row].title):"",1);#endif				break;							case UDM_FIELD_KEYWORDS:	#if UDM_VERSION_ID >= 30204				RETURN_STRING((char *)UdmVarListFindStr(&(Res->Doc[row].Sections),"Meta.Keywords",""),1);#else				RETURN_STRING((Res->Doc[row].keywords)?(Res->Doc[row].keywords):"",1);#endif				break;							case UDM_FIELD_DESC:		#if UDM_VERSION_ID >= 30204				RETURN_STRING((char *)UdmVarListFindStr(&(Res->Doc[row].Sections),"Meta.Description",""),1);#else				RETURN_STRING((Res->Doc[row].description)?(Res->Doc[row].description):"",1);#endif				break;							case UDM_FIELD_TEXT:		#if UDM_VERSION_ID >= 30204				RETURN_STRING((char *)UdmVarListFindStr(&(Res->Doc[row].Sections),"Body",""),1);#else				RETURN_STRING((Res->Doc[row].text)?(Res->Doc[row].text):"",1);#endif				break;							case UDM_FIELD_SIZE:		#if UDM_VERSION_ID >= 30204				RETURN_LONG(UdmVarListFindInt(&(Res->Doc[row].Sections),"Content-Length",0));#else				RETURN_LONG((Res->Doc[row].size));#endif				break;							case UDM_FIELD_URLID:#if UDM_VERSION_ID >= 30204				RETURN_LONG(UdmVarListFindInt(&(Res->Doc[row].Sections),"ID",0));#else				RETURN_LONG((Res->Doc[row].url_id));#endif				break;							case UDM_FIELD_RATING:		#if UDM_VERSION_ID >= 30204				RETURN_STRING((char *)UdmVarListFindStr(&(Res->Doc[row].Sections),"Score",""),1);#else				RETURN_LONG((Res->Doc[row].rating));#endif				break;							case UDM_FIELD_MODIFIED:	#if UDM_VERSION_ID >= 30204				RETURN_STRING((char *)UdmVarListFindStr(&(Res->Doc[row].Sections),"Last-Modified",""),1);#else				RETURN_LONG((Res->Doc[row].last_mod_time));#endif				break;			case UDM_FIELD_ORDER:	#if UDM_VERSION_ID >= 30204				RETURN_LONG(UdmVarListFindInt(&(Res->Doc[row].Sections),"Order",0));#else				RETURN_LONG((Res->Doc[row].order));#endif				break;							case UDM_FIELD_CRC:	#if UDM_VERSION_ID >= 30204				RETURN_LONG(UdmVarListFindInt(&(Res->Doc[row].Sections),"crc32",0));#else				RETURN_LONG((Res->Doc[row].crc32));#endif				break;							case UDM_FIELD_CATEGORY:		#if UDM_VERSION_ID >= 30204				RETURN_STRING((char *)UdmVarListFindStr(&(Res->Doc[row].Sections),"Category",""),1);#else				RETURN_STRING((Res->Doc[row].category)?(Res->Doc[row].category):"",1);#endif				break;#if UDM_VERSION_ID >= 30203					case UDM_FIELD_LANG:		#if UDM_VERSION_ID >= 30204				RETURN_STRING((char *)UdmVarListFindStr(&(Res->Doc[row].Sections),"Content-Language",""),1);#else				RETURN_STRING((Res->Doc[row].lang)?(Res->Doc[row].lang):"",1);#endif				break;			case UDM_FIELD_CHARSET:		#if UDM_VERSION_ID >= 30204				RETURN_STRING((char *)UdmVarListFindStr(&(Res->Doc[row].Sections),"Charset",""),1);#else				RETURN_STRING((Res->Doc[row].charset)?(Res->Doc[row].charset):"",1);#endif				break;#endif			#if UDM_VERSION_ID >= 30207			case UDM_FIELD_SITEID:				RETURN_LONG(UdmVarListFindInt(&(Res->Doc[row].Sections),"Site_id",0));								break;			case UDM_FIELD_POP_RANK:				RETURN_STRING((char *)UdmVarListFindStr(&(Res->Doc[row].Sections),"Pop_Rank",""),1);								break;			case UDM_FIELD_ORIGINID:				RETURN_LONG(UdmVarListFindInt(&(Res->Doc[row].Sections),"Origin-Id",0));				break;#endif							default: 				php_error_docref(NULL TSRMLS_CC, E_WARNING,"Unknown mnoGoSearch field name");				RETURN_FALSE;				break;		}	}else{		php_error_docref(NULL TSRMLS_CC, E_WARNING,"row number too large");		RETURN_FALSE;	}}/* }}} *//* {{{ proto string udm_get_res_param(int res, int param)   Get mnoGoSearch result parameters */DLEXPORT PHP_FUNCTION(udm_get_res_param){	pval ** yyres, ** yyparam;	int param;	UDM_RESULT * Res;	switch(ZEND_NUM_ARGS()){		case 2: {				if (zend_get_parameters_ex(2, &yyres, &yyparam)==FAILURE) {					RETURN_FALSE;				}				convert_to_long_ex(yyparam);				param=(Z_LVAL_PP(yyparam));			}			break;		default:			WRONG_PARAM_COUNT;			break;	}	ZEND_FETCH_RESOURCE(Res, UDM_RESULT *, yyres, -1, "mnoGoSearch-Result", le_res);	switch(param){		case UDM_PARAM_NUM_ROWS: 				RETURN_LONG(Res->num_rows);			break;				case UDM_PARAM_FOUND:	 				RETURN_LONG(Res->total_found);			break;				case UDM_PARAM_WORDINFO: #if UDM_VERSION_ID >= 30204			{			    int len,i;			    for(len = i = 0; i < Res->WWList.nwords; i++) 				len += Res->WWList.Word[i].len + 64;			    {					size_t wsize=(1+len)*sizeof(char);				char *wordinfo = (char*) malloc(wsize);	  				*wordinfo = '\0';	  				for(i = 0; i < Res->WWList.nwords; i++){				    if ((Res->WWList.Word[i].count > 0) || 				        (Res->WWList.Word[i].origin == UDM_WORD_ORIGIN_QUERY)) {					if(wordinfo[0]) strcat(wordinfo,", ");					sprintf(UDM_STREND(wordinfo)," %s : %d", Res->WWList.Word[i].word, Res->WWList.Word[i].count);				    } else if (Res->WWList.Word[i].origin == UDM_WORD_ORIGIN_STOP) {					if(wordinfo[0]) strcat(wordinfo,", ");					sprintf(UDM_STREND(wordinfo)," %s : stopword", Res->W

⌨️ 快捷键说明

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