モーグルとカバとパウダーの日記

モーグルやカバ(EXカービング)山スキー(BC)などがメインの日記でした。今は仕事のコンピュータ系のネタが主になっています。以前はスパム対策関連が多かったのですが最近はディープラーニング関連が多めです。

OpenUploadで大きなファイルをダウンロード出来ない問題

OpenUploadというPHPで書かれたオープンソースアップローダダウンローダアプリがあります。
これである程度大きなファイルをダウンロードしようとすると、メモリが確保出来ずにダウンロード出来ない、という問題を相談されました。


すでにphp.ini等でmemory_limitの指定は大きくしてあるものの、いくら指定を大きくしても一定以上のメモリは確保できないという状況でした。


調べてみると

lib/modules/default/files.inc.php

の400行くらいにあるreadfileでメモリが足らなくなっており、その手前で

ob_end_clean();

しているところがあるのですが、どうもそこでバッファがクリアしきれてない感じでした。
なので、この行を

while (ob_end_clean());

としてクリアしきるまで回してやることで改善出来ました。


が、これはこれで気持ち悪い。

色々探した所、このへんが同様の問題のようでした。

Open Upload / Bugs / #73 Extremely slow downloads of large files
http://sourceforge.net/p/openupload/bugs/73/?limit=50


そこでphp.iniに

output_buffering=Off

してやることでも解決出来ました。


同様に www の下の .htaccess

php_value output_buffering "Off"

を追加してやっても良いと思います。