php curl获取图片宽高,PHP从URL获取所有图像,宽度和高度> = 200更快

小编典典

我认为,你用什么做的是运行curl在请求中parallel使用curl_multi_init,请参阅

http://php.net/manual/en/function.curl-multi-

init.php以获取更多信息。这样,它将加载得更快,并避免了所有带宽问题,这些问题也可能影响速度。

将映像保存到不在getimagesize()本地直接运行的本地临时目录中,这比在其上运行要快得多http://

我希望这有帮助

编辑1

注意***

A.并非所有图片都以 http

B.并非所有图像都有效

C.创建temp需要存储图像的文件夹

概念验证

require 'simple_html_dom.php';

$url = 'http://www.huffingtonpost.com';

$html = file_get_html ( $url );

$nodes = array ();

$start = microtime ();

$res = array ();

if ($html->find ( 'img' )) {

foreach ( $html->find ( 'img' ) as $element ) {

if (startsWith ( $element->src, "/" )) {

$element->src = $url . $element->src;

}

if (! startsWith ( $element->src, "http" )) {

$element->src = $url . "/" . $element->src;

}

$nodes [] = $element->src;

}

}

echo "

";

print_r ( imageDownload ( $nodes, 200, 200 ) );

echo "

", microtime () - $start, "

";

function imageDownload($nodes, $maxHeight = 0, $maxWidth = 0) {

$mh = curl_multi_init ();

$curl_array = array ();

foreach ( $nodes as $i => $url ) {

$curl_array [$i] = curl_init ( $url );

curl_setopt ( $curl_array [$i], CURLOPT_RETURNTRANSFER, true );

curl_setopt ( $curl_array [$i], CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729)' );

curl_setopt ( $curl_array [$i], CURLOPT_CONNECTTIMEOUT, 5 );

curl_setopt ( $curl_array [$i], CURLOPT_TIMEOUT, 15 );

curl_multi_add_handle ( $mh, $curl_array [$i] );

}

$running = NULL;

do {

usleep ( 10000 );

curl_multi_exec ( $mh, $running );

} while ( $running > 0 );

$res = array ();

foreach ( $nodes as $i => $url ) {

$curlErrorCode = curl_errno ( $curl_array [$i] );

if ($curlErrorCode === 0) {

$info = curl_getinfo ( $curl_array [$i] );

$ext = getExtention ( $info ['content_type'] );

if ($info ['content_type'] !== null) {

$temp = "temp/img" . md5 ( mt_rand () ) . $ext;

touch ( $temp );

$imageContent = curl_multi_getcontent ( $curl_array [$i] );

file_put_contents ( $temp, $imageContent );

if ($maxHeight == 0 || $maxWidth == 0) {

$res [] = $temp;

} else {

$size = getimagesize ( $temp );

if ($size [1] >= $maxHeight && $size [0] >= $maxWidth) {

$res [] = $temp;

} else {

unlink ( $temp );

}

}

}

}

curl_multi_remove_handle ( $mh, $curl_array [$i] );

curl_close ( $curl_array [$i] );

}

curl_multi_close ( $mh );

return $res;

}

function getExtention($type) {

$type = strtolower ( $type );

switch ($type) {

case "image/gif" :

return ".gif";

break;

case "image/png" :

return ".png";

break;

case "image/jpeg" :

return ".jpg";

break;

default :

return ".img";

break;

}

}

function startsWith($str, $prefix) {

$temp = substr ( $str, 0, strlen ( $prefix ) );

$temp = strtolower ( $temp );

$prefix = strtolower ( $prefix );

return ($temp == $prefix);

}

输出量

Array

(

[0] => temp/img8cdd64d686ee6b925e8706fa35968da4.gif

[1] => temp/img5811155f8862cd0c3e2746881df9cd9f.gif

[2] => temp/imga597bf04873859a69373804dc2e2c27e.jpg

[3] => temp/img0914451e7e5a6f4c883ad7845569029e.jpg

[4] => temp/imgb1c8c4fa88d0847c99c6f4aa17a0a457.jpg

[5] => temp/img36e5da68a30df7934a26911f65230819.jpg

[6] => temp/img068c1aa705296b38f2ec689e5b3172b9.png

[7] => temp/imgfbeca2410b9a9fb5c08ef88dacd46895.png

)

0.076347

谢谢 :)

2020-05-26

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值