Скачайте 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);