2014-09-02 70 views
0

我正在尝试将PHPPowerPoint添加到我的其中一个工具中。我添加了PHPPowerPoint需要的所有文件,并将下载链接写入正确的页面,但是当我尝试下载它时,它告诉我我没有访问该文件的许可证。 我试图手动更改许可证,但没有任何更改,每次使用默认许可证PHP创建一个新文件时也是如此。 我试图使用chmod,但没有任何变化。 我也尝试chgrp和chown来更改所有者(即“守护进程”)。下载刚刚在PHP中创建的PowerPoint

这很奇怪,因为当我从工具中使用它时,只用创建PP文件的代码,一切都可以使用此许可证。

我想添加PP文件下载的工具是用codeigniter编码的。

+0

我认为你必须设置umask。你的答案是[这里](http://stackoverflow.com/questions/16672429/how-to-set-default-permissions-for-new-files-created-with-php) – 2014-09-02 14:12:08

+0

不知道你为什么需要写到磁盘输出一个简报。 – amphetamachine 2014-09-02 14:27:04

回答

0

您可以使用下载帮手

Download Helper允许您将数据下载到桌面。

加载此助手

该辅助用下面的代码加载:

$this->load->helper('download'); 

下列功能是可用的:

force_download('filename', 'data') 

生成服务器头迫使数据被下载到你的桌面。有用的文件下载。第一个参数是要下载文件的名称,第二个参数是文件数据。例如:

$data = 'Here is some text!'; 
$name = 'mytext.txt'; 

force_download($ name,$ data); 如果你想下载从服务器现有的文件,你需要将文件读入一个字符串:

$data = file_get_contents("/path/to/photo.jpg"); // Read the file's contents 
$name = 'myphoto.jpg'; 

force_download($name, $data); 
+0

什么是下载帮手?它是PHPPowerPoint的一部分吗? – amphetamachine 2014-09-02 14:37:39

+0

这是一个codeigniter助手 – Otto 2014-09-02 15:51:01

0

我做了下载.pdf文件的功能,因为它是在PHP核心, 这里它的示例代码

$path = "path of your file"; 
$fullPath = $path.$_GET['fnm']; 

if ($fd = fopen ($fullPath, "r")) { 
    $fsize = filesize($fullPath); 
    $path_parts = pathinfo($fullPath); 
    $ext = strtolower($path_parts["extension"]); 
    switch ($ext) { 
     case "pdf": 
     header("Content-type: application/pdf"); // add here more headers for diff. extensions 
     header("Content-Disposition: attachment; filename=\"".$path_parts["basename"]."\""); // use 'attachment' to force a download 
     break; 
    default; 
     header("Content-type: application/octet-stream"); 
     header("Content-Disposition: filename=\"".$path_parts["basename"]."\""); 
    } 
    header("Content-length: $fsize"); 
    header("Cache-control: private"); //use this to open files directly 
    while(!feof($fd)) { 
     $buffer = fread($fd, 2048); 
     echo $buffer; 
    } 
} 
fclose ($fd); 
exit; 

只需将文件扩展名pdf更改为ppt(无论PDF扩展发生在何处)。我希望这对你有帮助。谢谢。

+0

'Content-Disposition:filename = ...'[不是Content-Disposition头部的有效值](https://en.wikipedia.org/wiki/MIME#Content-Disposition) – amphetamachine 2014-09-02 15:56:36

3

下面介绍了如何将PHPPowerPoint对象写入浏览器并让用户下载它。它不会写入文件系统,因此不需要写入权限。

$ppp = new PHPPowerPoint; 
// create the powerpoint, adding slides, content, etc. 
// ... 
// done 

// set up the writer 
$pppwriter = PHPPowerPoint_IOFactory::createWriter($ppp, 'PowerPoint2007'); 
// tell the browser a powerpoint is coming 
header('Content-Type: application/vnd.openxmlformats-officedocument.presentationml.presentation; charset=binary'); 

// make sure it downloads as $filename 
header("Content-Disposition: attachment; filename={$filename}"); 

// output the powerpoint file data 
$pppwriter->save('php://output'); 
+0

我正在尝试使用PHPPowerpoint构建一个PPT,完全按照上面提到的步骤操作,它正在我的系统上下载文件,但却说'文件无法打开'。当代码写入服务器时,文件正在工作。 – void 2016-01-16 08:22:31

+0

@void我愿意打赌你的Powerpoint输出中有PHP警告/错误消息,这将导致该文件不是一个有效的zip文件。尝试在文本编辑器中打开您下载的文件,并查看前几行。 – amphetamachine 2016-01-19 16:22:28

+0

是的,它正在产生一个回应,造成了这个问题,我现在修复了它。 :) 谢谢 – void 2016-01-19 18:26:55

相关问题