Zend Framework で大きなファイルをダウンロードしたい
ホームページをtarでバックアップしてZend Frameworkでダウンロードしたいのですが、
http://php.benscom.com/manual/ja/function.readfile.php
を参考に次の様にしてみたところ、数Mbyte程度のファイルはダウンロードできましたが大きなファイル(200Mbyte)ではエラーになりました。
public function DownloadAction(){
$file = "test.bin";
$this->_helper->viewRenderer->setNoRender();
$response = $this->getResponse();
$response->clearAllHeaders();
$response->clearBody();
$response->setRawHeader('Content-Description: File Transfer');
$response->setRawHeader('Content-Type: application/octet-stream');
$response->setRawHeader('Content-Disposition: attachment; filename='.basename($file));
$response->setRawHeader('Content-Transfer-Encoding: binary');
$response->setRawHeader('Expires: 0');
$response->setRawHeader('Cache-Control: must-revalidate, post-check=0, pre-check=0');
$response->setRawHeader('Pragma: public');
$response->setRawHeader('Content-Length: ' . filesize($file));
$response->sendHeaders();
$response->setBody(file_get_contents($file));
$response->outputBody();
}
それで
$response->setBody(file_get_contents(&$file));
$response->outputBody();
の部分を
$handle = fopen($file, "rb");
$contents = '';
while (!feof($handle)) {
$contents = fread($handle, 8192);
$response->setBody($contents);
$response->outputBody();
}
fclose($handle);
とかにしてみましたがこれもファイルが途中で切れてしまいました。
php.iniのメモリ量を増やす以外に、何か方法がありますでしょうか?
補足
う~ん自分の環境だとvar_dump()で確認しましたがstring(0) ""で空です。でもagunuzさんが取得できるならPHPのバージョンの違いのせいかもしれないので最新のPHPでためしてみます。今はPHP5.4.4です