4

リモートサーバーから画像をダウンロードし、サイズを変更してローカルマシンに保存しようとしています。

これを行うには、WideImage を使用します。

<?php 

include_once($_SERVER['DOCUMENT_ROOT'].'libraries/wideimage/index.php');

include_once($_SERVER['DOCUMENT_ROOT'].'query.php');    


do { 


wideImage::load($row_getImages['remote'])->resize(360, 206, 'outside')->saveToFile($_SERVER['DOCUMENT_ROOT'].$row_getImages['local']);}

while ($row_getImages = mysql_fetch_assoc($getImages)); 


?>

これはほとんどの場合機能します。しかし、それには致命的な欠陥があります。

何らかの理由でこれらの画像のいずれかが利用できないか、存在しない場合。Wideimage は致命的なエラーをスローします。存在する可能性のある画像がダウンロードされないようにします。

このようにファイルが存在することを確認してみました

    do { 

if(file_exists($row_getImages['remote'])){

    wideImage::load($row_getImages['remote'])->resize(360, 206, 'outside')->saveToFile($_SERVER['DOCUMENT_ROOT'].$row_getImages['local']);}

}        
    while ($row_getImages = mysql_fetch_assoc($getImages)); 

しかし、これはうまくいきません。

私は何を間違っていますか??

ありがとう

4

3 に答える 3

5

このページによると、file_existsはリモートファイルをチェックできません。コメントの中で、回避策としてfopenを使用することを提案した人がいます。

<?php
function fileExists($path){
    return (@fopen($path,"r")==true);
}
?>
于 2011-05-06T14:57:37.167 に答える
0

ネットを掘り下げた後、明らかにオーバーヘッドが少ないため、CURL リクエストの代わりに HTTP ヘッダーをリクエストすることにしました。

これは PHP フォーラム ( http://php.net/manual/en/function.get-headers.php ) からの Nick のコメントを翻案したものです。

function get_http_response_code($theURL) {
   $headers = get_headers($theURL);
   return substr($headers[0], 9, 3);
}
$URL = htmlspecialchars($postURL);
$statusCode = intval(get_http_response_code($URL));

if($statusCode == 200) { // 200 = ok
    echo '<img src="'.htmlspecialchars($URL).'" alt="Image: '.htmlspecialchars($URL).'" />';
} else {
    echo '<img src="/Img/noPhoto.jpg" alt="This remote image link is broken" />';
}

ニックはこの機能を「迅速で厄介な解決策」と呼んでいますが、私にとってはうまく機能しています:-)

于 2016-08-03T00:14:26.710 に答える
0

CURL 経由で確認できます。

$curl = curl_init('http://example.com/my_image.jpg');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_NOBODY, TRUE);
$httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
if($httpcode < 400) {
  // do stuff
}
于 2011-05-06T15:02:03.287 に答える