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