PHP exit () из включенного скрипта, выйти из родительского скрипта? - PullRequest
26 голосов
/ 13 июня 2011

Если в PHP я использую функции include () или require () для запуска кода в другом скрипте, есть ли способ завершить родительский скрипт изнутри дочернего элемента?

Скажем, у меня есть это в parent.php:
require('child.php');

И это в child.php:
exit();

Будет ли это завершаться только child.php или parent.php?
Есть ли способ завершить parent.php из child.php без добавления дополнительного кода в parent.php?

Это для сложной пользовательской страницы ошибки 404 в PHP, которая определяет, была ли она вызвана Apache с использованием ErrorDocument, или же пользователь запросил страницу из нашей пользовательской CMS, которая не существует. Если это последнее, то я хочу просто потребовать мой 404.php (дочерний) и вывод от него, а не продолжать выполнение родителя.

Кто-нибудь знает, возможно ли завершить родительский сценарий PHP изнутри включенного / обязательного сценария?

Ответы [ 9 ]

53 голосов
/ 13 июня 2011

exit(); Будет ли это завершаться только child.php или parent.php?

Это завершит весь сценарий.

Если вы не хотите этого делать, но возвращаетесь к включаемому сценарию, вы можете return изнутри включить.

14 голосов
/ 08 января 2013

Вы ищете return; команда. Это прекратит выполнение только child.php, и parent.php будет обработан после этого.

3 голосов
/ 13 июня 2011

Кто-нибудь знает, возможно ли прекратить родительский скрипт PHP из внутри включенного / обязательного скрипта?

Вы можете использовать

die();

для завершения дальнейшего выполнения любого сценария в любой точке. Использование Die также положило конец родительским сценариям.

die("End");

Выводит "конец".

1 голос
/ 09 февраля 2013

Вы также можете прервать выполнение сценария, выбрасывая исключение и перехватывая его в одном из родительских сценариев.

Таким образом, вы можете с уверенностью контролировать, какие сценарии завершать и где продолжить в стеке файлов «include / require».

1 голос
/ 13 июня 2011

На самом деле строка exit; в вашем child.php завершит текущий процесс php, что означает, что parent.php будет успешно завершено.

1 голос
/ 13 июня 2011

die и exit прекратят работу без ущерба.Это команда уровня приложения, которую невозможно отловить или отменить.

0 голосов
/ 25 августа 2018

Вы можете использовать return , если вам нужно существовать включенный файл, но продолжить с основного скрипта.

возврат

(PHP 4, PHP 5, PHP 7)

return возвращает управление программой вызывающему модулю. Выполнение возобновляется с выражения, следующего за вызовом вызываемого модуля.

При вызове из функции returnstatement немедленно завершает выполнение текущей функции и возвращает ее аргумент как значение функции callcall. return также завершает выполнение оператора eval () или файла сценария.

Если вызывается из глобальной области видимости, то выполнение файла currenttscript заканчивается. Если текущий файл сценария был включен или необходим, управление передается обратно в вызывающий файл. Кроме того, если текущий файл сценария был включен, то значение, данное для возврата, будет возвращено как значение вызова include. Если return вызывается из основного файла сценария, выполнение сценария заканчивается. Если текущий файл скрипта был назван с помощью параметров auto_prepend_file или auto_append_fileconfiguration в php.ini, то выполнение этого файла скрипта заканчивается

0 голосов
/ 18 мая 2013

Вы можете попытаться вызвать исключение:

throw new Exception('An Error Ocurred');
0 голосов
/ 13 июня 2011

Использование exit() остановит выполнение скрипта и завершит работу ребенка и всех родителей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...