为什么这个foreach失败了?

时间:2012-01-23 15:27:09

标签: php html simple-html-dom

我正在使用的脚本'获取'一个html页面并且解析只显示其中的.jpg图像,但我需要进行一些修改,当我这样做时,它只是失败...

这有效:

include('simple_html_dom.php');

function getUrlAddress() {
    $url = $_SERVER['HTTPS'] == 'on' ? 'https' : 'http';
    return $url .'://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
}

$html = file_get_html($url);

foreach($html->find('img[src$=jpg]') as $e)
    echo '<img src='.$e->src .'><br>';

然而,有一些问题...我只想显示超过一定大小的图像,加上一些网站没有在img标签中显示完整的网址,因此需要尝试绕过它...所以我做了以下事情:

include('simple_html_dom.php');

function getUrlAddress() {
    $url = $_SERVER['HTTPS'] == 'on' ? 'https' : 'http';
    return $url .'://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
}

$html = file_get_html($url);

foreach($html->find('img[src$=jpg]') as $e)
   $image = $e->src;

// check to see if src has domain
if (preg_match("/http/", $e->src)) { 
    $image = $image; 
} else {
    $parts = explode("/",$url);
    $image = $parts['0']."//".$parts[1].$parts[2].$e->src;
}

$size = getimagesize($image);

echo "<br /><br />size is {$size[0]}";
echo '<img src='.$image.'><br>';

这样可行,但只返回第一张图片。

在下面的示例链接中有5个图像,第一个代码显示但不显示它们,因为src没有前导域

Example link as mentioned above

有更好的方法吗?为什么循环失败?

2 个答案:

答案 0 :(得分:2)

您似乎错过了{

foreach($html->find('img[src$=jpg]') as $e) {

答案 1 :(得分:1)

你忘记了括号:

foreach($html->find('img[src$=jpg]') as $e){

    $image = $e->src;

    // check to see if src has domain
    if (preg_match("/http/", $e->src)) { $image = $image; }

    else {
        $parts = explode("/",$url);
        $image = $parts['0']."//".$parts[1].$parts[2].$e->src;
    }
    $size = getimagesize($image);
    echo "<br /><br />size is {$size[0]}";
    echo '<img src='.$image.'><br>';
}