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

📄 php_mnogo.c

📁 php-4.4.7学习linux时下载的源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
#else			UdmAddLangLimit(Agent->Conf,val);#endif						break;		case UDM_LIMIT_CAT: #if UDM_VERSION_ID >= 30204			UdmVarListAddStr(&Agent->Conf->Vars,"cat",val);#else			UdmAddCatLimit(Agent->Conf,val);#endif						break;		case UDM_LIMIT_TYPE: #if UDM_VERSION_ID >= 30207			UdmVarListAddStr(&Agent->Conf->Vars,"type",val);#endif						break;					case UDM_LIMIT_DATE: #if UDM_VERSION_ID < 30200						{			struct udm_stl_info_t stl_info = { 0, 0, 0 };			char *edate;						if (val[0] == '>') {				Z_TYPE(stl_info)=1;			} else if (val[0] == '<') {				Z_TYPE(stl_info)=-1;			} else if((val[0]=='#')&&(edate=strchr(val,','))){				Z_TYPE(stl_info)=2;				stl_info.t2=(time_t)(atol(edate+1));			} else {				php_error_docref(NULL TSRMLS_CC, E_WARNING,"Incorrect date limit format");				RETURN_FALSE;			}									stl_info.t1=(time_t)(atol(val+1));			UdmAddTimeLimit(Agent->Conf,&stl_info);			}#elif UDM_VERSION_ID >= 30210                        {                    	    struct tm       *d_tm;                            time_t          d_t;                            char            *d_val2;                            char            d_db[20], d_de[20];                            d_t = atol (val+1);                            d_tm = localtime (&d_t);                            if (val[0] == '>') {                        	UdmVarListReplaceStr(&Agent->Conf->Vars,"dt","er");                                UdmVarListReplaceStr(&Agent->Conf->Vars,"dx","1");                                sprintf (d_db, "%d", d_tm->tm_mday);                                UdmVarListReplaceStr(&Agent->Conf->Vars,"dd",d_db);                                sprintf (d_db, "%d", d_tm->tm_mon);                                UdmVarListReplaceStr(&Agent->Conf->Vars,"dm",d_db);                                sprintf (d_db, "%d", d_tm->tm_year+1900);                                UdmVarListReplaceStr(&Agent->Conf->Vars,"dy",d_db);                                RETURN_TRUE;                            } else if (val[0] == '<') {                                UdmVarListReplaceStr(&Agent->Conf->Vars,"dt","er");                                UdmVarListReplaceStr(&Agent->Conf->Vars,"dx","-1");                                sprintf (d_db, "%d", d_tm->tm_mday);                                UdmVarListReplaceStr(&Agent->Conf->Vars,"dd",d_db);                                sprintf (d_db, "%d", d_tm->tm_mon);                                UdmVarListReplaceStr(&Agent->Conf->Vars,"dm",d_db);                                sprintf (d_db, "%d", d_tm->tm_year+1900);                                UdmVarListReplaceStr(&Agent->Conf->Vars,"dy",d_db);                                RETURN_TRUE;                            } else if ( (val[0]=='#') && (d_val2 = strchr(val,',')) ){                                UdmVarListReplaceStr(&Agent->Conf->Vars,"dt","range");                                sprintf (d_db, "%d/%d/%d", d_tm->tm_mday, d_tm->tm_mon+1, d_tm->tm_year+1900);                                d_t = atol (d_val2+1);                                d_tm = localtime (&d_t);                                sprintf (d_de, "%d/%d/%d", d_tm->tm_mday, d_tm->tm_mon+1, d_tm->tm_year+1900);                                UdmVarListReplaceStr(&Agent->Conf->Vars,"db",d_db);                                UdmVarListReplaceStr(&Agent->Conf->Vars,"de",d_de);                                RETURN_TRUE;                            } else {                                php_error_docref(NULL TSRMLS_CC, E_WARNING,"Incorrect date limit format");                                RETURN_FALSE;                            }                       }#endif			break;		default:			php_error_docref(NULL TSRMLS_CC, E_WARNING,"Unknown search limit parameter");			RETURN_FALSE;			break;	}	RETURN_TRUE;}/* }}} *//* {{{ proto int udm_clear_search_limits(int agent)   Clear all mnoGoSearch search restrictions */DLEXPORT PHP_FUNCTION(udm_clear_search_limits){	pval ** yyagent;	UDM_AGENT * Agent;	int i;		switch(ZEND_NUM_ARGS()){		case 1: {				if (zend_get_parameters_ex(1, &yyagent)==FAILURE) {					RETURN_FALSE;				}			}			break;		default:			WRONG_PARAM_COUNT;			break;	}	ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, -1, "mnoGoSearch-Agent", le_link);#if UDM_VERSION_ID >= 30204		for(i=0;i<Agent->Conf->Vars.nvars;i++){		if ((!strcasecmp("ul",Agent->Conf->Vars.Var[i].name))||		    (!strcasecmp("cat",Agent->Conf->Vars.Var[i].name))||		    (!strcasecmp("t",Agent->Conf->Vars.Var[i].name))||		    (!strcasecmp("lang",Agent->Conf->Vars.Var[i].name))) {		    UDM_FREE(Agent->Conf->Vars.Var[i].name);		    UDM_FREE(Agent->Conf->Vars.Var[i].val);		    Agent->Conf->Vars.nvars--;		}	}#else	UdmClearLimits(Agent->Conf);#endif		RETURN_TRUE;}/* }}} */#if UDM_VERSION_ID >= 30200/* {{{ proto int udm_check_charset(int agent, string charset)   Check if the given charset is known to mnogosearch */DLEXPORT PHP_FUNCTION(udm_check_charset){	pval ** yycharset, ** yyagent;	UDM_AGENT * Agent;	int id=-1;	switch(ZEND_NUM_ARGS()){		case 2: {				if (zend_get_parameters_ex(2, &yyagent,&yycharset)==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(yycharset);		if (UdmGetCharSet(Z_STRVAL_PP(yycharset))) {	    RETURN_TRUE;	} else {	    RETURN_FALSE;	}	}/* }}} */#endif#if UDM_VERSION_ID >= 30203/* {{{ proto int udm_crc32(int agent, string str)   Return CRC32 checksum of gived string */DLEXPORT PHP_FUNCTION(udm_crc32){	pval ** yystr, ** yyagent;	char *str;	int crc32;	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);	crc32=UdmCRC32((str),strlen(str));	snprintf(buf,sizeof(buf)-1,"%u",crc32);		RETURN_STRING(buf,1);}/* }}} */#endif#if UDM_VERSION_ID == 30203static ssize_t UdmRecvAll(int s, void *buf, size_t len, int flags) {  size_t received = 0, r;  char *b = buf;  while ( (received < len) && ((r = recv(s, &b[received], len - received, flags)) >= 0 ) ) {    received += r;  }  return received;}/* {{{ proto int udm_open_stored(int agent, string storedaddr)   Open connection to stored  */DLEXPORT PHP_FUNCTION(udm_open_stored){	pval ** yyagent, ** yyaddr;		int s;	char * addr;	const char *hello = "F\0";		UDM_AGENT * Agent;	int id=-1;	switch(ZEND_NUM_ARGS()){		case 2: {				if (zend_get_parameters_ex(2, &yyagent, &yyaddr)==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(yyaddr);	addr = Z_STRVAL_PP(yyaddr);	UdmReplaceStrVar(Agent->Conf->vars,"StoredAddr",addr,UDM_VARSRC_GLOBAL);	Agent->Conf->stored_addr = strdup(UdmFindStrVar(Agent->Conf->vars, "StoredAddr", "localhost"));		s = UdmStoreOpen(Agent->Conf);		if (s >= 0) {	    send(s, hello, 1, 0);	    RETURN_LONG(s);	} else RETURN_FALSE;	}/* }}} *//* {{{ proto int udm_close_stored(int agent, int link)   Open connection to stored  */DLEXPORT PHP_FUNCTION(udm_close_stored){	pval ** yylink, ** yyagent;		int s;	unsigned int rec_id = 0;		UDM_AGENT * Agent;	int id=-1;	switch(ZEND_NUM_ARGS()){		case 2: {				if (zend_get_parameters_ex(2, &yyagent, &yylink)==FAILURE) {					RETURN_FALSE;				}			}			break;		default:							WRONG_PARAM_COUNT;			break;	}	ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, id, "mnoGoSearch-Agent", le_link);		convert_to_long_ex(yylink);	s = Z_LVAL_PP(yylink);		send(s, &rec_id, sizeof(rec_id), 0);	closesocket(s);		RETURN_TRUE;}/* }}} *//* {{{ proto int udm_check_stored(int agent, int link, string doc_id)   Open connection to stored  */DLEXPORT PHP_FUNCTION(udm_check_stored){	pval ** yyid, ** yylink, ** yyagent;		int s;	unsigned int rec_id = 0;	int store_found;		UDM_AGENT * Agent;	int id=-1;	switch(ZEND_NUM_ARGS()){		case 3: {				if (zend_get_parameters_ex(3, &yyagent, &yylink, &yyid)==FAILURE) {					RETURN_FALSE;				}			}			break;		default:							WRONG_PARAM_COUNT;			break;	}	ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, id, "mnoGoSearch-Agent", le_link);		convert_to_long_ex(yylink);	s = Z_LVAL_PP(yylink);		convert_to_string_ex(yyid);		rec_id=strtoul(Z_STRVAL_PP(yyid),NULL,10);	send(s, &rec_id, sizeof(rec_id), 0);	if (UdmRecvAll(s, &store_found, sizeof(store_found), MSG_WAITALL) < 0) {	    RETURN_LONG(store_found);	} else RETURN_FALSE;}/* }}} */#endif#if UDM_VERSION_ID >= 30204/* {{{ proto int udm_parse_query_string(int agent, string str)   Parses query string, initialises variables and search limits taken from it */DLEXPORT PHP_FUNCTION(udm_parse_query_string){	pval ** yystr, ** yyagent;	char *str;	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);	UdmParseQueryString(Agent,&Agent->Conf->Vars,str);	RETURN_TRUE;}/* }}} *//* {{{ proto int udm_make_excerpt(int agent, int res, int row)   Perform search */DLEXPORT PHP_FUNCTION(udm_make_excerpt){	pval ** yyagent, **yyres, **yyrow_num;	UDM_RESULT * Res;	UDM_AGENT * Agent;	int id=-1, row;	switch(ZEND_NUM_ARGS()){		case 3: {				if (zend_get_parameters_ex(3, &yyagent, &yyres, &yyrow_num)==FAILURE) {					RETURN_FALSE;				}				convert_to_string_ex(yyrow_num);				row=atoi(Z_STRVAL_PP(yyrow_num));			}			break;		default:			WRONG_PARAM_COUNT;			break;	}	ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, id, "mnoGoSearch-Agent", le_link);	ZEND_FETCH_RESOURCE(Res, UDM_RESULT *, yyres, -1, "mnoGoSearch-Result", le_res);		if(row<Res->num_rows){		char		*al;		char		*Excerpt;		#if UDM_VERSION_ID >= 30216		size_t		ExcerptSize, ExcerptPadding;				ExcerptSize = (size_t)UdmVarListFindInt(&Agent->Conf->Vars, "ExcerptSize", 256);		ExcerptPadding = (size_t)UdmVarListFindInt(&Agent->Conf->Vars, "ExcerptPadding", 40);#endif				al = (char *)MyRemoveHiLightDup((const char *)(UdmVarListFindStr(&(Res->Doc[row].Sections), "URL", "")));		UdmVarListReplaceInt(&(Res->Doc[row].Sections), "STORED_ID", UdmCRC32(al, strlen(al)));		free(al);		#if UDM_VERSION_ID >= 30216		Excerpt = UdmExcerptDoc(Agent, Res, &(Res->Doc[row]), ExcerptSize, ExcerptPadding);#else		Excerpt = UdmExcerptDoc(Agent, Res, &(Res->Doc[row]), 256);#endif				if ((Excerpt != NULL) && (strlen(Excerpt) > 6)) {			char *HlExcerpt = UdmHlConvert(&Res->WWList, Excerpt, Agent->Conf->lcs, Agent->Conf->bcs);			UdmVarListReplaceStr(&(Res->Doc[row].Sections),"Body",HlExcerpt);			UDM_FREE(HlExcerpt);		}		if (Excerpt != NULL && (UdmVarListFindStr(&(Res->Doc[row].Sections), "Z", NULL) == NULL)) {			UdmVarListReplaceInt(&(Res->Doc[row].Sections),"ST",1);			UDM_FREE(Excerpt);		} else {		        UdmVarListReplaceInt(&(Res->Doc[row].Sections),"ST",0);			RETURN_FALSE;		}	}else{		php_error_docref(NULL TSRMLS_CC, E_WARNING,"row number too large");		RETURN_FALSE;	}		RETURN_TRUE;}/* }}} *//* {{{ proto int udm_set_agent_param_ex(int agent, string var, string val)   Set mnoGoSearch agent session parameters extended */DLEXPORT PHP_FUNCTION(udm_set_agent_param_ex){	pval **yyagent, **yyvar, **yyval;	char *val, *var;	UDM_AGENT * Agent;	switch(ZEND_NUM_ARGS()){			case 3: 					if(zend_get_parameters_ex(3,&yyagent,&yyvar,&yyval)==FAILURE){				RETURN_FALSE;			}			convert_to_string_ex(yyvar);			convert_to_string_ex(yyval);			ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, -1, "mnoGoSearch-agent", le_link);			var = Z_STRVAL_PP(yyvar);			val = Z_STRVAL_PP(yyval);						break;					default:			WRONG_PARAM_COUNT;			break;	}

⌨️ 快捷键说明

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