在Zend中保存文件

时间:2013-06-04 11:20:17

标签: php zend-framework save

我正在尝试保存我在zend中编辑的文件。实际上这是document.xml,是.docx ducument的一部分。我带一个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~  
...

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

您知道如何摆脱这种观点/布局内容吗? 并且只获取文件。

1 个答案:

答案 0 :(得分:0)

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

// Both layout and view renderer should be disabled
Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer')->setNoRender(true);
Zend_Layout::getMvcInstance()->disableLayout();