[PHP-users 25869] Re: ファイルの出力中にメモリフロー

keijiro icm @ pepota.com
2005年 6月 21日 (火) 11:21:49 JST


こんにちは、keijiroです。

HOTTA様、sho様、Suzuki様、
ご返信ありがとうございます。

>>HOTTA様
> apache のログにはどう出ますか?(たぶん下記の例と同じだとは思いま
> すが)

apacheのErrorLogは、
Allowed memory size of 134217728 bytes exhausted (tried to allocate 21 bytes)
こういう感じです。

>>HOTTA様
> この質問に対する提案の、
> http://ns1.php.gr.jp/pipermail/php-users/2005-March/025320.html
> は試してみましたか?

リダイレクトさせないで、ファイルの場所を隠して、
PHP経由でファイルを出力したいと思っています。



>>sho様
> なんか、使用している関数に関してその動作に関して知らないで闇雲に並べてテスト
> してる印象を受けます。マニュアルを一読されることをお勧めします。

すみません。m(_ _)m
とても眠い状態で、あーでもない、こーでもない、
と作業をやっていたので、コピペ、削除で
ぐちゃぐちゃになっていますね。

今、すっきりした頭で、私が送ったソースを見ると
ひどい事がよくわかります。

申し訳ございません。


>>sho様
> [PHP-users 25045] ファイルの場所を隠す&読み込みながら書き出し
> http://ns1.php.gr.jp/pipermail/php-users/2005-March/025564.html
>>Suzuki様
> 私なら下記のようにします
> (以下略)

ありがとうございます。

このスレッドの内容とSuzuki様のソースを基に、
ob_end_flush();の使い方がまずかったことが
わかりました。

ちなみに私の環境でphp.iniは、
output_buffering = Off
utput_handler =
となっています。

Suzuki様のソースを試してみました。

+--------------------------------------------------------------------*
$theFile = "../movie.avi";
header ("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header ("Content-Type: application/octet-stream");
header ("Content-Length: " . filesize($theFile));
header ("Content-Disposition: attachment; filename=mv.avi");

flush();
ob_end_flush();

readfile($theFile);
+--------------------------------------------------------------------*

結果は、エラーでした。
実行したファイル名(down.php)でダウンロードされて、
そのダウンロードされたファイルの中身はテキストでした。

エディタで開くと、
<b>Fatal error</b>:  Allowed memory size of 134217728 bytes exhausted
(tried to allocate 723693568 bytes) in<b>/home/keijiro/test/down.php</b>
on line<b>11</b><br />

という内容でした。

今度は、こちらでメモリーサイズを超えていると言われてしまいました。

ob_end_flush();を消したりして、実行してみましたが、
結果は同じでした。
ううむ・・・。


_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

keijiro
icm @ pepota.com

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/




PHP-users メーリングリストの案内