[PHP-users 6693] Re: ファイルの読み込み

Hiroki Minematu php-users@php.gr.jp
Fri, 05 Apr 2002 09:03:35 +0900


みねまつ と 申します

From: KOYAMA Tetsuji <koyama@hoge.org>
Date: Fri, 05 Apr 2002 00:32:31 +0900

>   ところがどっこい。
> 
> In ext/standard/file.c
> 
> 1015:	buf = emalloc(sizeof(char) * (len + 1));
> 1016:	/* needed because recv doesnt put a null at the end*/
> 1017:	memset(buf, 0, len+1);
> 
> ということで len + 1 バイト確保されちゃってるようです。
> 
>   本当にメモリ消費量を押さえたいなら、fread() で細かく自分で読み込むの
> がよろしいかと。

 以前([PHP-jp 2549])に block単位で細かく読みつつ mime decodeする 
post.cとmime.c をphp3用に作成してみた事があります(ちょっとバグってまし
たが)。 結局、fileの uploadをおこなう クライアントブラウザ側でも POST
用に巨大な一時ファイルを作成するために、uploadまえに timeoutしてしまう… 
という事があり作業停止しちゃってます。
# 32MB搭載の Cobalt Qube2でも 500MB程度は転送できましたが…

 その頃と実装が余り変わっていないようなら、実装は比較的簡単だと思い
ます。読みながら boundaryのチェックを行ない、現在 file本体を受けている
のか、変数の処理をしているのか状態をみながら処理を分けるだけです。

# PUT とかコッソリ実装されてるぽいですけどねPHP3の頃から
------------------------+
みねまつ@株式会社AIMCOM|
minematu@aimcom.co.jp   |