![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
No.3ベストアンサー
- 回答日時:
どのくらいの使用量なのかわかりませんが、そんな巨大なHTMLを出力したら、見る方も大変なのでは?
mod_phpでApacheにContent-Lengthヘッダを出させていれば、
出力前にデータをため込んで、PHPからの出力が終了したらそのサイズを確認し、
Content-Lengthヘッダとして出力するので、バッファのため込みは避けられないと思います。(ため込まないとファイルサイズがわからない)
あらかじめファイルサイズがわかれば自分でContent-Lengthヘッダを出力すればよいですが、まず無理ですので、
header('Transfer-Encoding', 'chunked');
を使って見てはいかがでしょうか。
それでも使用メモリが減らないようなら、適当なタイミングでechoした内容(バッファ)を、クライアントに送信する処理が必要です。
Perlではflush()ですが、すみませんがPHPではわかりません。
頻繁にflushすると、パフォーマンスが落ちます。
CGI版PHP(mod_cgi)では、特に気にしなくてもTransfer-Encodingを使い、最適なタイミングでflushしていると思います。
*出力バッファがらみです。
一案として。
昔はContent-Transfer: chunkedに対応していないブラウザが多かったようですが、今は大丈夫だと思います。
Ajaxでは、iCab等、一部のブラウザでデータが取得できないかもしれませんが詳しく調べていません。(iCabはContent-Type: multipart/*を取得できませんので、それが原因かも知れません)
携帯電話ではContent-Length必須、Content-Transfer: chunked未対応です。
CGI関連はCGIカテゴリーで質問するともっと良い回答が得られるかもです。
ご参考まで。
ご丁寧なご回答ありがとうございます。
データを全件表示したいという要望があり試してみた次第です。
Transfer-Encodingをchunkedとしても動作は変わりませんでしたが、一定のタイミングでバッファをフラッシュしながら出力したところ、メモリ使用量が増え続けることなく全件の出力ができました。
また、その他の情報も大変参考になりました。
No.2
- 回答日時:
単純にhttpのバッファに溜まりこんでいるだけじゃないですかね。
while($row = pg_fetch_assoc($pid))
{
echo $row['data'] . "<br />\n";
echo memory_get_usage();
echo "<br />\n";
}
といった感じだと増え続けるのは道理かなぁとも思います。
巨大データをhttpで送信というのを当方はやったことないので分かりませんが、
対策としてはsocketを明示的に開き、こねくり回せばメモリ使用量も抑えられるのではという気がします。
// タイムアウトや遅延の設計も行わねばならないのでかなり面倒な気がしますが
もしくはHTTPのバッファをオンメモリでない方法で独自に管理とか。
早速のご回答ありがとうございます。
出力件数を制御してしまえば問題にならないことだったのですが、どうしても気になって質問してしまいました。
httpのバッファの問題とのことで、メモリ使用量が増えるのはやはり仕方がないということと理解しました。
*バッファを独自に管理することについては知識がありませんので調べてみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CPU・メモリ・マザーボード Windows11アップデート後の不具合(メモリ不足)について 9 2023/01/04 11:34
- CPU・メモリ・マザーボード メモリが使用可能にならない 3 2022/08/13 17:13
- iPhone(アイフォーン) iCloudのデータをiPhoneメモリに移動したい 1 2022/10/24 22:11
- CPU・メモリ・マザーボード メモリの増設について 6 2022/12/28 06:41
- CPU・メモリ・マザーボード ゲーミングpcのファンのことについて教えて欲しいです。 6 2023/03/05 07:44
- CPU・メモリ・マザーボード ノートパソコンの増設メモリ選びについて教えてください。 3 2023/01/05 12:58
- CPU・メモリ・マザーボード Windows10 64bitパソコンのメモリ 4GBから8GBへ増設 11 2023/01/25 18:20
- Windows 10 実装メモリとタスクマネージャーのメモリ使用量不一致について 4 2022/12/15 01:07
- ノートパソコン メモリ4GiB 容量64bitのノートパソコンを買おうか迷っています。 使用用途としては、Wordを 6 2022/07/06 13:28
- CPU・メモリ・マザーボード PCのメモリは4GBX2枚と 4+8GBはどちらがお勧めですか? 4 2023/07/06 08:21
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ob_end_clean と ob_clean の違...
-
smarty foreach 半角スペース
-
曜日による変換
-
phpにcssを適応させたい...
-
【php】7日おきに日付を表示す...
-
PHPで`headers already sent`と...
-
onedrive にexcelファイルをア...
-
フォントの色を変えるには?
-
透過PNGが透過されない!!
-
PHPからMSSQLへの接続結果の文...
-
.htaccessにphp_valueが使用できな
-
$filePath = './user_img/' . $...
-
フォームで戻った際に入力済み...
-
PHPのif文でその処理を途中で抜...
-
リンク先を隠す方法はないでし...
-
FTPコマンドでディレクトリごと...
-
PHPでFilename cannot be empty...
-
str ! = NULL
-
ImageCreate関数が undefined f...
-
.phpファイルが、表示されない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CSV出力にHTMLが入ってしまう
-
PHPにおける時間計算、時間足し...
-
phpexcelにてsubmitボタンを押...
-
ob_end_clean と ob_clean の違...
-
imgタグでのphpの呼び出しについて
-
smarty foreach 半角スペース
-
リダイレクト元のURLの取得方法...
-
TCPDFについて
-
エクスプローラーでフォルダを...
-
phpにcssを適応させたい...
-
¥マークを出力したいがバック...
-
image関数でMS Pゴシックを使い...
-
PHPで表示したテーブル内容をCS...
-
バイナリファイルをブラウザに...
-
PHP/phpMyAdmin/データベースな...
-
PHP4 メモリ使用量について
-
phpでmysqlから画像パスを出力する
-
PHPが出力するHTMLを表示するに...
-
GDで生成したはずの画像が文字...
-
ブラウザのページキャッシュ機...
おすすめ情報