下载大文件时卷曲挂起(500MB +)

时间:2011-03-27 23:39:04

标签: php curl

我正在使用cURL从远程服务器下载大型XML文件(500MB到1GB之间)。虽然脚本适用于较小的测试文件,但每次我尝试下载大于几百兆字节的文件时,脚本似乎都会挂起 - 它不会退出,没有错误消息,它只是挂在那里。

我正在从命令行(CLI)执行脚本,因此PHP本身不应该超时。我也尝试过cURL的详细模式,但是除了初始连接之外没有显示任何内容。每次下载文件时,它都会停在完全相同的大小(463.3MB)。此时文件的XML不完整。

任何想法都非常感激。

        $ch = curl_init();
    $fh = fopen($filename, 'w');

    curl_setopt($ch,CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE );
    curl_setopt($ch, CURLOPT_FILE, $fh);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_TIMEOUT, 0);

    if(curl_exec($ch) === false)
    {
        echo 'Curl error: ' . curl_error($ch) . "\n";
    }
    else
    {
        echo 'Operation completed without any errors';
    }

    $response = array(
        'header' => curl_getinfo($ch)
    );

    curl_close($ch);
    fclose($fh);

    if($response['header']['http_code'] == 200) {
        echo "File downloaded and saved as " . $filename . "\n";
    }

同样,这个脚本适用于较小的文件,但是我尝试下载的大文件甚至没有打印出错误信息。

这可能是其他东西(Linode上的Ubuntu 10.04)终止脚本吗?据我所知,我的网络服务器在这里无关紧要,因为我通过CLI运行它。

谢谢,

马特

3 个答案:

答案 0 :(得分:1)

文件在停止下载时似乎已完整?将-m 10800添加到命令将超时并在指定的秒数后结束传输。如果您将超时设置为比传输时间更长,这仍然有效,但仍然很烦人。

答案 1 :(得分:0)

检查此post,也许您可​​以尝试将文件下载为部分。或者,如果您可以访问远程服务器,则可以尝试存档文件然后下载。您也可以检查您的php.ini配置。请参阅文件大小,内存限制等。

答案 2 :(得分:0)

您正在保存的分区上可能没有磁盘空间, 或者为运行脚本的用户运行配额。