0

私は symfony 2.0 を使用しており、zip を動的に生成しようとしています。

これは私のコードです:

 public function downloadFontAction($slug)
        {
            $font = $this->getRepository(static::FONT_REP)->findOneBySlug($slug);

            $zip = new \ZipArchive;
            $zipName = $slug.".zip";
            if ($zip->open($zipName, \ZIPARCHIVE::CREATE | \ZIPARCHIVE::OVERWRITE) === TRUE) {
                foreach($this->container->getParameter('font_extensions') as $ext)
                {
                    $fontFile = call_user_func(array($font, "get".ucfirst($ext)));
                    //adding Fonts
                    if ($fontFile)
                    {
                        $zip->addFile('/Users/admin/Documents/public_html/GitHub/typ/web/static/'.$fontFile,$font->getSlug().".".$ext);
                    }
                }
                $zip->close();
            } else {
                echo 'failed';
            }

            $response = new Response();

            //$response->setContent(readfile($zipName));
            $response->setStatusCode(200);

            $response->headers->set('Content-Type', 'application/zip'); 
            $response->headers->set('Content-Disposition', 'attachment; filename="'.$zipName.'"');
            $response->headers->set('Content-Transfer-Encoding', 'binary');
            $response->headers->set('Content-Length', filesize($zipName));     
            $response->headers->set('Pragma', 'public');
            $response->headers->set('Expires', '0');
            $response->headers->set('Cache-Control', 'must-revalidate, post-check=0, pre-check=0');
            $response->headers->set('Cache-Control', 'private');
            @unlink($zipName);
            return $response;


        }

この関数は空の zip ファイルを返します。ファイルを解凍すると、cpgz ファイルが無限大に表示されます。zip はサーバー側で正しく生成されますが、この操作でダウンロードすることはできません。

4

3 に答える 3

1

手遅れにならないことを願っています。応答の内容を設定していないため、空のファイルです。応答を返す前に、次のようなことを試してください。

$response->setContent(file_get_contents($zipName));
于 2013-01-08T23:41:03.867 に答える
0

私にも同じことが起こりました。一時フォルダへの書き込み中に権限の問題があることに気付きました。一時フォルダへの書き込みに十分な権限を与えるようにしてください。

さらに、ダウンロードスクリプトのgzipを無効にしてみてください。私はphpページの上に下の行を追加することによって私のものを作りました。

ini_set('zlib.output_compression', 'Off');
于 2013-02-17T20:39:30.313 に答える
0

@unlink($zipName);

ダウンロードする前にファイルを削除しますか? たぶん、ここではリンクを解除する必要はありません:)

于 2012-10-30T14:59:25.487 に答える