我正在使用cakephp,我正在生成一个word文档。我的问题是如何将生成的文档放在我的Web根目录而不是下载。
答案 0 :(得分:0)
我猜你正在使用一个动作来生成一个文档,该文档会输出到浏览器。
您应该使用output buffering来“捕获”输出,然后将其写入文件,或者将文档数据写入字符串,并将该字符串写入服务器上的文件。
编辑: 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();
}
}
请注意,此代码仅用于“掌握概念”,绝不是安全或最佳的。
答案 1 :(得分:0)
我认为你想在webroot中添加文件,但不能为公共用户下载,
你有几种方法:
- 使用.htaccess保护文件夹(与Js文件夹一样)
- 在webroot等app文件夹中创建新文件夹,并将文件放入其中
- 在cakephp中使用Dispatcher Filters:http://book.cakephp.org/2.0/en/development/dispatch-filters.html
和....