📄 php_mnogo.c
字号:
#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 + -