为什么从php下载文件只有1kb?

时间:2018-12-21 02:27:31

标签: php file download

我尝试强制从服务器中的php下载pdf文件...但是我下载的所有文件只有1kb大小。与实际大小不一样吗?在下载之前我需要声明文件大小吗?

<?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 :(得分:0)

首先,您应该修复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;
}