Артём Мáлков

Как проверить существование файла на 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 файлов всего за пару секунд.

Рекомендуем к просмотру
Как узнать размер файла по его URL на PHP?
Статьи и советы
Регулярное выполнение скрипта каждые N секунд на JavaScript
Статьи и советы
Как получить имена всех выбранных файлов в input[multiple] на jQuery?
Модули и скрипты
0
комментариев
Форма комментирования этого поста скрыта. Авторизуйтесь, чтобы расширить привилегии гостевого посещения и получить необходимую помощь от сообщества Pandoge.
Подняться наверх
«Pandoge» - помощник вебмастера