0

何日もこれに苦労しています。

親ドメイン内のサブフォルダーにマップされたサブドメインがあります。親ドメインの画像画像を使いたい

ファイルにリンクするイメージタグで標準のhrefを使用することで、イメージにうまくリンクできます。

<img href="http://www.reelfilmlocations.com/images/myimage.jpg"/>

私の問題は、プレースホルダー画像を表示しない場合は、画像が存在するかどうかを確認するためにいくつかのチェックを実行する必要があることです。

すべてのコードをテスト ページに書き込んでいます。画像タグは画像を正常に表示しますが、curl または get_headers を使用して呼び出すと、404 または 403 エラーが返されます。

両方のドメインは同じアカウントの同じ専用サーバー上にあり、同じ資格情報を使用しているため、セキュリティの問題ではありません (ホストに確認しました)

では、なぜ画像は html 経由で表示されるのに、php で 200 の応答が得られないのですか?

テスト ページはhttp://mobile.reelfilmlocations.co.uk/untitled.phpにあります。

<?php

function remoteFileExists($url) {
    //$url = str_replace(" ", '%20', $url);
    $agent = 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.15) Gecko/20080623 Firefox/2.0.0.15';
    $curl = curl_init($url);
    //don't fetch the actual page, we only want to check the connection is ok
    curl_setopt($curl, CURLOPT_NOBODY, true);
    curl_setopt($curl, CURLOPT_USERAGENT, $agent);
    //do request
    $result = curl_exec($curl);
    echo('curl result: '.$result.'<br>');
    $ret = false;
    //if request did not fail
    if ($result !== false) {
        //if request was ok, check response code
        $statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);  
        echo('curl status: '.$statusCode.'<br>');
        if ($statusCode == 200 ) {
            $ret = true;   
        }               
    }

    curl_close($curl);
    return $ret;
}

function get_response_code($theURL) {
    $headers = get_headers($theURL);
    foreach ($headers as $key => $value){
        echo "$key => $value\n";
    }


    return substr($headers[0], 9, 3);
}

$image1 = 'http://www.reelfilmlocations.co.uk/uploads/images/thumbs/no-image.jpg';
$image2 = 'http://www.reelfilmlocations.co.uk/uploads/images/thumbs/Boston%20Manor%20M4-9.jpg';
$image3 = 'http://www.reelfilmlocations.co.uk/uploads/images/thumbs/thisimagedoesnotexist.jpg';
?>
IMAGE 1: <?php echo($image1); ?> (this image does exist)<br /><br />
<?php echo(remoteFileExists($image1)); ?><br />
<?php echo(get_response_code($image1)); ?><br />

<img src='<?php echo($image1); ?>'/><br /><br />

IMAGE 2: <?php echo($image1); ?> (this image does exist)<br />
<br />
<?php echo(remoteFileExists($image2)); ?><br />
<?php echo(get_response_code($image2)); ?><br />

<img src='<?php echo($image2); ?>'/><br /><br />


IMAGE 2: <?php echo($image3); ?> (this image does not exist)<br />
<br />
<?php echo(remoteFileExists($image3)); ?><br />
<?php echo(get_response_code($image3)); ?><br />

<img src='<?php echo($image3); ?>'/><br />
4

1 に答える 1

1

JS でプレースホルダーを表示した方がよいでしょう:

<img href="http://www.reelfilmlocations.com/images/myimage.jpg" onerror="this.src=PLACEHOLDER_URL"/>

また、画像パスを指定するには、「href」ではなく「src」を使用します

<img src="http://www.reelfilmlocations.com/images/myimage.jpg" onerror="this.src=PLACEHOLDER_URL"/>
于 2013-08-19T17:03:16.620 に答える