{"id":1071,"date":"2025-06-12T12:01:16","date_gmt":"2025-06-12T04:01:16","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/symfony\/1071.html"},"modified":"2025-06-12T12:01:16","modified_gmt":"2025-06-12T04:01:16","slug":"%e5%a6%82%e4%bd%95%e5%9c%a8symfony%e4%b8%ad%e8%bf%94%e5%9b%9ezip%e6%96%87%e4%bb%b6","status":"publish","type":"my1js","link":"https:\/\/www.zhaozhao123.cn\/php\/my1js\/1071.html","title":{"rendered":"\u5982\u4f55\u5728Symfony\u4e2d\u8fd4\u56deZip\u6587\u4ef6"},"content":{"rendered":"<div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--1\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/dyA-1-400x300.jpg\" alt=\"Bug&#32534;&#35793;&#29422;\" class=\"wp-image-1842\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">Bug&#32534;&#35793;&#29422;<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<p>&#22312; Symfony &#20013;&#36820;&#22238; ZIP &#25991;&#20214;&#36890;&#24120;&#28041;&#21450;&#20197;&#19979;&#20960;&#20010;&#27493;&#39588;&#65306;<\/p>\n<ol>\n<li><strong>&#21019;&#24314; ZIP &#25991;&#20214;<\/strong>&#65306;&#20351;&#29992; PHP &#30340; <code>ZipArchive<\/code> &#31867;&#26469;&#21019;&#24314; ZIP &#25991;&#20214;&#12290;<\/li>\n<li><strong>&#23558;&#25991;&#20214;&#28155;&#21152;&#21040; ZIP &#25991;&#20214;<\/strong>&#65306;&#23558;&#38656;&#35201;&#30340;&#25991;&#20214;&#28155;&#21152;&#21040; ZIP &#25991;&#20214;&#20013;&#12290;<\/li>\n<li><strong>&#35774;&#32622;&#21709;&#24212;&#22836;<\/strong>&#65306;&#35774;&#32622; HTTP &#21709;&#24212;&#22836;&#20197;&#25351;&#31034;&#23458;&#25143;&#31471;&#36825;&#26159;&#19968;&#20010; ZIP &#25991;&#20214;&#12290;<\/li>\n<li><strong>&#36755;&#20986; ZIP &#25991;&#20214;<\/strong>&#65306;&#36890;&#36807;&#21709;&#24212;&#27969;&#36755;&#20986; ZIP &#25991;&#20214;&#12290;<\/li>\n<\/ol>\n<p>&#20197;&#19979;&#26159;&#19968;&#20010;&#23436;&#25972;&#30340;&#31034;&#20363;&#20195;&#30721;&#65292;&#23637;&#31034;&#20102;&#22914;&#20309;&#22312; Symfony &#20013;&#23454;&#29616;&#36825;&#19968;&#28857;&#65306;<\/p>\n<pre><code class=\"language-php\">use SymfonyBundleFrameworkBundleControllerAbstractController;\nuse SymfonyComponentHttpFoundationBinaryFileResponse;\nuse SymfonyComponentHttpFoundationResponseHeaderBag;\n\nclass FileController extends AbstractController\n{\n    public function downloadZipAction(): Response\n    {\n        \/\/ &#21019;&#24314;&#19968;&#20010;&#26032;&#30340; ZIP &#25991;&#20214;\n        $zip = new ZipArchive();\n        $zip-&gt;open('example.zip', ZipArchive::CREATE);\n\n        \/\/ &#28155;&#21152;&#25991;&#20214;&#21040; ZIP &#25991;&#20214;\n        $fileToZip = 'path\/to\/your\/file.txt';\n        if ($zip-&gt;addFile($fileToZip)) {\n            echo \"File added successfully to the ZIP file.\";\n        } else {\n            echo \"Failed to add file to the ZIP file.\";\n        }\n\n        \/\/ &#35774;&#32622;&#21709;&#24212;&#22836;\n        $response = new BinaryFileResponse('example.zip');\n        $response-&gt;headers-&gt;set('Content-Type', 'application\/zip');\n        $response-&gt;headers-&gt;set('Content-Disposition', 'attachment; filename=\"example.zip\"');\n\n        return $response;\n    }\n}<\/code><\/pre>\n<h3>&#35299;&#37322;<\/h3>\n<ol>\n<li>\n<p><strong>&#21019;&#24314; ZIP &#25991;&#20214;<\/strong>&#65306;<\/p>\n<pre><code class=\"language-php\">$zip = new ZipArchive();\n$zip-&gt;open('example.zip', ZipArchive::CREATE);<\/code><\/pre>\n<p>&#36825;&#34892;&#20195;&#30721;&#21019;&#24314;&#20102;&#19968;&#20010;&#26032;&#30340; ZIP &#25991;&#20214;&#65292;&#24182;&#23558;&#20854;&#21629;&#21517;&#20026; <code>example.zip<\/code>&#65292;&#24182;&#19988;&#35774;&#32622;&#20102; <code>CREATE<\/code> &#26631;&#24535;&#65292;&#34920;&#31034;&#22914;&#26524;&#25991;&#20214;&#24050;&#32463;&#23384;&#22312;&#65292;&#21017;&#20250;&#35206;&#30422;&#23427;&#12290;<\/p>\n<\/li>\n<li>\n<p><strong>&#28155;&#21152;&#25991;&#20214;&#21040; ZIP &#25991;&#20214;<\/strong>&#65306;<\/p>\n<pre><code class=\"language-php\">$fileToZip = 'path\/to\/your\/file.txt';\nif ($zip-&gt;addFile($fileToZip)) {\n   echo \"File added successfully to the ZIP file.\";\n} else {\n   echo \"Failed to add file to the ZIP file.\";\n}<\/code><\/pre>\n<p>&#36825;&#34892;&#20195;&#30721;&#23558;&#25351;&#23450;&#30340;&#25991;&#20214;&#65288;&#20363;&#22914; <code>file.txt<\/code>&#65289;&#28155;&#21152;&#21040; ZIP &#25991;&#20214;&#20013;&#12290;&#22914;&#26524;&#25104;&#21151;&#28155;&#21152;&#25991;&#20214;&#65292;&#21017;&#20250;&#36755;&#20986;&ldquo;File added successfully to the ZIP file&#12290;&rdquo;&#65307;&#21542;&#21017;&#65292;&#20250;&#36755;&#20986;&ldquo;Failed to add file to the ZIP file.&rdquo;<\/p>\n<\/li>\n<li>\n<p><strong>&#35774;&#32622;&#21709;&#24212;&#22836;<\/strong>&#65306;<\/p>\n<pre><code class=\"language-php\">$response = new BinaryFileResponse('example.zip');\n$response-&gt;headers-&gt;set('Content-Type', 'application\/zip');\n$response-&gt;headers-&gt;set('Content-Disposition', 'attachment; filename=\"example.zip\"');<\/code><\/pre>\n<p>&#36825;&#34892;&#20195;&#30721;&#21019;&#24314;&#20102;&#19968;&#20010; <code>BinaryFileResponse<\/code> &#23545;&#35937;&#65292;&#24182;&#35774;&#32622;&#20102;&#19968;&#20123;&#24517;&#35201;&#30340;&#21709;&#24212;&#22836;&#12290;<code>Content-Type<\/code> &#35774;&#32622;&#20026; <code>application\/zip<\/code>&#65292;&#34920;&#31034;&#21709;&#24212;&#30340;&#20869;&#23481;&#26159; ZIP &#25991;&#20214;&#12290;<code>Content-Disposition<\/code> &#35774;&#32622;&#20026; <code>attachment; filename=\"example.zip\"<\/code>&#65292;&#34920;&#31034;&#27983;&#35272;&#22120;&#23558;&#20197;&#19979;&#36733;&#26041;&#24335;&#25171;&#24320;&#36825;&#20010;&#25991;&#20214;&#12290;<\/p>\n<\/li>\n<li>\n<p><strong>&#36755;&#20986; ZIP &#25991;&#20214;<\/strong>&#65306;<\/p>\n<pre><code class=\"language-php\">return $response;<\/code><\/pre>\n<p>&#26368;&#21518;&#65292;&#36825;&#34892;&#20195;&#30721;&#36820;&#22238;&#21709;&#24212;&#23545;&#35937;&#65292;&#35302;&#21457;&#27983;&#35272;&#22120;&#19979;&#36733; ZIP &#25991;&#20214;&#12290;<\/p>\n<\/li>\n<\/ol>\n<h3>&#31034;&#20363;<\/h3>\n<p>&#20551;&#35774;&#20320;&#26377;&#19968;&#20010;&#21517;&#20026; <code>file.txt<\/code> &#30340;&#25991;&#20214;&#65292;&#24182;&#19988;&#20320;&#24819;&#22312; Symfony &#24212;&#29992;&#31243;&#24207;&#20013;&#25552;&#20379;&#19968;&#20010;&#19979;&#36733; ZIP &#25991;&#20214;&#30340;&#36335;&#30001;&#65292;&#20320;&#21487;&#20197;&#36825;&#26679;&#37197;&#32622;&#36335;&#30001;&#21644;&#25511;&#21046;&#22120;&#65306;<\/p>\n<pre><code class=\"language-yaml\"># config\/routes.yaml\napp_download_zip:\n    path: \/download-zip\n    controller: AppControllerFileController::downloadZipAction<\/code><\/pre>\n<p>&#28982;&#21518;&#65292;&#24403;&#20320;&#35775;&#38382; <code>\/download-zip<\/code> &#36335;&#30001;&#26102;&#65292;&#20320;&#20250;&#30475;&#21040;&#19968;&#20010;&#19979;&#36733; ZIP &#25991;&#20214;&#30340;&#25353;&#38062;&#65292;&#28857;&#20987;&#35813;&#25353;&#38062;&#21518;&#65292;&#27983;&#35272;&#22120;&#20250;&#33258;&#21160;&#19979;&#36733; <code>example.zip<\/code> &#25991;&#20214;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div><div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--2\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/zp-400x300.jpg\" alt=\"&#40657;&#26495;Bug&#35762;&#24072;\" class=\"wp-image-1849\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">&#40657;&#26495;Bug&#35762;&#24072;<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<body><h2>&#20171;&#32461;<\/h2><p>&#22788;&#29702;&#25991;&#20214;&#19979;&#36733;&#65292;&#23588;&#20854;&#26159;&#21160;&#24577;&#21019;&#24314;&#21644;&#36820;&#22238;&#21387;&#32553;&#21253;&#25991;&#20214;&#30340;&#38656;&#27714;&#22312;Web&#24320;&#21457;&#20013;&#38750;&#24120;&#24120;&#35265;&#12290;&#22312;&#36825;&#31687;&#25945;&#31243;&#20013;&#65292;&#25105;&#20204;&#23558;&#25506;&#35752;&#22914;&#20309;&#22312;Symfony&#24212;&#29992;&#20013;&#29983;&#25104;&#24182;&#36820;&#22238;&#19968;&#20010;&#21387;&#32553;&#21253;&#25991;&#20214;&#12290;Symfony&#26159;&#19968;&#20010;&#24378;&#22823;&#30340;PHP&#26694;&#26550;&#65292;&#25552;&#20379;&#20102;&#36825;&#31181;&#20219;&#21153;&#30340;&#20248;&#38597;&#19988;&#24378;&#22823;&#30340;&#35299;&#20915;&#26041;&#26696;&#12290;<\/p><p>&#22312;&#24320;&#22987;&#20043;&#21069;&#65292;&#35831;&#30830;&#20445;&#24744;&#30340;Symfony&#39033;&#30446;&#24050;&#32463;&#35774;&#32622;&#24182;&#36816;&#34892;&#36215;&#26469;&#12290;&#23545;&#20110;&#26412;&#25351;&#21335;&#32780;&#35328;&#65292;&#20551;&#35774;&#24744;&#23545;Symfony&#30340;&#32467;&#26500;&#21644;&#25511;&#21046;&#22120;&#26377;&#19968;&#20123;&#22522;&#26412;&#30340;&#29702;&#35299;&#12290;<\/p><h2>&#22522;&#26412;&#30340;ZIP&#25991;&#20214;&#21019;&#24314;&#21644;&#19979;&#36733;&#25805;&#20316;<\/h2><p>&#39318;&#20808;&#65292;&#35753;&#25105;&#20204;&#21019;&#24314;&#19968;&#20010;&#31616;&#21333;&#30340;&#21387;&#32553;&#25991;&#20214;&#24182;&#23558;&#20854;&#20316;&#20026;&#21709;&#24212;&#36820;&#22238;&#12290;&#25105;&#20204;&#23558;&#20351;&#29992;&#12290;<code>ZipArchive<\/code>PHP&#25552;&#20379;&#20102;&#21738;&#20123;&#31867;&#65311;<\/p><pre><code>use SymfonyComponentHttpFoundationBinaryFileResponse;\nuse SymfonyComponentHttpFoundationResponseHeaderBag;\nuse ZipArchive;\n\npublic function downloadZipAction()\n{\n    $zip = new ZipArchive();\n    $zipName = tempnam(sys_get_temp_dir(), 'zip');\n    $zip-&gt;open($zipName, ZipArchive::CREATE);\n    $zip-&gt;addFromString('test.txt', 'file content here');\n    $zip-&gt;close();\n\n    $response = new BinaryFileResponse($zipName);\n    $response-&gt;headers-&gt;set('Content-Type', 'application\/zip');\n    $response-&gt;setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, 'archive.zip');\n\n    return $response;\n}\n<\/code><\/pre><p>&#36825;&#27573;&#20195;&#30721;&#29255;&#27573;&#21019;&#24314;&#20102;&#19968;&#20010;&#20020;&#26102;&#30340; ZIP &#25991;&#20214;&#65292;&#28155;&#21152;&#20102;&#19968;&#20010;&#24102;&#26377;&#20869;&#23481;&#30340;&#25991;&#26412;&#25991;&#20214;&#65292;&#24182;&#20351;&#29992; Symfony &#30340;&#36820;&#22238;&#35813;&#25991;&#20214;&#12290;<code>BinaryFileResponse<\/code>&#24744;&#30340;&#29992;&#25143;&#29616;&#22312;&#21487;&#20197;&#19979;&#36733;&#36825;&#20010;&#25991;&#20214;&#20102;&#12290;<code>archive.zip<\/code>&#24403;&#20182;&#20204;&#35775;&#38382;&#19982;&#35813;&#25805;&#20316;&#20851;&#32852;&#30340;&#36335;&#32447;&#26102;&#12290;<\/p><h2>&#39640;&#32423;&#21387;&#32553;&#25991;&#20214;&#29983;&#25104;<\/h2><p>&#22312;&#26356;&#22797;&#26434;&#30340;&#22330;&#26223;&#19979;&#65292;&#21487;&#33021;&#38656;&#35201;&#28155;&#21152;&#22810;&#20010;&#25991;&#20214;&#25110;&#30446;&#24405;&#21040;zip&#12290;&#24744;&#36824;&#38656;&#35201;&#30830;&#20445;&#36873;&#25321;&#30340;&#25991;&#20214;&#23384;&#22312;&#65292;&#24182;&#22788;&#29702;&#21487;&#33021;&#20986;&#29616;&#30340;&#38169;&#35823;&#12290;&#35753;&#25105;&#20204;&#37325;&#26500;&#20195;&#30721;&#20197;&#21019;&#24314;&#19968;&#20010;&#26356;&#21152;&#39640;&#32423;&#30340;zip&#19979;&#36733;&#21151;&#33021;&#65306;<\/p><pre><code>use SymfonyComponentHttpFoundationBinaryFileResponse;\nuse SymfonyComponentHttpFoundationResponseHeaderBag;\nuse SymfonyComponentHttpKernelExceptionNotFoundHttpException;\nuse ZipArchive;\nuse RecursiveIteratorIterator;\nuse RecursiveDirectoryIterator;\n\npublic function downloadAdvancedZipAction()\n{\n    $zip = new ZipArchive();\n    $zipName = tempnam(sys_get_temp_dir(), 'zip');\n\n    if ($zip-&gt;open($zipName, ZipArchive::CREATE) !== true) {\n        throw new RuntimeException('Cannot open ' . $zipName);\n    }\n\n    \/\/ Add multiple files\n    $files = ['path\/to\/file1.txt', 'path\/to\/file2.jpg'];\n    foreach ($files as $file) {\n        if (file_exists($file)) {\n            $zip-&gt;addFile($file, basename($file));\n        } else {\n            throw new NotFoundHttpException('File not found: ' . $file);\n        }\n    }\n\n    \/\/ Add an entire directory\n    $directoryPath = 'path\/to\/directory';\n    if (is_dir($directoryPath)) {\n        $files = new RecursiveIteratorIterator(\n            new RecursiveDirectoryIterator($directoryPath),\n            RecursiveIteratorIterator::LEAVES_ONLY\n        );\n\n        foreach ($files as $name =&gt; $file) {\n            \/\/ Skip directories (they would be added automatically)\n            if (!$file-&gt;isDir()) {\n                \/\/ Get real path for current file\n                $filePath = $file-&gt;getRealPath();\n\n                \/\/ Add current file to archive\n                $zip-&gt;addFile($filePath, $file-&gt;getFilename());\n            }\n        }\n    } else {\n        throw new NotFoundHttpException('Directory not found: ' . $directoryPath);\n    }\n\n    $zip-&gt;close();\n\n    $response = new BinaryFileResponse($zipName);\n    $response-&gt;headers-&gt;set('Content-Type', 'application\/zip');\n    $response-&gt;setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, 'advanced_archive.zip');\n\n    return $response;\n}\n<\/code><\/pre><p>&#35843;&#25972;&#21518;&#30340;&#21160;&#20316;&#21160;&#24577;&#22320;&#23558;&#25968;&#32452;&#20013;&#30340;&#25991;&#20214;&#21644;&#30446;&#24405;&#28155;&#21152;&#21040;&#19968;&#20010;&#26032;&#30340;&#21387;&#32553;&#26723;&#26696;&#20013;&#12290;&#23427;&#20250;&#25171;&#24320;&#19968;&#20010;&#26032;&#20020;&#26102;&#30340;zip&#25991;&#20214;&#65292;&#28982;&#21518;&#24490;&#29615;&#36941;&#21382;&#25991;&#20214;&#21644;&#30446;&#24405;&#65292;&#19968;&#36793;&#28155;&#21152;&#19968;&#36793;&#26816;&#26597;&#25991;&#20214;&#25110;&#30446;&#24405;&#26159;&#21542;&#23384;&#22312;&#12290;&#24403;&#36935;&#21040;&#25991;&#20214;&#25110;&#30446;&#24405;&#19981;&#23384;&#22312;&#30340;&#38382;&#39064;&#26102;&#65292;&#36866;&#24403;&#30340;HTTP&#24322;&#24120;&#20250;&#34987;&#25243;&#20986;&#12290;<\/p><h2>&#38169;&#35823;&#22788;&#29702;&#21644;&#28165;&#29702;&#25805;&#20316;<\/h2><p>&#22312;&#26381;&#21153;&#22120;&#19978;&#21019;&#24314;&#20020;&#26102;&#25991;&#20214;&#21487;&#33021;&#20250;&#21344;&#29992;&#31354;&#38388;&#24182;&#21487;&#33021;&#23548;&#33268;&#23384;&#20648;&#38382;&#39064;&#12290;&#22788;&#29702;&#28165;&#29702;&#36807;&#31243;&#38750;&#24120;&#37325;&#35201;&#12290;&#19968;&#31181;&#26041;&#27861;&#26159;&#22312;&#29992;&#25143;&#24320;&#22987;&#19979;&#36733;&#26102;&#21024;&#38500;&#20020;&#26102;&#25991;&#20214;&#65306;<\/p><pre><code>public function downloadAndCleanupAction()\n{\n    \/\/... [Create zip logic here] ...\n\n    \/\/ Return response and delete file after download is sent\n    $response-&gt;deleteFileAfterSend(true);\n\n    return $response;\n}\n<\/code><\/pre><p>&#23545;&#19981;&#36215;&#65292;&#25105;&#19981;&#26126;&#30333;&#20320;&#30340;&#38382;&#39064;&#65292;&#35831;&#37325;&#26032;&#25551;&#36848;&#19968;&#19979;&#12290;<code>deleteFileAfterSend(true)<\/code>&#26041;&#27861;&#30340;<code>BinaryFileResponse<\/code>&#23545;&#35937;&#30830;&#20445;&#22312;&#21709;&#24212;&#29992;&#25143;&#26102;&#20020;&#26102;&#25991;&#20214;&#20250;&#34987;&#21024;&#38500;&#12290;<\/p><h2>&#32467;&#35770;<\/h2><p>&#36825;&#20010;&#25351;&#21335;&#23637;&#31034;&#20102;&#22914;&#20309;&#22312;Symfony&#24212;&#29992;&#31243;&#24207;&#20013;&#21160;&#24577;&#21019;&#24314;&#21644;&#36820;&#22238;ZIP&#25991;&#20214;&#30340;&#26041;&#27861;&#12290;&#20174;&#31616;&#21333;&#30340;&#25991;&#20214;&#25805;&#20316;&#24320;&#22987;&#65292;&#25105;&#20204;&#36880;&#27493;&#22788;&#29702;&#30446;&#24405;&#12289;&#38169;&#35823;&#31649;&#29702;&#21644;&#33258;&#21160;&#28165;&#29702;&#31561;&#12290;&#25353;&#29031;&#36825;&#37324;&#21015;&#20986;&#30340;&#23454;&#36341;&#36827;&#34892;&#65292;&#20320;&#21487;&#20197;&#39640;&#25928;&#22320;&#23558;ZIP&#25991;&#20214;&#21151;&#33021;&#38598;&#25104;&#21040;&#20320;&#30340;Symfony&#24212;&#29992;&#20013;&#12290;<\/p><\/body>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div><div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--3\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/xygcfznnzczhsdmwydzhsmzzzmddnq-400x300.jpg\" alt=\"&#38271;&#24037;&#30721;&#22900;1523\" class=\"wp-image-2906\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">&#38271;&#24037;&#30721;&#22900;1523<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<p>&#22312; Symfony &#20013;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992; <code>ZipArchive<\/code> &#31867;&#26469;&#21019;&#24314;&#21644;&#22788;&#29702; ZIP &#25991;&#20214;&#12290;&#20197;&#19979;&#26159;&#22914;&#20309;&#20351;&#29992;&#23427;&#36820;&#22238;&#19968;&#20010;ZIP&#25991;&#20214;&#30340;&#20363;&#23376;&#65306;<\/p>\n<ol>\n<li>\n<p>&#39318;&#20808;&#65292;&#20320;&#38656;&#35201;&#30830;&#20445;&#20320;&#24050;&#32463;&#23433;&#35013;&#20102; Symfony&#65292;&#24182;&#19988; Symfony &#19982; ZipArchive &#24211;&#20860;&#23481;&#12290;<\/p>\n<\/li>\n<li>\n<p>&#22312;&#25511;&#21046;&#22120;&#20013;&#65292;&#20320;&#21487;&#20197;&#36825;&#26679;&#20351;&#29992; <code>ZipArchive<\/code> &#26469;&#21019;&#24314;&#24182;&#36820;&#22238;&#19968;&#20010; ZIP &#25991;&#20214;&#65306;<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"language-php\">&lt;?php\n\nuse SymfonyComponentHttpFoundationResponse;\nuse ZipArchive;\n\n\/\/ &#21019;&#24314;&#19968;&#20010;&#26032;&#30340; ZIP &#25991;&#20214;\n$zip = new ZipArchive();\nif ($zip-&gt;open('path\/to\/your\/file.zip', ZipArchive::CREATE) === true) {\n    \/\/ &#28155;&#21152;&#21040; ZIP &#25991;&#20214;&#30340;&#20869;&#23481;\n    $zip-&gt;addFromString('test.txt', 'This is the test content.');\n    $zip-&gt;close();\n\n    \/\/ &#36820;&#22238; ZIP &#25991;&#20214;&#20316;&#20026;&#21709;&#24212;\n    return new Response(file_get_contents('path\/to\/your\/file.zip'));\n} else {\n    throw new Exception(\"Failed to open file for writing.\");\n}<\/code><\/pre>\n<p>&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;&#25105;&#20204;&#39318;&#20808;&#21019;&#24314;&#20102;&#19968;&#20010;&#26032;&#30340; ZIP &#25991;&#20214;&#23545;&#35937; <code>$zip<\/code>&#65292;&#28982;&#21518;&#23581;&#35797;&#23558;&#20854;&#25171;&#24320;&#12290;&#22914;&#26524;&#25171;&#24320;&#25104;&#21151;&#65292;&#25105;&#20204;&#23558;&#28155;&#21152;&#19968;&#20010;&#21517;&#20026; &#8216;test.txt&#8217; &#30340;&#25991;&#20214;&#21040; ZIP &#25991;&#20214;&#20013;&#65292;&#35813;&#25991;&#20214;&#23558;&#21253;&#21547; &#8220;This is the test content.&#8221; &#36825;&#19968;&#34892;&#30340;&#25991;&#26412;&#12290;&#26368;&#21518;&#65292;&#25105;&#20204;&#23558;&#20851;&#38381; ZIP &#25991;&#20214;&#24182;&#23558;&#32467;&#26524;&#35774;&#32622;&#20026;&#19968;&#20010;&#21709;&#24212;&#23545;&#35937;&#12290;<\/p>\n<p>&#27880;&#24847;&#65306;&#36825;&#20010;&#26041;&#27861;&#20551;&#35774;&#20320;&#26377;&#26435;&#38480;&#35775;&#38382;&#25991;&#20214;&#36335;&#24452;&#24182;&#33021;&#22815;&#35835;&#21462;&#23427;&#12290;&#27492;&#22806;&#65292;&#30001;&#20110;&#36825;&#26159;&#19968;&#20010;&#22522;&#26412;&#30340;&#31034;&#20363;&#65292;&#27809;&#26377;&#22788;&#29702;&#38169;&#35823;&#30340;&#24773;&#20917;&#65288;&#20363;&#22914;&#25991;&#20214;&#19981;&#23384;&#22312;&#65289;&#12290;<\/p>\n<p>&#22914;&#26524;&#20320;&#38656;&#35201;&#26356;&#22797;&#26434;&#30340;&#21151;&#33021;&#25110;&#32773;&#24819;&#35201;&#25511;&#21046;&#19968;&#20123;&#32454;&#33410;&#65292;&#27604;&#22914;&#21387;&#32553;&#29305;&#23450;&#30340;&#30446;&#24405;&#32467;&#26500;&#65292;&#37027;&#20040;&#21487;&#33021;&#38656;&#35201;&#26597;&#30475;&#23448;&#26041;&#25991;&#26723;&#25110;&#32773;&#23547;&#25214;&#31532;&#19977;&#26041;&#24211;&#30340;&#24110;&#21161;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Bug&#32534;&#35793;&#29422; &#22312; Symfony &#20013;&#36820;&#22238; ZIP &#25991;&#20214;&#36890;&#24120;&#28041;&#21450;&#20197;&#19979;&#20960;&#20010;&#038;#2749..<\/p>\n","protected":false},"author":1,"featured_media":0,"menu_order":0,"template":"","meta":{"_acf_changed":false},"tags":[],"my1js2nav":[45],"tuisongtax":[],"class_list":["post-1071","my1js","type-my1js","status-publish","hentry","my1js2nav-symfony"],"acf":{"qian_art_seotitle":"","qian_art_seotitle_source":{"label":"SEO\u6807\u9898","type":"text","formatted_value":""},"qian_art_seokws":"","qian_art_seokws_source":{"label":"SEO\u5173\u952e\u8bcd","type":"text","formatted_value":""},"qian_art_stzhong":"","qian_art_stzhong_source":{"label":"\u4e2d | \u77ed\u6807\u9898","type":"text","formatted_value":""}},"_links":{"self":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js\/1071","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js"}],"about":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/types\/my1js"}],"author":[{"embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/users\/1"}],"wp:attachment":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/media?parent=1071"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=1071"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=1071"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=1071"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}