2011-02-03 6 views
0
$var = "http://site.com/image.png"; 

if (file_exists($var)) 
    echo 'yes'; 
else 
    echo 'no'; 

なぜこのスクリプトは常にfalseを返しますか?file_exists常にfalse

+1

あなたのコンピュータ(またはWebサーバー)の物理パスではなくURLを参照しているので、 – Phill

答えて

10

ではなく、実際にはファイルではなくURLです。

PHP5まで、file_exists関数は、ファイルまたはディレクトリが存在するかどうかを検出するためのものでした。

ヒント: PHP 5.0.0の時点では、この機能がいくつかともに使用することができますサポートはthis page上の音符当たりとして、いくつかのURLラッパーのサポートを可能にするために導入されたPHP5で

、 URLラッパー。どのラッパーがstat()ファミリの機能をサポートしているかは、サポートされているプロトコルとラッパーを参照してください。

ラッパーはfile_existsが動作することを可能にhere詳細しかし、残念ながら、the http one does not support stat、前提条件です。

サーバーで実行している場合は、おそらく$_SERVER['DOCUMENT_ROOT']を使用してファイルを変換するか、別の方法でファイルシステム上にファイルを見つけることができます。

0

変数には、URLではなくシステム上のパスを記述する必要があります。たとえば、

$var = "/var/www/html/image.png"; 
0

あなたのサーバーは、おそらくPHP内からの外部接続を許可していない可能性があります。

これはローカルファイルを開いて確認できます。そうであれば、あなたのコードは正しいです。

allow_url_fopenがオンに設定されていることを確認してください。

+0

気にしないで、私は結論に飛びついた。 @ paxdiabloには正しい答えがあります。 – berkes

1

リモートファイル(実際には、「リソース」)の存在を確認したい場合は、使用します。

$i = get_headers($url); 
$ok = strpos($i[0], "200"); 

を、HTTPステータスコードを確認してください。

関連する問題