■スレッドリストへ戻る■ 全部 1- 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 最新50
read.cgi再開発スレ Part2
- 418 :▲ ◆cZfSunOs.U :2005/12/05(月) 21:39:21 ID:qOa8SuPx0
- >>415 乙です.
>たぶん、HEADしてGETするとか、そういう感じなのかしら。
そのように2回サブリクエストを実行する形だと非効率になりそうなので,
雪だるま版では lookfor() で内容取得まで一緒にやってしまった方が良さそうな気もします.
その代わり,dat ファイルを読み込んでる部分をスキップすると.
----[この関数を定義しておく]------------------------------------------
#ifdef SNOWMAN
static apr_status_t rdat_filter(ap_filter_t *f, apr_bucket_brigade *b)
{
return ap_save_brigade(f, (apr_bucket_brigade **)&f->ctx, &b, f->r->pool);
}
#endif
----[lookfor() の中]--------------------------------------------------
#ifdef SNOWMAN
int rv;
#if defined(AP_SERVER_MINORVERSION_NUMBER) && AP_SERVER_MINORVERSION_NUMBER >= 2
ap_filter_rec_t frec = {"READDAT", {rdat_filter}, NULL, AP_FTYPE_RESOURCE, NULL, NULL, 0, 0};
#else
ap_filter_rec_t frec = {"READDAT", {rdat_filter}, NULL, AP_FTYPE_RESOURCE, NULL};
#endif
ap_filter_t f = {&frec, NULL, NULL, r, r->connection};
char *uri = apr_pstrcat(r->pool, "/", ch2->zz_bbs, "/dat/", ch2->zz_key, ".dat", NULL);
request_rec *rdat = ap_sub_req_lookup_uri(uri, r, &f);
if (!(rv = rdat->status == HTTP_OK ? ap_run_sub_req(rdat) : rdat->status)) {
apr_brigade_pflatten(f.ctx, &ch2->BigBuffer, &ch2->zz_filesize, r->pool);
apr_brigade_destroy(f.ctx);
ch2->zz_mtime = rdat->mtime ? rdat->mtime
: apr_date_parse_http(apr_table_get(rdat->headers_out, "Last-Modified"));
}
ap_destroy_sub_req(rdat);
if (!rv) {
ch2->where = W_LIVE;
return 1;
}
#else
if(!apr_stat(&CountStat,ch2->zz_fName,APR_FINFO_MIN,r->pool)) /* found */
{
ch2->zz_filesize = CountStat.size ;
ch2->zz_mtime = CountStat.mtime ;
ch2->where = W_LIVE ;
return 1 ;
}
#endif
----[BigBuffer アロケート / dat 読み込みの部分はスキップ]-------------
#ifndef SNOWMAN
ch2->BigBuffer = apr_palloc(r->pool, ch2->zz_filesize); /* ←多分こんな形で BigBuffer 領域を確保してますよね? */
if (apr_file_open(&in,ch2->zz_fName,APR_READ,APR_OS_DEFAULT,r->pool)) {return 3011;}
apr_file_read(in, ch2->BigBuffer, &ch2->zz_filesize);
apr_file_close(in) ;
#endif
----------------------------------------------------------------------
284KB
新着レスの表示
スレッドリストへ戻る 全部 前100 次100 最新50
0ch BBS 2004-10-30