プロが教えるわが家の防犯対策術!

お世話になります。

$IMG_URL = "http://hoge.hoge/";
$test = 1;
$logo_url = $IMG_URL."logo/".$test."jpg";
if(file_exists($logo_url)){
$var = "あるよ!";
}else{
$var = "ないよ!";
}

という形で画像ファイルが存在するかを調べているのですが、PHPに直接記述した場合動作し、functionの中に入れると動作しなくなるのはなぜでしょうか?

function pict($test){
$IMG_URL = "http://hoge.hoge/";
$test = 1;
$logo_url = $IMG_URL."logo/".$test."jpg";
if(file_exists($logo_url)){
$var = "あるよ!";
}else{
$var = "ないよ!";
}
return $var;
}

上記のfunction内に入れた場合、returnの値が「ないよ!」になってしまうのです。

どうぞよろしくお願い致します。

A 回答 (2件)

file_existsはHTTP経由では使えません。

ステータスコードを調べる手段が最も適切なのではないでしょうか。

function url_exists($url) {
$h = (array)@get_headers($url);
return $h[0] && !strpos($h[0], '404');
}
    • good
    • 1
この回答へのお礼

ご回答ありがとう御座いました。
上記の方法でIf分岐が行えました。大変助かりました。

しかしなぜ同じ記述で動く箇所と動かない箇所があるのかがいまいちまだ把握できませんが…無事動いてなによりです。

functionの中ではHTTP経由になってしまうとかなのでしょうか?

お礼日時:2013/11/11 21:41

function版の


> $test = 1;
は何のためにあるのでしょうか?
具体的にどんな呼び出しをしたのでしょうか?
このプログラムだと"1jpg"というファイルの存在を探そうとしますが、それで正しいのですか?(1.jpg ではありません)

プログラムに間違いがあるか、ここに書いたときに間違えたのか、まずははっきりさせましょう。
表示させる等、$logo_url が実際にはどんな文字列になっているかを調べ、それが期待したものかどうかを調べましょう。可能はら、本体に記述したものと、functionに記述したもので違いが無いか調べましょう。

ここに書かれた内容だと、同じ hogehoge/logo/1jpg の存在を調べようとし、同じ結果になると思います。

この回答への補足

記述間違い失礼しました。

function版の「$test=1;」は不要で、echoした「$logo_url」(http://hogehoge/logo/1.jpg)をブラウザに貼り付けると画像が表示されるのですが…。

補足日時:2013/11/10 21:53
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!