2011-07-16 9 views
0

私は自分のアプリケーションデータ(株)をライブデータと同期したいと思っています。私はそれが私にMaximum execution time of 60 seconds exceeded in ..... 方法を促すメッセージが表示されます同期。ライブデータの在庫データ

コードの上
 // $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のための)小さなデータセットのために働く、およびレコードの長いセットのためになります。..ここに私のコードは..ですヤフーのAPIを使用していますそれをしてもいいですか ?

注:私はcakephpフレームワークを使用しています。

答えて

0

あなたはset_time_limit functionを使用することがあります。

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

しかし、それはPHPがセーフモードである場合には動作しません(ifことを参照)。その場合、セーフモードをオフにするか、スクリプトの実行時間を制限するか(たとえば、一度に1社のみを処理し、各社ごとにスクリプトを実行するなど)。

あなたはCakePHPを使っていると言いますから、あなたのコードはユーザが要求したスクリプトで動作することを前提としています。これは実際にはサービススクリプトなので最適なデザインではありません。この場合、cronジョブ(php -f your_script.php)として実行する方が良いでしょう - この場合は、別のphp設定ファイル(通常は/etc/php5/cli/php.ini)が使用され、編集権限を持っていれば、 max_execution_time parameterを変更してください(php-cliスクリプトにのみ影響します)。

+0

ユーザーがブラウザでページ(スクリプトURL)を開くと、 cronジョブとは対照的に - スクリプトURLがcronスケジューラによって要求されたとき。 – lxa

+0

あなたはユーザが要求したスクリプトによって何を意味するのか教えてください。私は理解しています...私はコントローラ内でコードを書いているので、それはすべてのmvcリソースを利用します。一方、単純なPHPスクリプトを書くならば軽量サーバースクリプトであり、 mvc oneのこと..私は正しい? – anasanjaria

+0

私は通常のPHPスクリプトを作成し、私のレコードと同じくらい多くの時間、データのyahoo APIをヒットします...それは良いアプローチですか? – anasanjaria

関連する問題