Быстрый и надёжный хостинг на SSD-дисках от 220 ₽ в месяц   •   Реклама
Артём Мáлков

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

17 сен0 комм

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

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

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

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

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

Реализация:

<?php

	$file = "https://www.pandoge.com/logo.png"; // Ссылка на файл

	if(@fopen($file, "r")) {

		echo "Файл существует!";

	} else {

		echo "Файл отсутствует!";

	}

?>

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

<?php

	$images_all = [
		"https://www.pandoge.com/logo.png",
		"https://www.pandoge.com/logo_1.png",
		"https://www.pandoge.com/logo_2.png",
		"https://www.pandoge.com/logo_3.png",
		"https://www.pandoge.com/logo_4.png",
		"https://www.pandoge.com/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
комментариев
Форма комментирования этого поста скрыта. Авторизуйтесь, чтобы расширить привилегии гостевого посещения и получить необходимую помощь от сообщества Pandoge.
Подняться наверх
«Pandoge» - помощник вебмастера