Christian Kruse: XPath -> Dieses Forum : Optimierung möglich?

Beitrag lesen

你好 molily,

Denn wenn man ein Posting gelesen hat, bekommt man die Forumshauptseite immer noch ohne class=visited ausgeliefert, weil stark gecacht wird und die Threadliste nur bei neuen Postings neu ausgeliefert wird.

Das allerdings muss an einem Fehler in der Konfiguration liegen (ich rate jetzt mal: Benutzer-Rechte flasch gesetzt). Denn eigentlich™ wird bei einer visited-Markierung (also, der serverseitigen Markierung) ein Timestamp zurück gesetzt und damit das Last-Modified-Datum (für den Nutzer) auf den Zeitpunkt der Markierung gesetzt:

  
/* {{{ module api function, mark a posting visited */  
void *flt_visited_mark_visited_api(void *vmid) {  
  u_int64_t *mid = (u_int64_t *)vmid;  
  DBT key,data;  
  int ret,fd;  
  u_char buff[256];  
  size_t len;  
  char one[] = "1";  
  
  if(Cfg.VisitedFile) {  
    memset(&key,0,sizeof(key));  
    memset(&data,0,sizeof(data));  
  
    len = snprintf(buff,256,"%"PRIu64,*mid);  
  
    data.data = one;  
    data.size = sizeof(one);  
  
    key.data = buff;  
    key.size = len;  
  
    if((ret = Cfg.db->put(Cfg.db,NULL,&key,&data,0)) != 0) {  
      if(ret != DB_KEYEXIST) {  
        fprintf(stderr,"flt_visited: db->put() error: %s\n",db_strerror(ret));  
        return NULL;  
      }  
  
      return vmid;  
    }  
  
    /* reset last-modified timestamp */  
    snprintf(buff,256,"%s.tm",Cfg.VisitedFile);  
    remove(buff);  
    if((fd = open(buff,O_CREAT|O_TRUNC|O_WRONLY)) != -1) close(fd);  
  
    return vmid;  
  }  
  
  return NULL;  
}  
/* }}} */  
  
/* {{{ flt_visited_validate */  
#ifndef CF_SHARED_MEM  
int flt_visited_validate(cf_hash_t *head,configuration_t *dc,configuration_t *vc,time_t last_modified,int sock)  
#else  
int flt_visited_validate(cf_hash_t *head,configuration_t *dc,configuration_t *vc,time_t last_modified,void *sock)  
#endif  
{  
  struct stat st;  
  char buff[256];  
  
  if(Cfg.VisitedFile) {  
    snprintf(buff,256,"%s.tm",Cfg.VisitedFile);  
    if(stat(buff,&st) == -1) return FLT_DECLINE;  
    if(st.st_mtime > last_modified) return FLT_EXIT;  
  }  
  
  return FLT_OK;  
}  
/* }}} */  

Und den Tests nach, die ich eben gemacht habe, funktioniert das prinzipiell auch.

再见,
 克里斯蒂安