Будет ли использоваться file_get_contents () для получения файлов объемом более 1 Гб с удаленного сервера, тайм-аут? - PullRequest
0 голосов
/ 16 сентября 2009

На веб-сайте http у меня есть множество сохраненных csv-файлов с хронологической схемой именования. Я написал PHP-программу (работающую на localhost), чтобы программно генерировать каждое имя файла с использованием функций даты и использовать file_get_ contents () для локальной записи файлов.

Я провел тестирование на ограниченный диапазон дат и смог получить файлы (каждый около 1,3 млн.). Однако, в течение большого периода (скажем, 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 голосов
/ 16 сентября 2009

PHP-скрипты имеют настраиваемый период ожидания. Обычно это значение по умолчанию равно 30 секундам в файле php.ini, которое настраивается с помощью параметра max_execution_time. Рекомендуется позвонить set_time_limit(0) (см. set_time_limit () ), чтобы снять этот предел.

Кроме этого, нет конкретной причины, по которой ваш сценарий должен прерываться. Однако вы можете удалить @ из вызова file_get_contents() и самостоятельно обработать любые инициированные ошибки , просто чтобы облегчить процесс. Это очень вероятное место, где вы увидите проблемы, если они возникнут.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...