PHP: как проверить, существует ли файл изображения?
Мне нужно увидеть, существует ли определенное изображение на моем cdn.
Я пробовал следующее, И это не работает:
if (file_exists(http://www.example.com/images/$filename)) {
echo "The file exists";
} else {
echo "The file does not exist";
}
даже если изображение существует или не существует, оно всегда говорит "файл существует". Я не уверен, почему это не работает...
18 ответов
вам нужно имя файла в кавычках по крайней мере (как строка):
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.
Ну 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";
}
вещь, которую вы должны понять сначала:у вас нет файлов.
Файл является предметом файловой системы, но вы делаете свой запрос с использованием протокола HTTP, который поддерживает только URL-адреса.
Итак, вы должны запросить несуществующих файл с помощью браузера и посмотреть код ответа. если это не 404, вы не можете использовать какие-либо обертки, чтобы увидеть, существует ли файл, и вам нужно запросить cdn, используя какой-либо другой протокол, например FTP
вот самый простой способ проверить, существует ли файл:
if(is_file($filename)){
return true; //the file exist
}else{
return false; //the file does not exist
}
Если файл находится в вашем локальном домене,вам не нужно указывать полный 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 для (регулярные) файлы:
возвращает правда если filename существует и является обычным файлом, FALSE иначе.
file_exists
возвращает true для обоих файлов и каталогов:
возвращает правда если файл или каталог, заданный параметром filename, существует; 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 framework, то, насколько я знаю, все они определили константу для корневого пути документа.
e.G WordPress использует ABSPATH, который можно использовать глобально для работы с файлами на сервере, используя ваш код, а также url-адрес сайта.
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";
}
Я собираюсь пройти лишнюю милю здесь :). Потому что этот код не понадобится много обслуживание и довольно солидное, я бы написал его как стенографию, если бы заявление:
$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';
Стенография, если заявление объясняется:
$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 для деталей.
попробуйте это :
if (file_exists(FCPATH . 'uploads/pages/' . $image)) {
unlink(FCPATH . 'uploads/pages/' . $image);
}
читать первые 5 байт формы HTTP с помощью fopen()
и fread()
тогда используйте это:
DEFINE("GIF_START","GIF");
DEFINE("PNG_START",pack("C",0x89)."PNG");
DEFINE("JPG_START",pack("CCCCCC",0xFF,0xD8,0xFF,0xE0,0x00,0x10));
для обнаружения изображения.
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 только для полностью filepaths
Если вы используете 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/
вам нужен путь к серверу с file_exists
if (file_exists('/httpdocs/images/'.$filename)) {echo 'File exist'; }