特定のイメージがcdnに存在するかどうかを確認する必要があります。
私は次を試してみましたが、動作しません:
if (file_exists(http://www.example.com/images/$filename)) {
echo "The file exists";
} else {
echo "The file does not exist";
}
画像が存在しても存在しなくても、常に「ファイルが存在します」と表示されます。なぜ機能しないのか分かりません...
少なくとも引用符で囲まれたファイル名が必要です(文字列として):
if (file_exists('http://www.mydomain.com/images/'.$filename)) {
… }
また、$filename
が適切に検証されていることを確認してください。そして、PHP configで allow_url_fopen
が有効になっている場合にのみ機能します
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を返すことに注意してください。
まあ、file_exists
は、ファイルが存在するかどうかを示すのではなく、パスが存在するがあるかどうかを示します。 ⚡⚡⚡⚡⚡⚡⚡
したがって、ファイルかどうかを確認するには、is_file
をfile_exists
と一緒に使用して、パスの後ろに実際にファイルがあるかどうかを確認する必要があります。そうでない場合はfile_exists
は、既存のパスに対してtrue
を返します。
これは私が使用する関数です:
function fileExists($filePath)
{
return is_file($filePath) && file_exists($filePath);
}
このようにしてみてください:
$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";
}
ファイルが存在するかどうかを確認する最も簡単な方法は次のとおりです。
if(is_file($filename)){
return true; //the file exist
}else{
return false; //the file does not exist
}
最初に理解しなければならないこと:ファイルがありません。
ファイルはfilesystemの対象ですが、URL以外のファイルをサポートしないHTTPプロトコルを使用してリクエストを行っています。
そのため、ブラウザを使用して存在しないファイルを要求し、応答コードを確認する必要があります。 404以外の場合、ラッパーを使用してファイルが存在するかどうかを確認することはできず、FTPなどのその他のプロトコルを使用してcdnを要求する必要があります
ファイルがローカルドメインにある場合、完全なURLを入力する必要はありません。ファイルへのパスのみ。ファイルが別のディレクトリにある場合は、パスの前に「。」を付ける必要があります。
$file = './images/image.jpg';
if (file_exists($file)) {}
多くの場合、「。」オフのままにしておくと、実際にはファイルが存在しないとして表示されます。
public static function is_file_url_exists($url) {
if (@file_get_contents($url, 0, NULL, 0, 1)) {
return 1;
}
return 0;
}
is_file
とfile_exists
には大きな違いがあります。
is_file
(通常の)ファイルに対してtrueを返します:
TRUEファイル名が存在し、通常のファイルである場合、FALSE さもないと。
file_exists
は、ファイルとディレクトリの両方に対してtrueを返します。
Filenameで指定されたファイルまたはディレクトリが存在する場合、TRUEを返します。 FALSEそれ以外の場合。
注:チェックも このstackoverflowの質問 このトピックの詳細については。
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';
}
ファイルが存在するかどうかを確認するには、絶対パスを使用する必要があります。
$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';
file_get_contents
関数を使用して、リモートファイルにアクセスできます。詳細については http://php.net/manual/en/function.file-get-contents.php を参照してください。
これを試して :
if (file_exists(FCPATH . 'uploads/pages/' . $image)) {
unlink(FCPATH . 'uploads/pages/' . $image);
}
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/
file_existsでサーバーパスが必要です
例えば
if (file_exists('/httpdocs/images/'.$filename)) {echo 'File exist'; }
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));
画像を検出します。
file_exists($filepath)
は、ディレクトリと完全なファイルパスに対して真の結果を返します。そのため、ファイル名が渡されない場合、常に解決策とは限りません。
is_file($filepath)
は完全なファイルパスに対してのみtrueを返します
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
}
イメージへのパスがアプリケーションのルートを基準にしている場合、次のようなものを使用することをお勧めします。
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...');
}
ライブラリのようなものを作成して、さまざまな状況に適用できるイメージの存在を確認することをお勧めします。上記の多くのすばらしい答えを使用して、このタスクを解決できます。