{"id":1063,"date":"2025-06-12T11:45:34","date_gmt":"2025-06-12T03:45:34","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/symfony\/1063.html"},"modified":"2025-06-12T11:45:34","modified_gmt":"2025-06-12T03:45:34","slug":"symfony%e6%a1%86%e6%9e%b6%e4%b8%8b%e6%b5%81%e6%96%87%e4%bb%b6%e5%a4%84%e7%90%86%e7%9a%84%e5%85%a8%e9%9d%a2%e6%8c%87%e5%8d%97%ef%bc%88%e5%90%ab%e7%a4%ba%e4%be%8b%ef%bc%89","status":"publish","type":"my1js","link":"https:\/\/www.zhaozhao123.cn\/php\/my1js\/1063.html","title":{"rendered":"Symfony\u6846\u67b6\u4e0b\u6d41\u6587\u4ef6\u5904\u7406\u7684\u5168\u9762\u6307\u5357\uff08\u542b\u793a\u4f8b\uff09"},"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>&#26631;&#39064;&#65306;Symfony&#26694;&#26550;&#19979;&#27969;&#25991;&#20214;&#22788;&#29702;&#30340;&#20840;&#38754;&#25351;&#21335;&#65288;&#21547;&#31034;&#20363;&#65289;<\/p>\n<h3>&#24341;&#35328;<\/h3>\n<p>&#22312;&#29616;&#20195;Web&#24320;&#21457;&#20013;&#65292;&#22788;&#29702;&#25991;&#20214;&#19978;&#20256;&#21644;&#19979;&#36733;&#26159;&#19968;&#20010;&#24120;&#35265;&#30340;&#38656;&#27714;&#12290; Symfony&#26694;&#26550;&#25552;&#20379;&#20102;&#20016;&#23500;&#30340;&#24037;&#20855;&#26469;&#31616;&#21270;&#36825;&#19968;&#36807;&#31243;&#65292;&#20351;&#20854;&#26356;&#21152;&#39640;&#25928;&#21644;&#26131;&#29992;&#12290;&#26412;&#25991;&#23558;&#35814;&#32454;&#20171;&#32461;&#22914;&#20309;&#22312;Symfony&#26694;&#26550;&#20013;&#20351;&#29992;&#27969;&#25991;&#20214;&#22788;&#29702;&#21151;&#33021;&#12290;<\/p>\n<h3>1. &#23433;&#35013;&#21644;&#37197;&#32622;<\/h3>\n<p>&#39318;&#20808;&#65292;&#30830;&#20445;&#20320;&#30340;&#39033;&#30446;&#24050;&#32463;&#23433;&#35013;&#20102;Symfony&#26694;&#26550;&#12290;&#22914;&#26524;&#27809;&#26377;&#23433;&#35013;&#65292;&#21487;&#20197;&#21442;&#32771;&#23448;&#26041;&#25991;&#26723;&#36827;&#34892;&#23433;&#35013;&#65306;<\/p>\n<pre><code class=\"language-bash\">composer create-project symfony\/skeleton my_project\ncd my_project<\/code><\/pre>\n<p>&#28982;&#21518;&#65292;&#37197;&#32622;&#20320;&#30340;<code>app\/config\/packages\/services.yaml<\/code>&#25991;&#20214;&#20197;&#21551;&#29992;&#27969;&#25991;&#20214;&#22788;&#29702;&#65306;<\/p>\n<pre><code class=\"language-yaml\">services:\n    app.file_uploader:\n        class: AppServiceFileUploader\n        arguments: ['@filesystem']<\/code><\/pre>\n<h3>2. &#21019;&#24314;&#25991;&#20214;&#19978;&#20256;&#31867;<\/h3>\n<p>&#21019;&#24314;&#19968;&#20010;&#26381;&#21153;&#31867;&#26469;&#22788;&#29702;&#25991;&#20214;&#19978;&#20256;&#65306;<\/p>\n<pre><code class=\"language-php\">\/\/ src\/Service\/FileUploader.php\n\nnamespace AppService;\n\nuse SymfonyComponentHttpFoundationFileUploadedFile;\nuse SymfonyComponentHttpFoundationResponse;\n\nclass FileUploader\n{\n    private $fileSystem;\n\n    public function __construct($fileSystem)\n    {\n        $this-&gt;fileSystem = $fileSystem;\n    }\n\n    public function upload(UploadedFile $file, string $destinationPath)\n    {\n        \/\/ &#26816;&#26597;&#25991;&#20214;&#26159;&#21542;&#20026;&#31354;\n        if ($file-&gt;isEmpty()) {\n            throw new InvalidArgumentException('The uploaded file was empty.');\n        }\n\n        \/\/ &#33719;&#21462;&#25991;&#20214;&#21517;\n        $fileName = $file-&gt;getClientOriginalName();\n\n        \/\/ &#26500;&#24314;&#30446;&#26631;&#36335;&#24452;\n        $targetPath = $destinationPath . '\/' . $fileName;\n\n        \/\/ &#31227;&#21160;&#25991;&#20214;&#21040;&#30446;&#26631;&#36335;&#24452;\n        try {\n            $file-&gt;moveTo($targetPath);\n            return Response::create(null, 200, [\n                'Content-Type' =&gt; $file-&gt;guessMimeType(),\n            ]);\n        } catch (Exception $e) {\n            throw new RuntimeException('Failed to upload the file.', 500, $e);\n        }\n    }\n}<\/code><\/pre>\n<h3>3. &#20351;&#29992;&#25991;&#20214;&#19978;&#20256;&#31867;<\/h3>\n<p>&#22312;&#25511;&#21046;&#22120;&#20013;&#20351;&#29992;&#19978;&#36848;&#26381;&#21153;&#31867;&#26469;&#22788;&#29702;&#25991;&#20214;&#19978;&#20256;&#65306;<\/p>\n<pre><code class=\"language-php\">\/\/ src\/Controller\/UploadController.php\n\nnamespace AppController;\n\nuse AppServiceFileUploader;\nuse SymfonyBundleFrameworkBundleControllerAbstractController;\nuse SymfonyComponentHttpFoundationRequest;\nuse SymfonyComponentHttpFoundationResponse;\n\nclass UploadController extends AbstractController\n{\n    private $fileUploader;\n\n    public function __construct(FileUploader $fileUploader)\n    {\n        $this-&gt;fileUploader = $fileUploader;\n    }\n\n    public function handleUpload(Request $request)\n    {\n        \/\/ &#26816;&#26597;&#35831;&#27714;&#26159;&#21542;&#21253;&#21547;&#25991;&#20214;\n        if (!$request-&gt;hasFile('file')) {\n            throw new InvalidArgumentException('No file was provided.');\n        }\n\n        \/\/ &#33719;&#21462;&#25991;&#20214;\n        $file = $request-&gt;getFile('file');\n\n        \/\/ &#22788;&#29702;&#25991;&#20214;\n        $response = $this-&gt;fileUploader-&gt;upload($file, 'uploads');\n\n        return $response;\n    }\n}<\/code><\/pre>\n<h3>4. &#37197;&#32622;&#36335;&#30001;<\/h3>\n<p>&#22312;<code>config\/routes.yaml<\/code>&#20013;&#28155;&#21152;&#36335;&#30001;&#65306;<\/p>\n<pre><code class=\"language-yaml\"># config\/routes.yaml\n\napp.upload:\n    path: \/upload\n    methods: POST\n    controller: AppControllerUploadController::handleUpload<\/code><\/pre>\n<h3>5. &#27979;&#35797;&#25991;&#20214;&#19978;&#20256;<\/h3>\n<p>&#21551;&#21160;&#20320;&#30340;Symfony&#24212;&#29992;&#24182;&#27979;&#35797;&#25991;&#20214;&#19978;&#20256;&#21151;&#33021;&#65306;<\/p>\n<pre><code class=\"language-bash\">php bin\/console server:run<\/code><\/pre>\n<p>&#25171;&#24320;&#27983;&#35272;&#22120;&#65292;&#35775;&#38382;<code>http:\/\/localhost:8000\/upload<\/code>&#65292;&#36873;&#25321;&#19968;&#20010;&#25991;&#20214;&#36827;&#34892;&#19978;&#20256;&#65292;&#20320;&#24212;&#35813;&#20250;&#30475;&#21040;&#19968;&#20010;&#21709;&#24212;&#65292;&#25351;&#31034;&#25991;&#20214;&#24050;&#25104;&#21151;&#19978;&#20256;&#12290;<\/p>\n<h3>&#24635;&#32467;<\/h3>\n<p>&#36890;&#36807;&#20197;&#19978;&#27493;&#39588;&#65292;&#20320;&#21487;&#20197;&#22312;Symfony&#26694;&#26550;&#20013;&#23454;&#29616;&#27969;&#25991;&#20214;&#22788;&#29702;&#21151;&#33021;&#12290;&#36825;&#20010;&#26041;&#27861;&#19981;&#20165;&#31616;&#21333;&#39640;&#25928;&#65292;&#32780;&#19988;&#26131;&#20110;&#25193;&#23637;&#21644;&#32500;&#25252;&#12290;&#24076;&#26395;&#36825;&#31687;&#25351;&#21335;&#23545;&#20320;&#26377;&#25152;&#24110;&#21161;&#65281;<\/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>&#27010;&#35272;<\/h2><p>&#27969;&#20256;&#36755;&#25991;&#20214;&#24847;&#21619;&#30528;&#23558;&#20854;&#20998;&#22359;&#21457;&#36865;&#65292;&#32780;&#19981;&#26159;&#19968;&#27425;&#24615;&#21152;&#36733;&#21040;&#20869;&#23384;&#20013;&#12290;&#36825;&#31181;&#26041;&#27861;&#23545;&#20110;&#22788;&#29702;&#22823;&#22411;&#25991;&#20214;&#33267;&#20851;&#37325;&#35201;&#65292;&#22240;&#20026;&#23427;&#36991;&#20813;&#20102;&#22823;&#37327;&#20869;&#23384;&#30340;&#20351;&#29992;&#21644;&#28508;&#22312;&#30340;&#26381;&#21153;&#22120;&#23849;&#28291;&#38382;&#39064;&#12290;<\/p><p>&#22788;&#29702;&#32593;&#39029;&#24212;&#29992;&#20013;&#30340;&#25991;&#20214;&#27969;&#20256;&#36755;&#25928;&#29575;&#33267;&#20851;&#37325;&#35201;&#65292;&#20197;&#20248;&#21270;&#24615;&#33021;&#24182;&#25552;&#20379;&#27969;&#30021;&#30340;&#29992;&#25143;&#20307;&#39564;&#12290;&#22312;PHP&#29983;&#24577;&#31995;&#32479;&#20013;&#65292;Symfony&#26694;&#26550;&#25552;&#20379;&#20102;&#24378;&#22823;&#30340;&#24037;&#20855;&#26469;&#21521;&#29992;&#25143;&#27969;&#24335;&#20256;&#36755;&#25991;&#20214;&#12290;&#22312;&#36825;&#31687;&#25351;&#21335;&#20013;&#65292;&#25105;&#20204;&#23558;&#25506;&#35752;&#22914;&#20309;&#20351;&#29992;Symfony&#20869;&#32622;&#30340;&#21151;&#33021;&#26469;&#27969;&#24335;&#20256;&#36755;&#25991;&#20214;&#12289;&#31649;&#29702;&#21709;&#24212;&#20197;&#21450;&#22788;&#29702;&#22823;&#37327;&#36755;&#20986;&#25968;&#25454;&#32780;&#19981;&#20351;&#26381;&#21153;&#22120;&#36164;&#28304;&#19981;&#22570;&#37325;&#36127;&#12290;<\/p><h2>&#35774;&#32622;&#24744;&#30340;&#29615;&#22659;<\/h2><p>&#22312;&#24320;&#22987;&#20043;&#21069;&#65292;&#35831;&#30830;&#20445;&#24744;&#24050;&#32463;&#23433;&#35013;&#20102;&#19968;&#20010;&#25903;&#25345;&#27969;&#30340;Symfony&#29256;&#26412;&#65288;&#36890;&#24120;&#20026;Symfony 3.4+&#65289;&#12290;&#22914;&#26524;&#24744;&#20351;&#29992;&#30340;&#26159;Symfony Flex&#65292;&#21487;&#20197;&#36890;&#36807;Composer&#36731;&#26494;&#28155;&#21152;&#20219;&#20309;&#24517;&#35201;&#30340;&#32452;&#20214;&#65306;<\/p><pre><code>$ composer require symfony\/http-foundation<\/code><\/pre><h2>&#27969;&#24335;&#25991;&#20214;&#21709;&#24212;<\/h2><p>&#20026;&#20102;&#22312;Symfony&#20013;&#21019;&#24314;&#27969;&#24335;&#21709;&#24212;&#65292;&#20320;&#21487;&#20197;&#21033;&#29992;&#23427;&#12290;<code>StreamedResponse<\/code>&#23454;&#29616;&#19968;&#20010;&#22522;&#26412;&#30340;&#25991;&#20214;&#27969;&#36335;&#30001;&#38656;&#35201;&#36825;&#26679;&#20570;&#65306;<\/p><pre><code>use SymfonyComponentHttpFoundationStreamedResponse;\nuse SymfonyComponentRoutingAnnotationRoute;\n\n\/**\n * @Route(\"ile\/stream\", name=\"file_stream\")\n *\/\npublic function streamAction()\n{\n    $response = new StreamedResponse(function () {\n        \/\/ Read the file in a stream fashion\n        $handle = fopen('path\/to\/the\/large\/file.txt', 'rb');\n        while (!feof($handle)) {\n            echo fread($handle, 1024);\n            flush();\n        }\n        fclose($handle);\n    });\n\n    return $response;\n}<\/code><\/pre><p>&#21311;&#21517;&#20989;&#25968;&#22312;&hellip;&hellip;<code>StreamedResponse<\/code>&#35774;&#32622;&#25991;&#20214;&#20026;&#20998;&#22359;&#35835;&#21462;&#21644;&#36755;&#20986;&#65292;&#20854;&#20013;&ldquo;1024&rdquo;&#34920;&#31034;&#27599;&#22359;&#30340;&#23383;&#33410;&#25968;&#12290;<\/p><h2>&#35774;&#32622;&#21709;&#24212;&#22836;&#20197;&#27491;&#30830;&#30340;&#26041;&#24335;<\/h2><p>&#35774;&#32622;&#22836;&#20449;&#24687;&#22914;<code>Content-Type<\/code>and<code>Content-Disposition<\/code>&#25351;&#31034;&#27983;&#35272;&#22120;&#22914;&#20309;&#22788;&#29702;&#35813;&#25991;&#20214;&#65306;<\/p><pre><code>$response-&gt;headers-&gt;set('Content-Type', 'text\/plain');\n$response-&gt;headers-&gt;set('Content-Disposition', 'attachment; filename=\"file.txt\"');<\/code><\/pre><h2>&#39640;&#32423;&#29992;&#27861;<\/h2><p>&#20026;&#20102;&#22686;&#24378;&#25511;&#21046;&#65292;&#24314;&#35758;&#20351;&#29992;Symfony&#30340;&#29305;&#24615;&#12290;<code>BinaryFileResponse<\/code>&#20320;&#22909;&#65281;&#26377;&#20160;&#20040;&#25105;&#21487;&#20197;&#24110;&#21161;&#24744;&#30340;&#21527;&#65311;<\/p><pre><code>use SymfonyComponentHttpFoundationBinaryFileResponse;\n\npublic function downloadAction()\n{\n    $path = 'path\/to\/your\/file.pdf';\n    return new BinaryFileResponse($path);\n}<\/code><\/pre><p><code>BinaryFileResponse<\/code>&#20248;&#21270;HTTP&#22836;&#24182;&#20197;&#26368;&#39640;&#25928;&#30340;&#26041;&#24335;&#20026;&#32473;&#23450;&#30340;&#23458;&#25143;&#31471;&#20132;&#20184;&#25991;&#20214;&#12290;&#23427;&#36824;&#21487;&#20197;&#22788;&#29702;&#26029;&#28857;&#32493;&#20256;&#21644;&#20132;&#20184;&#37096;&#20998;&#20869;&#23481;&#12290;<\/p><h2>&#22788;&#29702;&#22823;&#22411;&#25991;&#20214;<\/h2><p>&#20026;&#20102;&#30830;&#20445;&#22788;&#29702;&#22823;&#37327;&#25991;&#20214;&#26102;Web&#26381;&#21153;&#22120;&#19981;&#20250;&#32791;&#23613;&#20869;&#23384;&#65292;&#21487;&#20197;&#20351;&#29992;&#12290;<code>fopen<\/code>&#20197;&#20108;&#36827;&#21046;&#35835;&#21462;&#27169;&#24335;&#36755;&#20986;&#25991;&#20214;&#65292;&#20998;&#22359;&#36827;&#34892;&#65306;<\/p><pre><code>use SymfonyComponentHttpFoundationStreamedResponse;\n\npublic function largeFileDownloadAction()\n{\n    $response = new StreamedResponse();\n    $response-&gt;setCallback(function () {\n        $handle = fopen('path\/to\/large\/file.iso', 'rb');\n        while (!feof($handle)) {\n            echo fread($handle, 8192);\n            flush();\n        }\n        fclose($handle);\n    });\n    $response-&gt;headers-&gt;set('Content-Type', 'application\/octet-stream');\n    $response-&gt;headers-&gt;set('Content-Disposition', 'attachment; filename=\"large_file.iso\"');\n    return $response;\n}<\/code><\/pre><h2>&#24615;&#33021;&#25552;&#31034;<\/h2><p>&#35760;&#24471;&#21578;&#35785;&#20320;&#30340;Web&#26381;&#21153;&#22120;&#21551;&#29992;&#27969;&#23186;&#20307;&#26102;&#20851;&#38381;&#32531;&#20914;&#65306;<\/p><pre><code>fastcgi_buffering off;<\/code><\/pre><p>&#27492;&#22806;&#65292;&#36890;&#36807;&#20351;&#29992;Symfony&#30340;&#23433;&#20840;&#21151;&#33021;&#26469;&#38145;&#23450;&#24212;&#29992;&#31243;&#24207;&#30340;&#23433;&#20840;&#24615;&#20197;&#38450;&#27490;&#26410;&#32463;&#25480;&#26435;&#30340;&#25991;&#20214;&#35775;&#38382;&#12290;<\/p><h2>&#32467;&#35770;<\/h2><p>&#20351;&#29992;Symfony&#30340;&#21709;&#24212;&#31867;&#26469;&#27969;&#24335;&#20256;&#36755;&#25991;&#20214;&#21487;&#20197;&#26174;&#33879;&#25552;&#39640;&#22788;&#29702;&#25991;&#20214;&#19979;&#36733;&#26102;&#30340;&#24615;&#33021;&#21644;&#21487;&#38752;&#24615;&#12290;&#20174;&#36825;&#37324;&#24320;&#22987;&#65292;&#24744;&#21487;&#20197;&#32487;&#32493;&#35752;&#35770;&#30456;&#20851;&#20869;&#23481;&#12290;<code>StreamedResponse<\/code>&#23545;&#20110;&#31616;&#21333;&#30340;&#38656;&#35201;&#21644;&#25644;&#23478;&#26469;&#35828;&#65292;&#36825;&#26159;&#19968;&#20010;&#19981;&#38169;&#30340;&#36873;&#25321;&#12290;<code>BinaryFileResponse<\/code>&#23545;&#20110;&#26356;&#39640;&#32423;&#30340;&#25511;&#21046;&#65292;&#20801;&#35768;&#37319;&#29992;&#21487;&#25193;&#23637;&#25991;&#20214;&#27969;&#20256;&#36755;&#26041;&#27861;&#65292;&#20197;&#38450;&#27490;&#24120;&#35265;&#30340;&#20869;&#23384;&#38480;&#21046;&#38382;&#39064;&#12290;<\/p><p>&#26368;&#37325;&#35201;&#30340;&#22312;&#20110;&#29702;&#35299;&#29992;&#20363;&#24182;&#36873;&#25321;&#26082;&#33021;&#28385;&#36275;&#38656;&#27714;&#21448;&#33021;&#20248;&#21270;&#26381;&#21153;&#22120;&#36164;&#28304;&#21033;&#29992;&#30340;&#26041;&#27861;&#12290;&#20973;&#20511;&#36825;&#20221;&#25351;&#21335;&#65292;&#20320;&#24212;&#35813;&#33021;&#22815;&#24212;&#23545;&#22823;&#22810;&#25968;&#22312;Symfony&#24320;&#21457;&#36807;&#31243;&#20013;&#36935;&#21040;&#30340;&#25991;&#20214;&#27969;&#20256;&#36755;&#24773;&#20917;&#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>Symphony &#26159;&#19968;&#27454;&#27969;&#34892;&#30340; PHP &#24320;&#21457;&#26694;&#26550;&#65292;&#24191;&#27867;&#29992;&#20110;&#26500;&#24314;&#20225;&#19994;&#32423;&#24212;&#29992;&#31243;&#24207;&#12290;&#20854;&#20013;&#65292;&#27969;&#25991;&#20214;&#22788;&#29702;&#26159; Symphony &#20013;&#30340;&#19968;&#39033;&#20851;&#38190;&#21151;&#33021;&#65292;&#23427;&#20801;&#35768;&#24320;&#21457;&#32773;&#20197;&#39640;&#25928;&#30340;&#26041;&#24335;&#25805;&#20316;&#21644;&#31649;&#29702;&#25991;&#20214;&#31995;&#32479;&#12290;<\/p>\n<h3>&#27969;&#25991;&#20214;&#30340;&#22522;&#26412;&#27010;&#24565;<\/h3>\n<p>&#22312; Symfony &#20013;&#65292;&#27969;&#25991;&#20214;&#26159;&#19968;&#31181;&#29305;&#27530;&#30340;&#25968;&#25454;&#31867;&#22411;&#65292;&#23427;&#21487;&#20197;&#34920;&#31034;&#20174;&#25991;&#20214;&#35835;&#21462;&#25968;&#25454;&#30340;&#36807;&#31243;&#12290;&#20363;&#22914;&#65292;&#24403;&#20320;&#20351;&#29992; <code>file_get_contents()<\/code> &#20989;&#25968;&#26469;&#33719;&#21462;&#25991;&#20214;&#20869;&#23481;&#26102;&#65292;&#23454;&#38469;&#19978;&#23601;&#26159;&#23545;&#27969;&#25991;&#20214;&#36827;&#34892;&#30340;&#25805;&#20316;&#12290;&#27969;&#25991;&#20214;&#25552;&#20379;&#20102;&#19968;&#31181;&#26356;&#31616;&#21333;&#30340;&#26041;&#24335;&#26469;&#25805;&#20316;&#25991;&#20214;&#65292;&#32780;&#19981;&#38656;&#35201;&#25285;&#24515;&#25991;&#20214;&#30340;&#23454;&#38469;&#32467;&#26500;&#12290;<\/p>\n<h3>&#20351;&#29992;&#27969;&#25991;&#20214;&#30340;&#20248;&#21183;<\/h3>\n<ul>\n<li><strong>&#25928;&#29575;&#39640;<\/strong>&#65306;&#19982;&#20256;&#32479;&#30340;&#25991;&#20214;&#35835;&#21462;&#26041;&#27861;&#30456;&#27604;&#65292;&#20351;&#29992;&#27969;&#21487;&#20197;&#25552;&#39640;&#24615;&#33021;&#12290;<\/li>\n<li><strong>&#28789;&#27963;&#24615;&#24378;<\/strong>&#65306;&#27969;&#25991;&#20214;&#20801;&#35768;&#20320;&#30452;&#25509;&#20174;&#25991;&#20214;&#20013;&#35835;&#21462;&#25968;&#25454;&#65292;&#24182;&#19988;&#21487;&#20197;&#26681;&#25454;&#38656;&#35201;&#35843;&#25972;&#35835;&#21462;&#27169;&#24335;&#12290;<\/li>\n<li><strong>&#26131;&#20110;&#35843;&#35797;<\/strong>&#65306;&#36890;&#36807;&#26597;&#30475;&#25991;&#20214;&#30340;&#20869;&#23481;&#65292;&#20320;&#21487;&#20197;&#26356;&#23481;&#26131;&#22320;&#23450;&#20301;&#38382;&#39064;&#25152;&#22312;&#12290;<\/li>\n<\/ul>\n<h3>&#27969;&#25991;&#20214;&#22788;&#29702;&#30340;&#27969;&#31243;<\/h3>\n<ol>\n<li><strong>&#21019;&#24314;&#27969;<\/strong>&#65306;&#20351;&#29992; <code>fopen<\/code> &#20989;&#25968;&#25171;&#24320;&#25991;&#20214;&#65292;&#28982;&#21518;&#35843;&#29992; <code>fgetcsv()<\/code> &#25110;&#20854;&#20182;&#20989;&#25968;&#23558;&#25968;&#25454;&#20889;&#20837;&#27969;&#12290;<\/li>\n<li><strong>&#22788;&#29702;&#27969;<\/strong>&#65306;&#26681;&#25454;&#38656;&#27714;&#23545;&#25968;&#25454;&#36827;&#34892;&#35299;&#26512;&#12289;&#36807;&#28388;&#31561;&#25805;&#20316;&#12290;<\/li>\n<li><strong>&#20851;&#38381;&#27969;<\/strong>&#65306;&#30830;&#20445;&#25152;&#26377;&#36164;&#28304;&#34987;&#27491;&#30830;&#20851;&#38381;&#65292;&#20197;&#20415;&#37322;&#25918;&#19981;&#24517;&#35201;&#30340;&#20869;&#23384;&#21344;&#29992;&#12290;<\/li>\n<\/ol>\n<h4>&#31034;&#20363;&#20195;&#30721;&#65306;<\/h4>\n<pre><code class=\"language-php\">\/\/ &#25171;&#24320;&#24182;&#35835;&#21462; CSV &#25991;&#20214;\n$stream = fopen('path\/to\/file.csv', 'r');\nwhile (($data = fgetcsv($stream)) !== false) {\n    \/\/ &#22788;&#29702;&#27599;&#19968;&#34892;&#25968;&#25454;\n    foreach ($data as $row) {\n        echo \"Row: \" . implode(', ', $row) . \"n\";\n    }\n}\nfclose($stream);<\/code><\/pre>\n<h3>&#27880;&#24847;&#20107;&#39033;<\/h3>\n<ul>\n<li><strong>&#23433;&#20840;<\/strong>: &#35831;&#30830;&#20445;&#22312;&#20351;&#29992;&#27969;&#20043;&#21069;&#39564;&#35777;&#25991;&#20214;&#26159;&#21542;&#23384;&#22312;&#65292;&#36991;&#20813;&#24847;&#22806;&#21024;&#38500;&#25110;&#20462;&#25913;&#25991;&#20214;&#12290;<\/li>\n<li><strong>&#24615;&#33021;<\/strong>: &#22312;&#22823;&#22411;&#39033;&#30446;&#20013;&#65292;&#23613;&#37327;&#20943;&#23569;&#23545;&#27969;&#25991;&#20214;&#30340;&#20351;&#29992;&#65292;&#22240;&#20026;&#23427;&#20204;&#21487;&#33021;&#20250;&#23548;&#33268;&#20869;&#23384;&#27844;&#28431;&#12290;<\/li>\n<\/ul>\n<p>&#36890;&#36807;&#19978;&#36848;&#25351;&#21335;&#65292;&#24744;&#24212;&#35813;&#33021;&#22815;&#29702;&#35299;&#21644;&#24212;&#29992;&#27969;&#25991;&#20214;&#22788;&#29702;&#22312; Symfony &#24212;&#29992;&#31243;&#24207;&#20013;&#30340;&#21508;&#31181;&#24212;&#29992;&#22330;&#26223;&#12290;&#22914;&#26524;&#38656;&#35201;&#36827;&#19968;&#27493;&#30340;&#24110;&#21161;&#65292;&#35831;&#38543;&#26102;&#25552;&#38382;&#65281;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Bug&#32534;&#35793;&#29422; &#26631;&#39064;&#65306;Symfony&#26694;&#26550;&#19979;&#27969;&#25991;&#20214;&#22788;&#29702;&#30340;&#20840;&#38754;&#25351;&#038;#213..<\/p>\n","protected":false},"author":1,"featured_media":0,"menu_order":0,"template":"","meta":{"_acf_changed":false},"tags":[],"my1js2nav":[45],"tuisongtax":[],"class_list":["post-1063","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\/1063","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=1063"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=1063"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=1063"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=1063"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}