-1

我目前正在使用 cakephp,并且正在生成一个 word 文档。我的问题是如何将生成的文档放在我的 Web 根目录上而不是作为下载文件。

4

2 回答 2

0

我猜你正在使用一个动作来生成一个文档,该文档将输出到浏览器。

您应该使用输出缓冲来“捕获”输出,然后将其写入文件,或者将文档数据写入字符串,然后将该字符串写入服务器上的文件。

编辑:PHPWord 有一个 SAVE 方法。在您的操作中,您可以将文档保存到某个位置,但输出其他内容,即成功通知。这样,您的操作只会生成文件:

public function generateWordDocument(){
//... your word file creation...
    $wordDocumentLocation = TMP . 'word_files/';
    $objWriter = PHPWord_IOFactory::createWriter($PHPWord, 'Word2007');
    $objWriter->save($wordDocumentLocation . 'helloWorld.docx');
    $this->Session->setFlash('Document generated!');
    $this->redirect(array('action'=>'index')); //or wherever you want
}

如果要保护该文件,可以将文件保存到“安全”文件夹(这可以是“app/webroot”文件夹之外的文件夹,也可以是受 .htaccess 拒绝所有指令保护的文件夹),然后使用另一个操作,例如“getWordDocument”:

function getWordDocument($documentName){
    $wordDocumentLocation = TMP . 'word_files/';
    if (file_exists($wordDocumentLocation . $documentName)) { //this is not really the safest way of doing it
         $fp = fopen($wordDocumentLocation . $documentName, 'rb');
         header("Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document");
         header("Content-Length: " . filesize($wordDocumentLocation . $documentName));
         fpassthru($fp);
         exit();
    }
}

请注意,此代码仅用于“掌握概念”,绝不安全或最佳。

于 2012-10-02T07:25:29.493 回答
0

我认为您想在 webroot 中添加文件,但公共用户无法下载,
您有几种方法:
- 使用 .htaccess 保护文件夹(如 Js 文件夹)
- 在 app 文件夹中创建新文件夹,如 webroot 并将文件放入其中
- 使用cakephp 中的调度程序过滤器:http: //book.cakephp.org/2.0/en/development/dispatch-filters.html
和 ....

于 2012-10-02T09:44:43.480 回答