1

我正在尝试保存我在 zend 中编辑的文件。实际上就是document.xml,是.docx 文件的一部分。我拿了一个 docx 文件,提取 document.xml,对内容进行了一些更改,并希望显示弹出对话框以保存新文件或打开它。
结果几乎没问题,但我收到的不是 zip 包,而是一个带有 zip 扩展名的文本文件,在内容中我可以找到实际上是压缩文件,但在视图/布局内容中。
我的代码如下:

$zip = New ZipArchive();
   $newReportFilename = "Report_" . date('Y-m-d_H-i-s') . ".docx";
   $dir = getcwd();
   $templateLocation = "$dir\\report_template.docx";
   $tempFile = "$dir\\$newReportFilename";
       copy($templateLocation,$tempFile);

$zip->open($tempFile);
$fp = $zip->getStream("word/document.xml");
    while (!feof($fp)) {
        $fileContent .= fread($fp, 2);
    }

fclose($fp);   
$fileContent = "... some xml content ...";

$zip->addFromString("word/document.xml", $fileContent);
$zip->close()

header("Content-Type: application/zip");
header("Content-Length: " . filesize("$dir\\$newReportFilename"));
header("Content-Disposition: attachment; filename=\"Reportfile.zip\"");
readfile("$dir\\$newReportFilename");  

我在输出文件中收到这样的东西:

... 
<form id="createReport" name="createReport" enctype="application/x-www-form-urlencoded" method="post" action=""><dl class="zend_form">
<dt id="runId-label"><label for="runId" class="optional">Run ID</label></dt>
<dd id="runId-element">
<input type="text" name="runId" id="runId" value="81"></dd>
<dt id="submit-label">&#160;</dt><dd id="submit-element">
<input type="submit" name="submit" id="submit" value="Dalej"></dd></dl></form>okPK¶     ! 8+-?¦  s   [Content_Types].xml ó(                                                                                         ¦V-n¦0+F?+¥éó¦£C¦$@¦¤á+ò-û/Éd-¦v,¡X(YGF"@vf+3+-=~oM±1injvS-XNzѦªf++-»¼H(£¦;¿++_}¦¦\ñé¬]¬+1|p<+-Xæ*+-¢+G+Énpå! ë=¦+GÄKnûÿ1+j·HóVP<ëê¤-¤±Q±+{t!U¦èn]]ª«Ö-h)Éä=gº+HK¯¦Zé=rgë¬-p!z )--¼¬zF/Ü»û?á§;â+-=id+-hw§¬7=+në=⦣ßk¢¢öƒ¤+¦V8-nf+&éIgE+¥Y§Uv¢¦:ñæ>ì¢=+¯ï&˜ì+++p+fN/Op;¦@ñt||+zFI¤fÄ+w+ô(a+L=vBô@~=Eº|^mS9VáJv 5(+üê¶Ç+-  
y8°²-âxs)±-I~  
...

对文本文件的一些实验只给了我相同的结果,即在我得到的文件中,我看到了视图/布局内容以及我给出的一些文本。
当我将文件保存在磁盘中时,整个编辑和压缩工作正常,但我希望用户通过另存为对话框来决定如何处理。

你知道如何摆脱这个视图/布局内容吗?
并仅获取文件。

4

1 回答 1

0

答案很明显。需要禁用渲染器和布局。

// Both layout and view renderer should be disabled
Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer')->setNoRender(true);
Zend_Layout::getMvcInstance()->disableLayout();
于 2013-06-06T13:23:54.877 回答