2013-02-28 122 views
1

我试图从网站下载biggish 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,但它有可能变得更大。

+0

http://www.google.com/search?q=php+curl+response+header – 2013-02-28 11:17:34

+0

尝试'curl_getinfo($ ch)'并检查所有参数是否正常。 – SilentAssassin 2013-02-28 11:18:29

+0

@ KarolyHorvath谢谢,但我已经知道如何使用谷歌。我可以找到的所有示例都需要将文件加载到内存中以获取标题。 – James 2013-02-28 11:22:38

回答

1

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

因此,您需要获取文件的标题信息。文件头通常很小,并且考虑到您正在下载大文件,这是值得的。标题将具有文件大小以及其他一些信息。

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

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