Скачайте PowerPoint, только что созданный на PHP

Я пытаюсь добавить PHPPowerPoint к одному из моих инструментов. Я добавляю весь файл, который нужен PHPPowerPoint, и записываю ссылку на скачивание на нужную страницу, но когда я пытаюсь загрузить его, он говорит мне, что у меня нет разрешения на доступ к файлу. Я попытался изменить разрешение вручную, но ничего не изменилось, так как каждый раз PHP создает новый файл с разрешением по умолчанию. Я пытался использовать chmod на нем, но ничего не изменилось. Я попытался также chgrp и chown, чтобы сменить владельца (это "демон").

Это странно, потому что когда я использую его из инструмента, используя только код для создания PP-файла, все работает и с этим разрешением.

Инструмент, куда я хочу добавить загрузку PP-файла, был закодирован с помощью codeigniter.

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');

Я сделал функциональность для загрузки файла.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). Я надеюсь, что это полезно для вас. Спасибо.

Вы можете использовать помощник загрузки

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);
Другие вопросы по тегам