【问题标题】:PHP copy() max size problemPHP copy() 最大尺寸问题
【发布时间】:2011-07-28 11:06:42
【问题描述】:

我今天从我的发布服务器将下载脚本传输到我的 QNAP,它基本上使用 copy() 从 URL 下载视频。出于某种原因,我下载的任何视频都恰好是 33,378,304 字节。我的 php.ini 文件设置为 3600 超时,这并没有什么区别,其他人有这个问题吗?

当我直接使用

运行脚本时
# php <script path>

忽略 php.ini 并下载完整文件,配置中必须有一行我丢失。

任何帮助将不胜感激,谢谢!

upload_max_filesize 设置为 2047M

【问题讨论】:

  • 您的 PHP 内存限制设置为多少?也许 32 Mb?
  • 33,378,304 字节是 31mb - 尝试 grep 你的 php.ini 并找到 31 可能对你有帮助。
  • @hadvig 文件中没有 31。
  • @sander-marechal 内存限制设置为 256M。
  • 这是它在 php.ini 中所说的,还是当您将 copy 调用替换为 phpinfo() 时所说的?脚本可以更改它的内存限制。可能在您的 php.ini 中为 256M,但脚本将其动态设置为 32M。

标签: php download copy php-ini


【解决方案1】:

这是一种变通方法,而不是问题的解决方案,但您是否尝试过使用 exec("cp $src $dst")system("cp $src $dst")

据我所知,PHP 中的copy() 命令没有限制,这使得这是一个奇怪的错误。

【讨论】:

  • 我使用副本从 URL 下载,afaik cp 不做同样的工作。
  • 你可以使用wgetsystem("wget -O $dst $url")。您是否有权访问提供文件的 http 服务器?您能看到那里报告的有关转移的任何错误吗?
  • wget 由于某种原因不适用于此 URL。而且我无法查看日志。
【解决方案2】:

您是否也更改了post_max_size 的值?

-

编辑

一些视频服务器通过禁止下载视频的特定部分来保护自己(我在尝试下载视频流时已经遇到了同样的问题)。

作为一种解决方法,您可以使用此脚本逐段下载视频:

function fragmented_download($url, $destination)
{
    $headers = get_headers($url, 1);
    $downloadsize = $headers["Content-Length"];
    for ($filesize = 0 ; $filesize < $downloadsize ; $filesize = filesize($destination))
    {
        exec("wget --continue --output-document='$destination' '$url'");
    }
}

【讨论】:

  • 设置为 'post_max_size = 2047 M'
  • 好的。你没有在问题中提到它,它通常是一个麻烦的来源。
  • 没关系,我已经盯着这个 php.ini 文件看了好几个小时了。
猜你喜欢
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多