Serving large files with PHP

前端 未结 9 973
北海茫月
北海茫月 2020-12-13 07:51

So I am trying to serve large files via a PHP script, they are not in a web accessible directory, so this is the best way I can figure to provide access to them.

The

9条回答
  •  北海茫月
    2020-12-13 08:08

    You don't need to read the whole thing - just enter a loop reading it in, say, 32Kb chunks and sending it as output. Better yet, use fpassthru which does much the same thing for you....

    $name = 'mybigfile.zip';
    $fp = fopen($name, 'rb');
    
    // send the right headers
    header("Content-Type: application/zip");
    header("Content-Length: " . filesize($name));
    
    // dump the file and stop the script
    fpassthru($fp);
    exit;
    

    even less lines if you use readfile, which doesn't need the fopen call...

    $name = 'mybigfile.zip';
    
    // send the right headers
    header("Content-Type: application/zip");
    header("Content-Length: " . filesize($name));
    
    // dump the file and stop the script
    readfile($name);
    exit;
    

    If you want to get even cuter, you can support the Content-Range header which lets clients request a particular byte range of your file. This is particularly useful for serving PDF files to Adobe Acrobat, which just requests the chunks of the file it needs to render the current page. It's a bit involved, but see this for an example.

提交回复
热议问题