Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Одновременное выполнение нескольких file_get_contents
 
 автор: Port_Artur3   (08.04.2017 в 12:25)   письмо автору
 
 

PHP код:
for( $i = 1; $i <= 10; $i++ ) 



$content=file_get_contents("https://****/$i/***/"); 
...
обработка
...

}

Время выполнения цикла 3,65 секунды.

Задача.
Нужно все 10 file_get_contents выполнить одновременно, сократив время в 10 раз. Сохранив запросы в разных
$content_1, ... , $content_10 для последующей обработки

Вопрос.
Как?

Возможно использование VPS с 10-12 ядрами, но лучше сэкономить.

  Ответить  
 
 автор: Port_Artur3   (09.04.2017 в 18:12)   письмо автору
 
   для: Port_Artur3   (08.04.2017 в 12:25)
 

Заменил на такой пример, что сократило время до 2 секунд, как сделать ещё быстрее?


$urls = array( 
   'http://www.google.ru/', 
   'http://www.altavista.com/', 
   'http://www.yahoo.com/' 
    ); 
$mh = curl_multi_init(); 
foreach ($urls as $i => $url) { 
    $conn[$i]=curl_init($url); 
    curl_setopt($conn[$i],CURLOPT_RETURNTRANSFER,1);  //ничего в браузер не давать 
    curl_setopt($conn[$i],CURLOPT_CONNECTTIMEOUT,10); //таймаут соединения 
    curl_multi_add_handle ($mh,$conn[$i]); 

//Пока все соединения не отработают 
do { curl_multi_exec($mh,$active); } while ($active); 
//разбор полетов 
for ($i = 0; $i < count($urls); $i++) { 
    //ответ сервера в переменную 
    $res[$i] = curl_multi_getcontent($conn[$i]);  
    curl_multi_remove_handle($mh, $conn[$i]); 
    curl_close($conn[$i]); 

curl_multi_close($mh); 
print_r($res);  


Говорят что можно ещё использовать pcntl_fork и fsockopen

Но я не могу понять как сделать чтобы это всё было внутри одного PHP, чтобы полученные данные использовать в виде переменных дальше в скрипте, безо всяких записей в файлы или базу. Чтобы как можно быстрее было всё.

Максимальное время одного запроса 0,46 секунды, вот если бы сократить хотя бы до 0,5-0,6 сек. Было бы супер!


Помогите пожалуйста!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования