- 締切済み
ZendFrameworkでファイルDLできない
ZendFrameworkでZIP圧縮したファイルをダウンロードさせようとしていますが、ファイルが正常に解凍できません。 「CRCが一致しないか、出力先が使用中です」とエラー表示されます。 一応、エラーが表示されても解凍はするのですが、ファイルを開こうとすると”ファイルが壊れています”と出てしまいます。 ちなみに、そのファイルをFTPでダウンロードし、通常に解凍すると正常に解凍されるので、ZendFramework上の何らかの処理が原因であると思われます。 また、症状の出ているのは数MB程度のデータで、サイズの小さい数百k程度のデータには起こっていないようです。 public function downloadAction(){ $file = abcde.zip; // ファイル名 $path = "/home/public/files/" . $file; // ファイルパス $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($path)); $response->sendHeaders(); $response->setBody(ob_end_clean()); $response->setBody(flush()); $response->outputBody(); $handle = fopen($path, "rb"); $contents = ''; while (!feof($handle)) { $contents = fread($handle, 8192); $response->setBody($contents); $response->outputBody(); } fclose($handle); return; } 何が原因だか教えて頂けないでしょうか。 宜しくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- singlecat
- ベストアンサー率33% (139/418)
ZendFrameworkを使ったことないので正しいかどうか解りませんが、 この部分が気になります。 $response->setBody(ob_end_clean()); $response->setBody(flush()); $response->outputBody(); ここで余分なものがはき出されてるとかないでしょうか? この3行はPHPのSyntaxでは、 ob_end_clean(); だけで良いように思いますが
補足
返事が遅れて申し訳ありません。 $response->setBody(ob_end_clean()); だけ残し、残りを削除しましたが症状は全く同じでした。