0

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

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

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

4

3 回答 3

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');
于 2014-09-02T14:28:20.727 回答
0

你可以使用下载助手

下载帮助程序可让您将数据下载到桌面。

加载这个助手

使用以下代码加载此帮助程序:

$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);
于 2014-09-02T14:20:26.030 回答
0

我完成了在核心 php 中下载 .pdf 文件的功能,这是它的示例代码

$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 扩展名)。

于 2014-09-02T14:28:13.897 回答