web-dev-qa-db-ja.com

PHP:画像ファイルが存在するかどうかを確認する方法は?

特定のイメージがcdnに存在するかどうかを確認する必要があります。

私は次を試してみましたが、動作しません:

if (file_exists(http://www.example.com/images/$filename)) {
    echo "The file exists";
} else {
    echo "The file does not exist";
}

画像が存在しても存在しなくても、常に「ファイルが存在します」と表示されます。なぜ機能しないのか分かりません...

91
PaperChase

少なくとも引用符で囲まれたファイル名が必要です(文字列として):

if (file_exists('http://www.mydomain.com/images/'.$filename)) {
 … }

また、$filenameが適切に検証されていることを確認してください。そして、PHP configで allow_url_fopen が有効になっている場合にのみ機能します

118
knittl
if (file_exists('http://www.mydomain.com/images/'.$filename)) {}

これはうまくいきませんでした。私がやった方法は、getimagesizeを使用することでした。

$src = 'http://www.mydomain.com/images/'.$filename;

if (@getimagesize($src)) {

「@」は、イメージが存在しない場合(この場合、関数は通常エラーをスローする:getimagesize(http://www.mydomain.com/images/filename.png) [function.getimagesize]: failed)、falseを返すことに注意してください。

102

まあ、file_existsは、ファイルが存在するかどうかを示すのではなく、パスが存在するがあるかどうかを示します。 ⚡⚡⚡⚡⚡⚡⚡

したがって、ファイルかどうかを確認するには、is_filefile_existsと一緒に使用して、パスの後ろに実際にファイルがあるかどうかを確認する必要があります。そうでない場合はfile_existsは、既存のパスに対してtrueを返します。

これは私が使用する関数です:

function fileExists($filePath)
{
      return is_file($filePath) && file_exists($filePath);
}
13
Rizerzero

このようにしてみてください:

$file = '/path/to/foo.txt'; // 'images/'.$file (physical path)

if (file_exists($file)) {
    echo "The file $file exists";
} else {
    echo "The file $file does not exist";
}
12
pinaldesai

ファイルが存在するかどうかを確認する最も簡単な方法は次のとおりです。

if(is_file($filename)){
    return true; //the file exist
}else{
    return false; //the file does not exist
}
9
jfindley

最初に理解しなければならないこと:ファイルがありません
ファイルはfilesystemの対象ですが、URL以外のファイルをサポートしないHTTPプロトコルを使用してリクエストを行っています。

そのため、ブラウザを使用して存在しないファイルを要求し、応答コードを確認する必要があります。 404以外の場合、ラッパーを使用してファイルが存在するかどうかを確認することはできず、FTPなどのその他のプロトコルを使用してcdnを要求する必要があります

8

ファイルがローカルドメインにある場合、完全なURLを入力する必要はありません。ファイルへのパスのみ。ファイルが別のディレクトリにある場合は、パスの前に「。」を付ける必要があります。

$file = './images/image.jpg';
if (file_exists($file)) {}

多くの場合、「。」オフのままにしておくと、実際にはファイルが存在しないとして表示されます。

7
master_gracey
public static function is_file_url_exists($url) {
        if (@file_get_contents($url, 0, NULL, 0, 1)) {
            return 1;
        }

        return 0;           
    }
6
realmag777

is_filefile_existsには大きな違いがあります。

is_file (通常の)ファイルに対してtrueを返します:

TRUEファイル名が存在し、通常のファイルである場合、FALSE さもないと。

file_exists は、ファイルとディレクトリの両方に対してtrueを返します。

Filenameで指定されたファイルまたはディレクトリが存在する場合、TRUEを返します。 FALSEそれ以外の場合。


注:チェックも このstackoverflowの質問 このトピックの詳細については。

3
Wilt

cURLを使用できます。 cURLを取得すると、ヘッダーは提供されますが、本文は提供されないため、より高速になります。リクエストがタイムアウトになるのを待つため、不良ドメインは常に時間がかかる可能性があります。おそらくcURLを使用してタイムアウトの長さを変更できます。

以下に例を示します。

function remoteFileExists($url) {
$curl = curl_init($url);

//don't fetch the actual page, you only want to check the connection is ok
curl_setopt($curl, CURLOPT_NOBODY, true);

//do request
$result = curl_exec($curl);

$ret = false;

//if request did not fail
if ($result !== false) {
    //if request was ok, check response code
    $statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);  

    if ($statusCode == 200) {
        $ret = true;   
    }
}

curl_close($curl);

return $ret;
}
$exists = remoteFileExists('http://stackoverflow.com/favicon.ico');
if ($exists) {
echo 'file exists';
} else {
   echo 'file does not exist';   
}
2
manish1706

ファイルが存在するかどうかを確認するには、絶対パスを使用する必要があります。

$abs_path = '/var/www/example.com/public_html/images/';
$file_url = 'http://www.example.com/images/' . $filename;

if (file_exists($abs_path . $filename)) {

    echo "The file exists. URL:" . $file_url;

} else {

    echo "The file does not exist";

}

CMSまたはPHPフレームワーク用に書いている場合、私が知る限り、それらすべてがドキュメントルートパスの定数を定義しています。

たとえば、WordPressはABSPATHを使用します。ABSPATHは、コードとサイトのURLを使用してサーバー上のファイルを操作するためにグローバルに使用できます。

ワードプレスの例:

$image_path = ABSPATH . '/images/' . $filename;
$file_url = get_site_url() . '/images/' . $filename;

if (file_exists($image_path)) {

    echo "The file exists. URL:" . $file_url;

} else {

    echo "The file does not exist";

}

ここでさらに1マイル進みます:)。このコードはあまりメンテナンスが必要でなく、かなり堅実なので、私はif文を略記で書きます。

$image_path = ABSPATH . '/images/' . $filename;
$file_url = get_site_url() . '/images/' . $filename;

echo (file_exists($image_path))?'The file exists. URL:' . $file_url:'The file does not exist';

略式IFステートメントの説明:

$stringVariable = ($trueOrFalseComaprison > 0)?'String if true':'String if false';
2

file_get_contents関数を使用して、リモートファイルにアクセスできます。詳細については http://php.net/manual/en/function.file-get-contents.php を参照してください。

1
Kai

これを試して :

if (file_exists(FCPATH . 'uploads/pages/' . $image)) {
    unlink(FCPATH . 'uploads/pages/' . $image);
}
1
Dev_meno

Curlを使用している場合、次のスクリプトを試すことができます。

function checkRemoteFile($url)
{
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL,$url);
 // don't download content
curl_setopt($ch, CURLOPT_NOBODY, 1);
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
if(curl_exec($ch)!==FALSE)
{
    return true;
}
else
{
    return false;
}

}

参照URL: https://hungred.com/how-to/php-check-remote-email-url-image-link-exist/

0
Yogi Ghorecha

file_existsでサーバーパスが必要です

例えば

if (file_exists('/httpdocs/images/'.$filename)) {echo 'File exist'; }
0
Altravista

fopen()およびfread()を使用してHTTPから最初の5バイトを読み取り、次にこれを使用します。

DEFINE("GIF_START","GIF");
DEFINE("PNG_START",pack("C",0x89)."PNG");
DEFINE("JPG_START",pack("CCCCCC",0xFF,0xD8,0xFF,0xE0,0x00,0x10)); 

画像を検出します。

0
Peter

file_exists($filepath)は、ディレクトリと完全なファイルパスに対して真の結果を返します。そのため、ファイル名が渡されない場合、常に解決策とは限りません。

is_file($filepath)は完全なファイルパスに対してのみtrueを返します

0
PodTech.io

file_existsは、ファイルだけでなくパスも読み取ります。したがって、$filenameが空の場合、コマンドは次のように記述されているように実行されます。

file_exists("http://www.example.com/images/")

ディレクトリ/ images /が存在する場合、関数は引き続きtrueを返します。

私は通常このように書きます:

// !empty($filename) is to prevent an error when the variable is not defined
if (!empty($filename) && file_exists("http://www.example.com/images/$filename"))
{
    // do something
}
else
{
    // do other things
}
0
dapidmini

イメージへのパスがアプリケーションのルートを基準にしている場合、次のようなものを使用することをお勧めします。

function imgExists($path) {
    $serverPath = $_SERVER['DOCUMENT_ROOT'] . $path;

    return is_file($serverPath)
        && file_exists($serverPath);
}

この関数の使用例:

$path = '/tmp/teacher_photos/1546595125-IMG_14112018_160116_0.png';

$exists = imgExists($path);

if ($exists) {
    var_dump('Image exists. Do something...');
}

ライブラリのようなものを作成して、さまざまな状況に適用できるイメージの存在を確認することをお勧めします。上記の多くのすばらしい答えを使用して、このタスクを解決できます。

0
B. Bohdan