Задать вопрос
yaleksandr89
@yaleksandr89
PHP developer

Как реализовать функцию проверки подключения файла?

Привет всем!
Сейчас решил написать простенькую функцию для проверки подключения файла и в случае ошибки выдавать предупреждение с именем и расположением файла, который не удалось подключить. В целом, саму функцию написал:
<?php function files_connection( $paths = [] ) {
	var_dump($paths);
	foreach ( $paths as $path_file ) {
		$file_name = end( explode( '/', $path_file ) );
		if ( !file_exists( __DIR__ . $path_file ) ) {
			echo "
				<div class=\"alert_danger_file_connection\">
					<h1>Ошибка при подключении файла!</h1>
					<p>Не удалось подключить файл: <mark>{$path_file}</mark></p>
					<p>Проверьте наличие файла по указанному пути: <mark>{$file_name}</mark></p>
				</div>
			";
			exit;
		} else {
			include_once( __DIR__ . $path_file );
		}
	}
}

В этой функции не могу реализовать следующее, например мы подключаем несколько файлов:
files_connection([
	'/inc/menu/class-bootstrap-navwalker.php', // корректный путь
	'/inc/menu/header-main222.php', // некорректный путь
	'/inc/menu/header-main222.php', // некорректный путь
        ...
]);

Функция отработает следующим образом: предупреждение она выкинет при первом некорректном пути и завершит работу скрипта, что вполне логично...

Как добиться того, чтобы функция перечисляла имена подключаемых файлов, которые имеют некорректные пути? Есть предположение, что необходимо разбить функцию на две, в первой получаем массив, вторая функция будет обрабатывать полученные значения.

Но никак не могу понять, как сделать так, чтобы на экране появлялись все некорректно подключаемые пути, а не только первый после которого завершается работа...
  • Вопрос задан
  • 207 просмотров
Подписаться 3 Простой 2 комментария
Решения вопроса 2
coderisimo
@coderisimo
Общая идея :

function files_connection( $paths = [] ) {
  var_dump($paths);
$allFilesAvailable = true;  //  вот здесь вы отслеживаете наличие всех файлов
  foreach ( $paths as $path_file ) {
    $file_name = end( explode( '/', $path_file ) );
    if ( !file_exists( __DIR__ . $path_file ) ) {
    $allFilesAvailable = false; // если хотя-бы одного нет - дальше этого скрипта дело не пойдет

      echo "
        <div class=\"alert_danger_file_connection\">
          <h1>Ошибка при подключении файла!</h1>
          <p>Не удалось подключить файл: <mark>{$path_file}</mark></p>
          <p>Проверьте наличие файла по указанному пути: <mark>{$file_name}</mark></p>
        </div>
      ";
  
    } else {

if( $allFilesAvailable)
      include_once( __DIR__ . $path_file );
    }
  }
  
  
  if(!$allFilesAvailable)// УПС!
      exit;
}
Ответ написан
@hesy
Aleksandr Yurchenko если хотите показать все файлы, то вам необходимо вместо echo кидать путь файла в массив, потом по завершению цикла проверять, если кол-во элементов массива >0, то опять же через цикл (как вариант) показать уже ваше echo с некорректными файлами.

Функция

function files_connection( $paths = [] ) {
	$bad_files = []; // задаём массив для некорректных файлов
	foreach ( $paths as $path_file ) {
		$file_name = end( explode( '/', $path_file ) );
		if ( !file_exists( __DIR__ . $path_file ) ) {
			$bad_files[] = [$path_file, $file_name]; // складываем в массив некорректные файлы
		} else {
			include_once( __DIR__ . $path_file );
		}
	}
	
	// если нашли некорректные файлы
	if (count($bad_files) > 0){
		// показываем некорректные файлы
		foreach ($bad_files as $file) {
			echo "
				<div class=\"alert_danger_file_connection\">
				  <h1>Ошибка при подключении файла!</h1>
				  <p>Не удалось подключить файл: <mark>{$file[0]}</mark></p>
				  <p>Проверьте наличие файла по указанному пути: <mark>{$file[1]}</mark></p>
				</div>
			";
		}
		exit();
	}
}



Код не проверял.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Stalker_RED
@Stalker_RED
Выбросить это все, использовать обычный require_once.
А на случай ошибок подключить обработчиик:
https://www.php.net/manual/ru/book.errorfunc.php

Или вообще переделать все на авттозагрузку.
https://www.php-fig.org/psr/psr-4/
Ответ написан
Комментировать
Eridani
@Eridani
Мимо проходил
Вы сами завершаете свой цикл через exit, естественно, убивая скрипт на первом же попавшемся некорректном ответе.
Итог - убрать exit
Ответ написан
anton_reut
@anton_reut
Начинающий веб-разработчик
1. Отключить отображение стандартных ошибок и warning-ов
2. Добавить в код каждой функции некий "флаг" и затем проверять где есть флаг а где нет, где нет выводить ошибку и путь до файла.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы