2009-09-16 3 views
0

Sur un site Web http, j'ai des charges de fichiers CSV stockés quel schéma de dénomination chronologique. J'ai écrit un programme PHP (s'exécutant sur localhost) pour générer par programme chaque nom de fichier à l'aide des fonctions de date et utiliser file_get_ contents() pour écrire les fichiers localement.Est-ce que l'utilisation de file_get_contents() va obtenir des fichiers cumulant plus de 1 Go à partir du serveur distant, timeout?

J'ai testé pour une gamme limitée de dates et je suis en mesure d'obtenir les fichiers (chacun environ 1,3M). Cependant, sur une longue période (disons 3 ans, avec un fichier pour chaque jour de la semaine), cela entraînerait-il un dépassement de délai? Ou n'est-ce pas un délai d'attente parce que la réponse n'a pas réellement cessé?

Voici le code de référence:

<?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(); 
?> 
+0

Je dois l'exécuter sur un PC Windows. Alors schtaks sera-t-il meilleur? –

Répondre

0

scripts PHP ont une période de temporisation configurable. Généralement, ce paramètre est défini sur 30 secondes par défaut dans le fichier php.ini, configurable avec le paramètre max_execution_time. Il est conseillé d'appeler le set_time_limit(0) (voir set_time_limit()) pour supprimer cette limite.

À part cela, il n'y a pas de raison particulière pour que votre script expire. Vous voudrez peut-être supprimer le @ de l'appel file_get_contents() cependant, et handle any triggered errors yourself, juste pour faciliter le processus. C'est un endroit très probable que vous allez voir des problèmes, le cas échéant.

+0

il semble que je peux exécuter le fichier PHP en tant que script. c'est-à-dire sans serveur web. Dans ce mode, PHP fixe automatiquement la limite de temps à 0. http://www.php.net/manual/fr/features.commandline.php –

Questions connexes