Зачем скачивать файл с php только 1кб? - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь принудительно загрузить pdf-файл с php, который находится на сервере ... но все файлы, которые я загружаю, имеют размер только 1 КБ. Это не совпадает с фактическим размером, нужно ли мне объявлять размер файла перед загрузкой?

<?php
$path = "C:\Users\omamu02\Desktop\TESTPRINT" ;
$file = "NMT PRV PHG 370 2017.pdf";
header("Pragma: public");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-disposition: attachment; filename= $file"); //Tell the filename to the browser
header("Content-type: application/force-download");//Get and show report format 
header("Content-Transfer-Encoding: binary");
header("Accept-Ranges: bytes");
readfile($path); //Read and stream the file
get_curret_user();
error_reporting(0);
?>

1 Ответ

0 голосов
/ 21 декабря 2018

Прежде всего, вы должны исправить заголовок filename= $file.Оберните переменную $file как минимум ' символами.Кроме того, вам не нужен закрывающий тег в конце файла PHP.

И я не уверен насчет ваших заголовков, поэтому я предлагаю вам попробовать приведенную ниже функцию, она довольно распространена для любого типаданные и уже содержат некоторые исправления и обходные пути:

function download_file($file_path, $file_name = null, $file_type = 'application/octet-stream')
{
    if ($file_name === null)
    {
        $file_name = basename($file_path);
    }

    if (file_exists($file_path))
    {
        @set_time_limit(0);

        header('Content-Description: File Transfer');
        header('Content-Type: ' . $file_type);
        header('Content-Disposition: attachment; filename="' . str_replace('"', "'", $file_name) . '"');
        header('Content-Transfer-Encoding: binary');
        header('Expires: 0');
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header('Pragma: public');
        header('Content-Length: ' . filesize($file_path));

        readfile($file_path);
    }

    exit;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...