PHP文件下载全部停止在1GB

时间:2018-08-02 13:03:08

标签: php file download

我有一个脚本设置,因此用户可以通过php脚本(一次使用链接)下载文件,但是当文件大小达到1GB时,它将无法进一步下载。

它恰好在1GB处停止

php.ini中是否有一些设置可以让我将其调整到1GB以上?我尝试更改下面的大多数设置,但看不到任何与1GB文件大小有关的内容...

示例:www.url.com/file.php?download=filename.zip(使用以下php代码)

<?php
 $DownloadableFilesDirectory = "/dl/secret";
 $FileRenamePrependCharacters = "odroid_";

 if( ! empty($FileRenamePrependCharacters) ) { $FileRenamePrependCharacters = 
 ltrim($FileRenamePrependCharacters); }
 $DownloadableFilesDirectory = 
 preg_replace('/^\/*/','/',$DownloadableFilesDirectory);
 $DownloadableFilesDirectory = 
 preg_replace('/\/*$/','',$DownloadableFilesDirectory);
 $Directory = $_SERVER['DOCUMENT_ROOT'].$DownloadableFilesDirectory;
 if( empty($_GET['download']) ) { exit; }
 if( empty($_GET['savefile']) ) { $_GET['savefile'] = $_GET['download']; }
 $Dfile = $Directory.'/'.$_GET['download'];
 $size = filesize($Dfile);
 if( ! $size )
{
    echo '<p><b>The download file is empty or was not located.</b></p>';
    exit;
 }
 $ctype = 'application/octet-stream';
 header('Cache-control: private');
 header("Content-Type: $ctype");
 header('Content-Disposition: attachment; filename="'.$_GET['savefile'].'"');
 header('Content-Transfer-Encoding: binary');
 header("Content-Length: $size");
 @readfile($Dfile);
 if( empty($FileRenamePrependCharacters) ) { unlink($Dfile); }
 else
 {
    $pieces = explode('/',$Dfile);
    $pieces[count($pieces)-1] = $FileRenamePrependCharacters . 
 $pieces[count($pieces)-1];
    rename($Dfile,implode('/',$pieces));
  }
 exit;
 ?>

Php Settings

1 个答案:

答案 0 :(得分:0)

除非您在错误日志中遇到类似PHP Fatal error: Maximum execution time of ??? seconds exceeded in foo.php on line ?的错误,或者愚蠢地将所有下载的内容保存在ram中,并且在错误日志中得到类似PHP Fatal error: Allowed memory size of ??? bytes exhausted (tried to allocate ??? bytes) in foo.php on line ?的错误(并且您不会为此,按照您发布的代码进行操作),这不是PHP问题,而是您所使用的Web服务器的问题。 (nginx?apache?lighthttpd?微软的IIS?一些代理?一些负载均衡器ala Cloudflare?),在那里开始调查。