Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Код
Форумы портала PHP.SU » » Вопросы новичков » Код

Страниц (1): [1]
 

1. event - 22 Августа, 2012 - 12:54:24 - перейти к сообщению
Привет, есть у меня такой код:
PHP:
скопировать код в буфер обмена
  1. preg_match_all('/<img class="linked-image" src="(.*)" border="0" alt=".*" title=".*" \/>/', $page, $screenshots);
  2. $screenshots = $screenshots[1];
  3.  
  4. $i = 0;
  5.  
  6. foreach ($screenshots as $image) {
  7.        
  8. $size = @getimagesize($image);
  9.  
  10. if($size[0] > 450 && $size[1] > 300){
  11.         $i++;
  12. if($i <= 3){   
  13.         if(!file_put_contents($torrentdir . $i . ".jpg", curl($image))){
  14.         die("<title>Не получается скачать скриншот ". $s. " !</title>Не получается скачать скриншот ". $s. " !");
  15. }              
  16.  }     
  17.   }
  18.    }


Вот, посоветуйте как оптимизировать код, возможно есть какие нибудь лучшие решения? Улыбка
2. EuGen - 22 Августа, 2012 - 13:07:16 - перейти к сообщению
Код будет давать плохой результат в случае загрузки большого количества данных. Это связано с тем что у Вас на каждую картинку последовательно открывается соединение - а это издержки по времени.
Оптимизировать можно, использовав curl_multi как вариант.
3. event - 22 Августа, 2012 - 13:11:18 - перейти к сообщению
Там 3 картинка скачиваются, будет разумно прикрутить curl_multi, в таком случае?
4. EuGen - 22 Августа, 2012 - 13:12:47 - перейти к сообщению
event
Если Вы уверены, что это всегда 3 - то необязательно. Тем более, если нет нужды в гонке за секундами. Но если данный участок кода выполняется очень много и часто - есть повод задуматься.
5. event - 22 Августа, 2012 - 13:14:35 - перейти к сообщению
Вот, в сети нашел код:
PHP:
скопировать код в буфер обмена
  1.   function sendRequest($urls) {
  2.             $curly = array();
  3.             $result = array();
  4.             $mh = curl_multi_init();
  5.  
  6.             $iCount = 1;
  7.             foreach ($urls as $url) {
  8.                 $curly[$iCount] = curl_init();
  9.                
  10.                 curl_setopt($curly[$iCount], CURLOPT_URL, $url);
  11.                 curl_setopt($curly[$iCount], CURLOPT_HEADER, 0);
  12.                 curl_setopt($curly[$iCount], CURLOPT_RETURNTRANSFER, 1);
  13.                 curl_setopt($curly[$iCount], CURLOPT_REFERER, $url);
  14.  
  15.                 curl_multi_add_handle($mh, $curly[$iCount]);
  16.                 $iCount ++;
  17.             }
  18.             $running = null;
  19.             do {
  20.                 curl_multi_exec($mh, $running);
  21.             }
  22.             while($running > 0);
  23.            
  24.             foreach($curly as $id=>$val) {
  25.                 $result[$id] = $val;
  26.                 curl_multi_remove_handle($mh, $val);
  27.             }
  28.  
  29.             curl_multi_close($mh);
  30.             return $result;
  31.         }
  32. $array = array("https://www.google.com.ua/images/srpr/logo3w.png", "https://www.google.com.ua/images/srpr/logo3w.png");
  33.  
  34. echo sendRequest($array);


Пробую, не воркает... Может у Вас готовый вариант (функция) есть?

 

Powered by ExBB FM 1.0 RC1