0
$var = "http://site.com/image.png";

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

このスクリプトが常に を返すのはなぜfalseですか?

4

4 に答える 4

10

これは実際にはファイルではなく、URL であるためです。

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

PHP5 では、このページの注記に従って、一部の URL ラッパーのサポートを可能にするサポートが導入されました。

ヒント: PHP 5.0.0 以降、この関数は一部の URL ラッパーでも使用できます。サポートされているプロトコルとラッパーを参照して、どのラッパーが stat() ファミリの機能をサポートしているかを確認してください。

ラッパーについてはこちらで詳しく説明していますが、残念ながら、動作を許可するための前提条件である をサポートしhttpいませんstatfile_exists

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

于 2011-02-03T08:14:47.557 に答える
1

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

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

そして、HTTP ステータス コードを確認します。

于 2011-02-03T08:22:21.813 に答える
0

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

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

allow_url_fopenがONになっていることを確認してください。

于 2011-02-03T08:16:37.233 に答える
0

$var変数は、URL ではなく、システム上のパスを表す必要があります。例えば

$var = "/var/www/html/image.png";
于 2011-02-03T08:14:59.503 に答える