如果文件太大,PHP会失败

如果文件太大,PHP会失败,php,google-app-engine,Php,Google App Engine,我正在运行一个应用程序在谷歌应用程序引擎,在PHP上 我使用以下代码从API下载文件: $context = [ "http" => [ "method" => "GET", "header" => "Authorization: ".$token."\r\n", "follow_location"=>1, "timeout"=>600, "ignore_errors"=>1 ]

我正在运行一个应用程序在谷歌应用程序引擎,在PHP上

我使用以下代码从API下载文件:

$context = [
   "http" => [
   "method" => "GET",
   "header" => "Authorization: ".$token."\r\n",
   "follow_location"=>1,
   "timeout"=>600,
   "ignore_errors"=>1
              ]
            ];
$context = stream_context_create($context);
$sourceFile = fopen($location,"r", false,$context) or die("no handle");
这段代码之后是对另一个资源的块读写,基本上我将文件存储在Google存储上

$destinationFile = fopen($filename,"w");
while ($buffer = fread($sourceFile, 1048576)) {
      fwrite($destinationFile,$buffer);
} 
这段代码的问题是,如果文件小到30 MB以下,它确实可以很好地工作,但是如果文件大,fopen就会失败。我没有处理信息

这有点奇怪,因为我明确避免使用文件内容下载内存中的整个文件,我不明白为什么fopen会失败


你能帮我吗?谢谢

限制为32兆字节。这就是它失败的原因。显然,该限制不适用于本地,因此它可以在dev服务器上工作


还要注意的是,如果在本地执行而不是在Google App Engine上执行,该代码即使在大文件上也能完美工作。所以它一定是应用程序引擎的一些配置…但我没有得到请求的完整文件:我只是得到一个fopen,然后分块读取它。您是说HTTP请求将获得完整响应吗?如果是这样,我应该如何从API下载请求中获取一个大文件并将其发布到Google存储上?有什么推荐的方法吗?谢谢,看起来HTTP请求得到了完整的响应。我不做PHP,所以没有太多帮助。您可以在python中设置Accept Ranges和/或Accept Length标头,以便在PHP中可能会有类似的内容来获取部分内容。我尝试添加$rng='HTTP/1.1 206部分内容\r\n Accept Ranges:bytes\r\n内容范围:bytes 0-7999999/37762382\r\n内容长度:8000000\r\n';要获取首个8MB的头文件,但它在本地甚至无法工作-可能API不支持可恢复下载-顺便说一句,它甚至不报告内容长度外部服务可能尊重或可能不尊重这些头文件。如果您联系的服务器支持,流式处理的范围应该可以正常工作。我们在SDK附带的云存储客户端中使用相同的URLFetch API,并使用范围请求来支持任意长度的文件。