参考:http://techbbs.zol.com.cn/1/9_3371.html
<?php
/**
* $results = CurlMulti::cmcheck ( array (
* "http://www.maranellowebfashion.com/prodotti/immagini/scarpa_donna_elisabetta_franchi_sa7962052_rosa_212/1.jpg",
* "http://www.maranellowebfashion.com/prodotti/immagini/scarpa_donna_elisabetta_franchi_sa7962052_rosa_212/222.jpg",
* "http://www.maranellowebfashion.com/prodotti/immagini/scarpa_donna_elisabetta_franchi_sa7962052_rosa_212/3.jpg"
* ) );
* $results = CurlMulti::cmfetch($results);
* @author caihaibin
*/
class CurlMulti {
static $urls = null;
static $able_urls=null;
static $resourcs = null;
static $resoponses = null;
static $nobody = false;
static $mh = null;
static function cminit($urls) {
self::$resourcs = array ();
self::$resoponses = array ();
self::$urls = $urls;
self::$mh = curl_multi_init ();
foreach ( $urls as $url ) {
$ch = curl_init ();
curl_setopt ( $ch, CURLOPT_URL, $url );
curl_setopt ( $ch, CURLOPT_HEADER, 0 );
// 执行不打印
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 ); // return the image
if (self::$nobody)
curl_setopt ( $ch, CURLOPT_NOBODY, 1 );
curl_multi_add_handle ( self::$mh, $ch );
self::$resourcs [] = $ch;
}
}
static function cmcheck($urls = array()) {
self::$nobody = true;
self::$able_urls = array();
self::cminit ( $urls );
$active = null;
// 执行批处理句柄
do {
$mrc = curl_multi_exec ( self::$mh, $active );
} while ( $mrc == CURLM_CALL_MULTI_PERFORM );
while ( $active && $mrc == CURLM_OK ) {
if (curl_multi_select ( self::$mh ) != - 1) {
do {
$mrc = curl_multi_exec ( self::$mh, $active );
} while ( $mrc == CURLM_CALL_MULTI_PERFORM );
if ($mhinfo = curl_multi_info_read ( self::$mh )) {
// 意味着该连接正常结束
// 8. 从curl句柄获取信息
$chinfo = curl_getinfo ( $mhinfo ['handle'] );
// 9. 死链么?
if (! $chinfo ['http_code']) {
// $chinfo ['url'];
// 10. 404了?
} else if ($chinfo ['http_code'] == 404) {
// $chinfo ['url'];
// 11. 还能用
} else {
$able_urls[]=$chinfo ['url'];
}
// 12. 移除句柄
curl_multi_remove_handle ( self::$mh, $mhinfo ['handle'] );
curl_close ( $mhinfo ['handle'] );
// 13. 加入新URL,干活
do {
$mrc = curl_multi_exec ( self::$mh, $active );
} while ( $mrc == CURLM_CALL_MULTI_PERFORM );
}
}
}
curl_multi_close ( self::$mh );
return $able_urls;
}
static function cmfetch($urls = array()) {
self::$nobody = false;
self::cminit ( $urls );
$active = null;
// 执行批处理句柄
do {
$mrc = curl_multi_exec ( self::$mh, $active );
} while ( $mrc == CURLM_CALL_MULTI_PERFORM );
while ( $active && $mrc == CURLM_OK ) {
if (curl_multi_select ( self::$mh ) != - 1) {
do {
$mrc = curl_multi_exec ( self::$mh, $active );
} while ( $mrc == CURLM_CALL_MULTI_PERFORM );
}
}
self::cmdestroy ();
return self::$resoponses;
}
static function getContents() {
return self::$resoponses;
}
static function cmdestroy() {
foreach ( self::$resourcs as &$rs ) {
self::$resoponses [] = curl_multi_getcontent ( $rs );
curl_multi_remove_handle ( self::$mh, $rs );
}
curl_multi_close ( self::$mh );
}
}
转发请注明出处http://blog.martoo.cn
如有漏缺,请联系我 QQ 243008827