2017-04-06 6 views
0

他のサービスからデータを取得する:最善の方法は、私は、たとえば、配列を持っている

$links = array(
    'http://aaa.com/data.txt', 
    'http://aaea.com/data.txt', 
    'http://aada.com/data.txt', 
    'http://agaa.com/data.txt', 
    'http://ahaa.com/data.txt', 
    'http://awha.com/data.txt', 
    'http://aaeha.com/data.txt', 
    //etc x100 
); 

そしてPHPで私がやっている:それは罰金、しかしひどく遅い動作します

foreach ($links as $link) { 
    $data = file_get_contents($link); 
    //save data in database 
} 

。これはPHPでどのように優れた方法ですか?私は非同期データを取得したいと思います。

私の他の方法 - PHPスクリプトからjQueryとAjaxのクエリが、おそらくより良い方法が存在する?

+0

PHPはシングルスレッドです(ただし、いくつかのマルチスレッドライブラリがあります)ので、スクリプト内で非常に簡単に非同期にフェッチすることはできません。 その他のオプションには、これらのデータファイルをキャッシュし、最新でない場合にのみリフレッシュすることができます(URLからヘッダーをフェッチしてdatetimeを検索できます)。 – fbas

+1

試してみてくださいhttp://php.net/manual/en/function.curl-multi-exec.php – LiTe

+0

この情報は役に立ちました:http://stackoverflow.com/questions/15559157/understanding-php-curl-multi- exec –

答えて

0

私はこのようにすることをお勧めします。

<?php 
$Links = array(
    'http://aaa.com/data.txt', 
    'http://aaea.com/data.txt', 
    'http://aada.com/data.txt', 
    'http://agaa.com/data.txt', 
    'http://ahaa.com/data.txt', 
    'http://awha.com/data.txt', 
    'http://aaeha.com/data.txt' 
); 
$TempData = ''; 
foreach ($Links as $Link) { 
    $TempData .= file_get_contents($Link); 
    $TempData .= '|'; 
} 
$Data = rtrim($TempData, '|'); 

// save the $Data string and when you export the 
// string from the db use this code to turn it into an array 
// 
// $Data = explode('|' $ExportedData); 
// var_dump($Data); 
// 
// If you do it this way you will be preforming 1 sql 
// statement instead of multiple saving site resources 
// and making you code execute faster 

?> 

これが私に知らせてくれた場合は。

+0

PHPが複数のデータベースクエリではなくリモートサーバからの応答を待たなければならないとき、ボトルネックが複数のfile_get_contentsを呼び出すと思います。 – LiTe

関連する問題