Синхронизация. данные о запасах с данными о живых - PullRequest
0 голосов
/ 16 июля 2011

Я хочу синхронизировать данные моего приложения (сток) с данными из живых. Я использую Yahoo API .. Вот мой код ..

       // $companyInfo ; holds company information like symbol 

        foreach($companyInfo as $singleCompany)
        {
            $feedUrl = 'http://finance.yahoo.com/d/quotes.csv?s='.$singleCompany['Company']['Symbol'].'&f=l1c6gho&e=.csv';

            $handle = fopen($feedUrl, "r");

            $liveCompanyData = fgetcsv($handle);  
            if(!empty($liveCompanyData) && isset($liveCompanyData))
            { 
                      /***  here I parse data n save it in db ***/
            }
           fclose($handle);

        }

Приведенный выше код будет работать для небольшого набора данных (т. Е. Для записей примерно 30), а для длинного набора записей мне будет предложено Maximum execution time of 60 seconds exceeded in ..... как я могу это сделать?

Примечание: я использую рамки CakePHP.

1 Ответ

0 голосов
/ 16 июля 2011

Вы можете использовать set_time_limit функцию :

if(!ini_get('safe_mode') ) { 
    set_time_limit(120); 
} 

Однако, он не будет работать, если PHP находится в безопасном режиме (см. if). В этом случае вам нужно либо отключить безопасный режим, либо ограничить время выполнения скрипта - например, обрабатывая только одну компанию за раз и выполняя ваш скрипт отдельно для каждой компании.

И поскольку вы говорите, что используете CakePHP, я предполагаю, что ваш код выполняется в запрошенном пользователем сценарии - что не является лучшим дизайном, так как на самом деле это служебный сценарий. Было бы лучше запустить его как задание cron (php -f your_script.php) - в этом случае используется другой файл конфигурации php (обычно /etc/php5/cli/php.ini), и если у вас есть доступ / права для редактирования это - изменить max_execution_time параметр в нем (это повлияет только на скрипты php-cli).

...