我需要查看CDN上是否存在特定图像。
我尝试了以下方法,但不起作用:
if (file_exists(http://www.example.com/images/$filename)) {
echo "The file exists";
} else {
echo "The file does not exist";
}
即使图像存在或不存在,它始终会显示“文件存在”。我不确定为什么它不起作用...
file_exists
对远程位置进行操作会非常缓慢。
我需要查看CDN上是否存在特定图像。
我尝试了以下方法,但不起作用:
if (file_exists(http://www.example.com/images/$filename)) {
echo "The file exists";
} else {
echo "The file does not exist";
}
即使图像存在或不存在,它始终会显示“文件存在”。我不确定为什么它不起作用...
file_exists
对远程位置进行操作会非常缓慢。
Answers:
您至少需要使用引号将文件名括起来(作为字符串):
if (file_exists('http://www.mydomain.com/images/'.$filename)) {
… }
另外,请确保$filename
已正确验证。然后,只有allow_url_fopen
在您的PHP配置中将其激活时,它才起作用
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。
@getimagesize('//path/to/image.jpg')
将不起作用)。
好吧,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";
}
public static function is_file_url_exists($url) {
if (@file_get_contents($url, 0, NULL, 0, 1)) {
return 1;
}
return 0;
}
如果文件在您的本地域中,则无需放置完整的URL。仅文件路径。如果文件位于其他目录中,则需要在路径前加上“。”。
$file = './images/image.jpg';
if (file_exists($file)) {}
通常是“。” 保留,实际上会导致该文件显示为不存在。
is_file
和之间的主要区别file_exists
。
is_file
对于(常规)文件返回true:
如果文件名存在并且是常规文件,则返回TRUE,否则返回FALSE。
file_exists
对于文件和目录均返回true:
如果文件名指定的文件或目录存在,则返回TRUE;否则,返回TRUE。否则为FALSE。
注意: 还要检查此stackoverflow问题以获取有关此主题的更多信息。
您必须使用绝对路径来查看文件是否存在。
$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可以在全球范围内用于使用您的代码以及网站网址来处理服务器上的文件。
WordPress的例子:
$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";
}
我在这里再走一英里:)。因为此代码不需要太多维护且非常可靠,所以我将用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';
您可以使用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';
}
您可以使用该file_get_contents
功能访问远程文件。有关详细信息,请参见http://php.net/manual/en/function.file-get-contents.php。
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;
}
}
参考网址:https : //hungred.com/how-to/php-check-remote-email-url-image-link-exist/
如果映像的路径是相对于应用程序根目录的,则最好使用以下代码:
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...');
}
我认为创建类似库的东西是一个好主意,以检查适用于不同情况的图像是否存在。除了许多出色的答案,您还可以使用它来解决此任务。
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
}
file_exists($filepath)
将返回目录和完整文件路径的真实结果,因此当不传递文件名时,并非总是解决方案。
is_file($filepath)
仅对完整文件路径返回true