将使用file_get_contents()从远程服务器获取超过1Gb的文件,超时?

时间:2009-09-16 17:55:31

标签: php download

在http网站上,我有大量的csv文件存储,按时间顺序命名方案。我编写了一个PHP程序(在localhost上运行),以编程方式使用日期函数生成每个文件名,并使用file_get_ contents()在本地编写文件。

我测试了有限范围的日期,并且能够获取文件(每个大约1.3M)。但是,在很长一段时间内(比如3年,每个工作日都有一个文件),这会导致超时吗?或者它不是超时,因为响应实际上没有停止?

以下是供参考的代码:

<?php
$start_date = '08SEP2009';
$check_date = $start_date;
$end_date = '14SEP2009';

function getNextDate() {
    global $check_date;
    $check_date = date("dMY", strtotime ("+1 day", strtotime($check_date))); //get next date
    return $check_date;
}   

function downloadFiles() {
    $cur_date = getNextDate();

    $url = "http://nse-india.com/content/historical/DERIVATIVES/YYYY/MMM/foDDMMMYYYYbhav.csv"; //this represents the naming scheme for the CSVs
    while(strcasecmp($cur_date, $end_date)) {
        $year = date("Y", strtotime($cur_date)); //get year (2004)
        $month = strtoupper(date("M", strtotime($cur_date))); //get month (SEP)
        $day = date("d", strtotime($cur_date)); //get day of month (09)

        $filename = str_replace('DD', $day, str_replace('MMM', $month, str_replace('YYYY', $year, $url))); //construct file name for new date
        $content = @file_get_contents($filename); 
        $localfile = array_reverse(explode("/", $filename)); //reverse array so that filename.csv comes as first element
        $localfile = $localfile[0]; //filename to store locally

        $handle = fopen($localfile, "w");
        fwrite($handle, $content); //save file locally
        fclose($handle);
    }
}

downloadFiles();
?>

1 个答案:

答案 0 :(得分:0)

PHP脚本具有可配置的超时期限。通常,这在php.ini文件中默认设置为30秒,可以使用max_execution_time设置进​​行配置。建议您致电set_time_limit(0)(请参阅set_time_limit())以删除此限制。

除此之外,您的脚本应该超时的具体原因没有。您可能希望从@电话中移除file_get_contents(),然后handle any triggered errors yourself,以方便此过程。如果有任何问题,那么你很可能会看到问题。