Intereting Posts
PHP: использование exit (); или умереть(); после заголовка («Местоположение:»); php form submit – Q2 Есть ли более простой способ проверить, равна ли переменная множеству чисел? PHP продолжается внутри функции PHP: массив с высокой глубиной, как вернуть текущее имя ключа? Обрезаемая фатальная ошибка: объект класса __PHP_Incomplete_Class PHP и MySQL Выберите одно значение PHP html формат не работает Как реализовать маршрутизацию URL-адресов с помощью PHP + IIS? Получение фактического значения из узла PHP SimpleXML HTACCESS / PHP – переписывать URL-адрес при повторном указании на другой URL-адрес Рекомендации PHP: Im загружает массив $ GLOBALS с большим количеством информации, которая будет использоваться между моими php-страницами Массив реструктуризации на основе отношения родителя / ребенка Как сохранить изменение разметки, которое я сделал, при переходе с одной страницы на другую? include () в PHP ведет себя по-разному при обновлении XAMPP

require_once () или die () не работает

Кто-нибудь знает, почему мой require_once () или die (); не работает. Это всегда отображается Fatal error вместо сообщения об ошибке, которое я вставляю в die (). См. Ниже мой код:

require_once ('abc.php') or die("oops"); 

Отобразится сообщение об ошибке:

«Неустранимая ошибка: контроллер :: require_once () [function.require]: Не удалось открыть окно« 1 »(include_path = '….."

вместо сообщения ( «oops» ) я вхожу.

или имеет более высокий приоритет, чем require / require_once. Поэтому php оценивает

 ('abc.php') or die("oops") 

перед передачей результата require_once. Или принимает два булевых операнда. ('abc.php') оценивается как true, поэтому все выражение истинно и

 require_once true; 

вызывается. require_once принимает строку, bool (true) -> string => 1 =>

Неверное открытие необходимо « 1 »

Вам не нужно или умереть (…). Если файл не может быть прочитан, require_once все равно остановит экземпляр php.

Поскольку include – это специальная языковая конструкция, а не функция, ей не требуется paranthesis для списка пареметров:

Потому что include() – специальная языковая конструкция, круглые скобки не нужны вокруг аргумента. Будьте внимательны при сравнении возвращаемого значения.

На самом деле он имеет только один параметр и обертывание его в дополнительные круглые скобки ничего не меняет:

1 ≡ (1) ≡ ((1)) ≡ (((1))) ≡ …

Таким образом, ваше утверждение идентично этому (паремер только что завернут):

 require_once (('abc.php') or die("oops")); 

Таким образом, мы имеем логическое выражение как параметр, который является либо истинным, либо ложным . И эти значения имеют строковый эквивалент "1" и "" соответственно:

 var_dump((string) true === "1"); var_dump((string) false === ""); 

Вот почему для получения этого сообщения с ошибкой требуется сообщение об ошибке «1» .

Но использование скобок в нужном месте, как это делает его работу, как вы хотите:

 (@include_once 'abc.php') or die("oops"); 

Здесь 'abc.php' явно является параметром, и дизъюнкция с die("oops") выполняется по возвращаемому значению include_once . Оператор @ просто должен игнорировать сообщение об ошибке, includ_once будет includ_once , если файл не существует.

PS: print также является специальной конструкцией языка и работает одинаково.

При оценке:

 require_once ('abc.php') or die("oops"); 

По какой-то причине PHP сначала оценивает «ИЛИ умереть» («oops»). чтобы заставить PHP оценивать «require_once (« abc.php »)« закрепить его в скобках.

 (require_once ('abc.php')) OR die("oops"); 

Однако, если «require» терпит неудачу, PHP перестает обрабатывать, поэтому вместо этого используйте «include» (см. https://stackoverflow.com/a/2418514/1704651 ). Кроме того, символ @ до include_once подавляет сообщение об ошибке из MySQL, поэтому выводится только «oops».

 (@include_once ('abc.php')) OR die("oops"); 

Работает так, как ожидалось.

Источник: мое собственное разочарование и https://bugs.php.net/bug.php?id=22342