0

私が使用しているスクリプトは、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タグに完全なURLが表示されないため、それも回避する必要があります...だから私はやった続く:

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 には先頭のドメインがないため表示されません。

上記のリンク例

これを行うより良い方法はありますか?そして、ループが失敗するのはなぜですか?

4

2 に答える 2

2

あなたが欠けているようです{

foreach($html->find('img[src$=jpg]') as $e) {
于 2012-01-23T15:31:09.980 に答える
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>';
}
于 2012-01-23T15:31:20.370 に答える