$var = "http://site.com/image.png";
if (file_exists($var))
echo 'yes';
else
echo 'no';
このスクリプトが常に を返すのはなぜfalse
ですか?
$var = "http://site.com/image.png";
if (file_exists($var))
echo 'yes';
else
echo 'no';
このスクリプトが常に を返すのはなぜfalse
ですか?
これは実際にはファイルではなく、URL であるためです。
PHP5 までは、このfile_exists
関数はファイルまたはディレクトリが存在するかどうかを検出することを目的としていました。
PHP5 では、このページの注記に従って、一部の URL ラッパーのサポートを可能にするサポートが導入されました。
ヒント: PHP 5.0.0 以降、この関数は一部の URL ラッパーでも使用できます。サポートされているプロトコルとラッパーを参照して、どのラッパーが stat() ファミリの機能をサポートしているかを確認してください。
ラッパーについてはこちらで詳しく説明していますが、残念ながら、動作を許可するための前提条件である をサポートしてhttp
いませんstat
file_exists
。
サーバー上で実行している場合は、それを使用して変換する$_SERVER['DOCUMENT_ROOT']
か、別の方法を見つけてファイル システム上で見つけることができます。
リモートファイル(実際には「リソース」)の存在を確認したい場合は、次を使用します。
$i = get_headers($url);
$ok = strpos($i[0], "200");
そして、HTTP ステータス コードを確認します。
次に、サーバーが PHP 内からの外部接続を許可していない可能性があります。
これを確認するには、ローカル ファイルを開いて、それが機能するかどうかを確認します。そうであれば、あなたのコードは正しいです。
allow_url_fopen
がONになっていることを確認してください。
$var
変数は、URL ではなく、システム上のパスを表す必要があります。例えば
$var = "/var/www/html/image.png";