ホームページ  >  記事  >  バックエンド開発  >  PHP が画像ソースを取得できません

PHP が画像ソースを取得できません

WBOY
WBOYオリジナル
2023-05-07 10:28:11725ブラウズ

ネットワーク技術の継続的な発展に伴い、Web ページはメインコンテンツとしてテキストを使用するだけでなく、画像、オーディオ、ビデオなどのマルチメディア要素の統合に徐々に移行しています。今日、Web ページにアクセスするとき、私たちはこれらのマルチメディア要素にさらに依存するようになり、美的体験が豊かになり、ページがより鮮やかで直観的になります。

その中でも、写真は最も一般的なマルチメディア要素の 1 つです。 Web 開発では、画像を使用するとページのコンテンツが充実し、ユーザー エクスペリエンスが向上します。関連する操作を実行するために、サーバー側でイメージの src アドレスを取得する必要がある場合があります。 PHP では、画像の src アドレスを取得する方法は数多くありますが、いくつかの問題が発生して取得が失敗する場合があります。この記事では、PHPで画像srcが取得できない原因と解決策を詳しく紹介します。

1. 画像の src を取得するメソッド

PHP では画像の src アドレスを取得する方法が多数ありますが、ここでは一般的な 2 つの方法を紹介します。

  1. 正規表現を使用して画像 src を取得する

HTML では、通常、img タグ内の src 属性に画像アドレスの src を記述します。したがって、正規表現を使用して img タグの src 属性値を取得できます。

function getImgSrc($html){
    $pattern = '/<img.*?src="(.*?)".*?>/is';
    preg_match_all($pattern, $html, $matches);
    $src_array = $matches[1];
    return $src_array;
}

上記の関数の $html は、HTML ページの文字列形式です。正規表現を使用して、HTML 内のすべての img タグの src 属性値を照合し、すべての画像の src アドレスを格納する配列 $src_array を返します。

  1. DOMDocument を使用して画像を取得する src

DOMDocument は、PHP で XML および HTML ドキュメントを操作するための主要なツールの 1 つです。これは、HTML ドキュメント内の要素とその属性を簡単に取得するための一連のメソッドを提供します。 DOMDocument を使用して、img タグの src 属性値を取得できます。

function getImgSrc($html){
    $dom = new DOMDocument();
    @$dom->loadHTML($html);
    $xpath = new DOMXPath($dom);
    $src_array = array();
    $img_list = $xpath->query('//img');
    foreach($img_list as $img){
        $src_array[] = $img->getAttribute('src');
    }
    return $src_array;
}

上記の関数では、$html も HTML ページの文字列形式です。 DOMDocument を使用してドキュメント オブジェクト $dom を作成し、loadHTML メソッドを使用して HTML ページをロードします。次に、DOMXPath を使用してすべての img タグを取得し、各 img タグを走査してその src 属性値を取得します。

2. 取得失敗の原因と解決策

上記の方法で画像ソースを取得すると、取得失敗が発生する場合があります。ここでは、考えられる原因と対応する解決策をいくつか紹介します。

  1. 受信した HTML は不完全です

getImgSrc 関数で渡される $html パラメーターは完全な HTML ドキュメントである必要がありますが、ページ コンテンツの一部しか取得できない場合があります。 、または HTML ドキュメント内の一部の不完全なタグにより、取得が失敗します。この時点で、受信した HTML ドキュメントが完全で正しいことを確認する必要があります。

  1. 画像の src は相対パスを使用します

画像の src 属性は相対パスを使用することがあります。そのため、サーバー側で画像を取得するときに、変更する必要があります。絶対パスに変換します。 PHP の dirname 関数と parse_url 関数を使用して、相対パスを絶対パスに変換できます。

function getAbsoluteUrl($base, $relative){
    $parse_base = parse_url($base);
    if(!isset($parse_base['path'])){
        $parse_base['path'] = '/';
    }
    $dir = dirname($parse_base['path']);
    if($relative[0] == '/'){
        $relative = substr($relative, 1);
    }
    if($relative[0] == '.'){
        $i = 0;
        while(substr($relative, 0, 2) == './'){
            $relative = substr($relative, 2);
        }
        $dir .= '/';
    }
    $result = $parse_base['scheme']."://".$parse_base['host'];
    if(isset($parse_base['port']) && $parse_base['port'] != '80'){
        $result .= ':'.$parse_base['port'];
    }
    $result .= $dir.$relative;
    return $result;
}

上記の関数では、$base は相対パスのベース アドレス、$relative は相対パスです。 dirname 関数を使用してベース アドレスのディレクトリ パス $dir を取得し、相対パスに基づいて完全な絶対パスを結合します。

  1. ネットワーク上の理由

画像ソースの取得は、ネットワーク環境にも影響されます。ネットワークが不安定または中断されている場合、取得は失敗します。この時点で、再度取得を試みるか、ネットワークが安定するのを待って再度取得を試みることができます。

要約すると、この記事では、PHP が画像 src を取得できない原因と解決策を紹介します。サーバーサイドでイメージソースを取得することは開発の一般的な要件ですが、取得方法と問題が発生した場合の解決策をマスターすることで、開発効率を向上させ、問題の影響を軽減できます。

以上がPHP が画像ソースを取得できませんの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。