Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
156 views
in Technique[技术] by (71.8m points)

Displaying large PDF files using PHP headers

I took the following piece of code from github

function smartReadFile($location, $filename, $mimeType = 'application/pdf')
{
  if (!file_exists($location))
  {
     header ("HTTP/1.1 404 Not Found");
     return;
  }
  $size = filesize($location);
  $time = date('r', filemtime($location));
  $fm       = @fopen($location, 'rb');
  if (!$fm)
  {
     header ("HTTP/1.1 505 Internal server error");
     return;
  }

  $begin    = 0;
  $end  = $size - 1;

  if (isset($_SERVER['HTTP_RANGE']))
  {
     if (preg_match('/bytes=h*(d+)-(d*)[D.*]?/i', $_SERVER['HTTP_RANGE'], $matches))
     {
        $begin  = intval($matches[1]);
        if (!empty($matches[2]))
        {
            $end    = intval($matches[2]);
        }
     }
  }

    if (isset($_SERVER['HTTP_RANGE']))
    {
       header('HTTP/1.1 206 Partial Content');
    }
    else
    {
       header('HTTP/1.1 200 OK');
    }

    header("Content-Type: $mimeType"); 
    header('Cache-Control: public, must-revalidate, max-age=0');
    header('Pragma: no-cache');  
    header('Accept-Ranges: bytes');
    header('Content-Length:' . (($end - $begin) + 1));
    if (isset($_SERVER['HTTP_RANGE']))
    {
       header("Content-Range: bytes $begin-$end/$size");
    }
    header("Content-Disposition: inline; filename=$filename");
    header("Content-Transfer-Encoding: binary");
    header("Last-Modified: $time");

    $cur    = $begin;
    fseek($fm, $begin, 0);

    while(!feof($fm) && $cur <= $end && (connection_status() == 0))
    {
      print fread($fm, min(1024 * 16, ($end - $cur) + 1));
      $cur += 1024 * 16;
    }
}

It is working for smaller files. But in case of large files it isn't working properly. I tried with a 100MB file. The PDF is partially loaded that too with a black background. I don't know what's wrong in the code. I suspect I had to modify the headers, but I don't know what to add/replace. I have tried many alternatives given in many sites, but none of them worked.

Thank you for any help

question from:https://stackoverflow.com/questions/65626305/displaying-large-pdf-files-using-php-headers

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
Waitting for answers

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...