2

問題: 一部の URL、特にリダイレクトしている URL で getimagesize() が機能しません。

グーグルで調べてstackoverflowをチェックしましたが、役に立ちませんでした。

ローカル マシンに表示される内容は次のとおりです。

var_dump(getimagesize('http://gan.doubleclick.net/gan_impression?lid=41000000015155731&pubid=21000000000506299&lsrc=17'));

> Array
(
    [0] => 120
    [1] => 90
    [2] => 2
    [3] => width="120" height="90"
    [bits] => 8
    [channels] => 3
    [mime] => image/jpeg
)

そして私のサーバー上:

var_dump(getimagesize('http://gan.doubleclick.net/gan_impression?lid=41000000015155731&pubid=21000000000506299&lsrc=17'));

> bool(false)

他の画像と URL を試してみましたが、うまくいきました。問題を引き起こしているのはこの URL です。私も(私のサーバーで)次のことを試しましたが、これはうまくいきます:

echo strlen(file_get_contents('http://gan.doubleclick.net/gan_impression?lid=41000000015155731&pubid=21000000000506299&lsrc=17'));

> 4829 // This number means it works

エラーログには何もありません。他にヒントはありません。php.iniで変更する必要があるものだと思います

4

4 に答える 4

3

ファイルallow_url_fopenで無効になっている可能性がありPHP.iniますか?PHP.iniファイルを編集するか、cUrl代わりに使用できます。

例:

<?php
//Download content
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, 'http://gan.doubleclick.net/gan_impression?lid=41000000015155731&pubid=21000000000506299&lsrc=17');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$file_contents = curl_exec($ch);
curl_close($ch);

file_put_contents('file', $file_contents); //Put content in ./file

var_dump(getimagesize('file')); //Get image size

unlink('file'); //Remove the file
?>
于 2012-12-04T10:27:04.093 に答える
2

うまくいけばfile_get_contents間違いなくfopenうまくいくでしょう

権限の問題があるため、Curlが最適なオプションでしたが、ファイル全体をローカルに保存する代わりに、FastImage ..を使用して画像ヘッダーを読み取って情報を取得することもできます。

$img = new FastImage("http://gan.doubleclick.net/gan_impression?lid=41000000015155731&pubid=21000000000506299&lsrc=17");
var_dump($img->getSize(),$img->getType());

出力

array (size=2)
  0 => int 120
  1 => int 90
string 'jpeg' (length=4)

簡単なデモ

于 2012-12-04T10:51:51.220 に答える
1

私が考えることができる2つのオプションがあります:

1)ファイルをコンピューターに取得し(cURLまたはfile_get_contentsを使用)、必要な処理を適用します

2)ヘッダー(cURLライブラリ)の呼び出しを行い、ステータス= 200かどうかを確認し、そうであればその関数を直接そこに適用し、他のhttpステータスコードの場合はリダイレクトに従うか、ファイルを無視します。

于 2012-12-04T10:26:52.203 に答える
1

それがあなたを助けることを願っています。そのリンクには 302 ヘッダーがあるため、残念ながら getimagesize はそのヘッダーを認識しません。サーバーにフェッチして、getimagesize が確実に機能するようにすることができます。

    // fetch content to local
    $content = file_get_contents($file_path);
    $fetch_from_remote = file_put_contents($to_local_path, $content);

    if($fetch_from_flag === FALSE){
        // error
    }

    // defining vars to resize photo
    $file_info = getimagesize($to_local_path);
于 2012-12-04T10:21:52.793 に答える