我正在使用PHP Simple HTML DOM,刚刚发现如果没有http:eg,它就无法从data-src
属性或<img src
读取图像;<img src="//static.mysite.com/123.jpg">
有什么办法让它发生吗?
我的代码是:
if($htm->find('img')){
foreach($htm->find('img') as $element) {
$raw = file_get_contents_curl($element->src);
$im = @imagecreatefromstring($raw);
$width = @imagesx($im);
$height = @imagesy($im);
if($width>500&&$height>=350){
$hasimg = '1';
echo '<img src='' .$element->src. ''>';
}
} // end foreach
} // end if htm
它对我有效:
$doc = str_get_html('<img data-src="foo">');
echo $doc->find('img', 0)->getAttribute('data-src');
//=> outputs: foo
echo $htm->find('img', 0)->getAttribute('data-src');
如果使用file_get_contents_curl()
作为您在代码中定义的函数,如本问题中的函数,则需要设置用于cURL:的默认协议
curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_HTTP);
这样,如果图像src
属性具有与协议相关的URL,cURL将仅使用HTTP。
省略协议(http/https)被称为"网络路径引用",意味着应该使用URL嵌入的页面的协议。这对file_get_contents()或curl来说毫无意义,因为它们不知道任何页面。
长话短说,你必须自己添加协议。
试试这个:
$url=$element->src;
if (substr($url, 0, 2)=='//') $url='http:'.$url;
$raw=file_get_contents_curl($url);