0

PHP を使用して、ファイルが存在するかどうかを判断する必要があります。

file_exists() を試しましたが、アクセス許可が制限されており、PHP がファイルのアクセス許可を読み取れるとは思えません。ファイルは写真で、URL 経由で表示できます。

例: http://www.seemeagain.com/users/1000002722/gallery_1312973080.jpg

is_readable() を試しましたが、結果はすべて存在しません。

また、index.php の関数を使用して正しく使用していることをテストすることも指摘しました。index.php を使用すると、正しい期待される結果が返されます。

偶然またはトリックによってファイルが存在することをテストするために使用できる別の PHP 関数はありますか?

ありがとうございました...

4

4 に答える 4

1

file_get_contentsを使用できると思います。失敗した場合はfalseを返し、成功した場合はファイルの内容を返します:http: //php.net/manual/en/function.file-get-contents.php

于 2011-08-10T11:55:42.073 に答える
0

PHPにファイルを読み取る権限がない場合、これらの関数はサーバー上でローカルにファイルにアクセスできるかどうかに依存するため、file_exists()またはis_readable()を介してファイルの存在を確認することはできません。

うまくいく唯一の解決策は、HTTPリクエストを使用してファイルが存在するかどうかを確認することです。

file_get_contents()を使用したAlexのソリューションは、これを行う1つの方法ですが、次のことを確認する必要があります。

allow_url_fopen = true

php.iniで、

file_get_contents("http://www.seemeagain.com/users/1000002722/gallery_1312973080.jpg")

HTTPからデータを取得できます(http://www.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen)。

ファイルがブラウザで読み取れる限り、存在を確認できますが、ファイル全体をダウンロードする必要があるため、トラフィックのオーバーヘッドが大きくなり、時間がかかります。

私の提案は使用することです

<?
$headers = get_headers("http://www.seemeagain.com/users/1000002722/gallery_1312973080.jpg");

if ($headers[0] == "HTTP/1.1 200 OK")
{
    // Your file does exist
}
elseif($headers[0] == "HTTP/1.1 404 Not Found")
{
    // Your file does not exist
}
else 
{
    // Some other headers...
    highlight_string(print_r($headers,1));
}

?>
于 2011-08-10T13:27:36.060 に答える
0

ローカル ファイルをチェックしようとしている場合:
file_exists()関数は、セーフ モードの制限によりアクセスできないファイルに対して FALSE を返します。だからこれを試してください:

   function my_file_exists($dir, $file)
   {
       $ret = exec("ls ".escapeshellarg($dir)." | grep ".escapeshellarg($file));
       return (!empty($ret));
   } 
于 2011-08-10T11:57:14.823 に答える
0

file_exists が機能しないを参照してください。短い: file_exists はサーバーのみをチェックし、URL のチェックには使用されません。curl などを使用してヘッダーを確認できます。

ドキュメントには次のように記載されています。

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

これは単に機能する可能性があることを意味しますが、通常は機能しません。

于 2011-08-10T11:59:35.643 に答える