Информер курса валют ЦБ РФ   •   Магазин расширений
258 просм
0 комм
Поделиться:

Как проверить существование файла на PHP?

Бывают случаи, когда вам необходимо проверить, существует ли указанный файл или нет, например, для того чтобы в последующем совершить с файлом какие-то действия.

Я тоже при разработке модуля столкнулся с этим вопросом. И нашел два варианта решения поставленной задачи.

Проверка существования файла по URL-ссылке

В PHP существует функция «fopen», с помощью которой можно открыть указанный URL.

Что мы делаем? Пытаемся открыть файл, и если нам это удается, значит, файл существует, а противном же случае – файла нет.

Реализация:

<?php
	$file = "https://artem-malcov.ru/logo.png"; // Ссылка на файл
	if(@fopen($file, "r")) {
		echo "Файл существует!";
	} else {
		echo "Файл отсутствует!";
	}
?>

А что, если мы имеем не один файл, а несколько, так сказать, массив ссылок? Эта задача как раз и стояла изначально передо мной. И решение уже такой задачи следующее:

<?php
	$images_all = ["https://artem-malcov.ru/logo.png", "https://artem-malcov.ru/logo_1.png", "https://artem-malcov.ru/logo_2.png", "https://artem-malcov.ru/logo_3.png", "https://artem-malcov.ru/logo_4.png", "https://artem-malcov.ru/logo_5.png"];  // Исходный массив ссылок
	foreach($images_all as $image) {
		if(@fopen($image, "r")) {
			echo $image;
		}
	}
?>

В этом случае мы получаем список только тех файлов, которые существуют.

Проверка существования локального файла

Под словом «локальный» подразумевается, что скрипт и файлы для проверки находятся на одном сервере. Если у вас довольно большой массив ссылок – этот вариант самый лучший для решения задачи, так как мы делаем не запрос на сторонний сервер, а сканирование указанных директорий.

В этом способе используется функция «file_exists», и по аналогии с предыдущим вариантом просто заменяется часть скрипта:

<?php
	$file = "/logo.png"; // Ссылка на файл
	if(file_exists($file)) {
		echo "Файл существует!";
	} else {
		echo "Файл отсутствует!";
	}
?>

И то же самое для массива ссылок:

<?php
	$images_all = ["/logo.png", "/logo_1.png", "/logo_2.png", "/logo_3.png", "/logo_4.png", "/logo_5.png"];  // Исходный массив ссылок
	foreach($images_all as $image) {
		if(file_exists($image)) {
			echo $image;
		}
	}
?>

На что стоит обратить внимание? На то, что этот способ удобен для прогонки файлов, находящихся в пределах нашей файловой системы. Поэтому все ссылки желательно указывать относительные.

Кстати говоря, делая один из заказов, именно этим способом мне удалось просканировать порядка 135 000 файлов всего за пару секунд.

0
комментарий
Оставить комментарий:
Нажимая кнопку «Отправить» вы даете согласие на обработку своих персональных данных.
Ваше Имя
Ваш E-mail
Текст комментария