【问题标题】:Download a file from a url and verify the file has been completely downloaded从 url 下载文件并验证文件已完全下载
【发布时间】:2013-02-28 11:11:54
【问题描述】:

我正在尝试从网站下载一个大的 csv 文件。我已经看到使用 file_get_contents 和 file_put_contents 的建议,但由于文件大小,我选择使用 cURL 及其文件句柄选项,因此数据直接进入文件而不是 PHP 内存。

但是我似乎遇到了一个奇怪的错误,即整个文件并不总是下载,而且我不确定如何在不使用响应标头的情况下验证整个文件是否已下载,我不确定如何使用 cURL 的文件句柄选项时访问。

这是我现在用来获取文件的。

    $ch = curl_init('*FILE_TO_GET*');
    $fp = fopen('*WHERE_TO_FILE*', 'wb');
    curl_setopt($ch, CURLOPT_FILE, $fp);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_exec($ch);
    curl_close($ch);
    fclose($fp);

这些文件目前约为 3.8 MB,但它有可能变得更大。

【问题讨论】:

  • 试试curl_getinfo($ch),看看所有参数是否正常。
  • @KarolyHorvath 谢谢,但我已经知道如何使用谷歌了。我能找到的所有示例都需要将文件加载到内存中才能获取标题。
  • @SilentAssassin 我虽然 getinfo 只与请求而不是响应有关?我应该检查哪些参数?
  • @James: 获取长度 + 然后保存到文件

标签: php file curl file-io download


【解决方案1】:

在不知道要下载的文件大小的情况下,无法确定是否已完全下载。

因此,您需要获取文件的标头信息。文件头通常很小,如果您要下载一个大文件,那么努力是值得的。标头将包含文件大小以及其他一些信息。

由于您以前没有尝试过获取标题,请尝试使用这个简洁的小函数来确定 Php Remote File Size without downloading file 处的文件大小。

那里的示例详细说明了如何下载标题和提取大小信息。然后您可以简单地将此值与下载的文件大小和中提琴进行比较。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    • 2016-07-23
    相关资源
    最近更新 更多