Ошибки при вызове функции exit() для fastCGI?

Я читал, что люди сталкиваются с проблемами при использовании функции выхода в своем php-скрипте при запуске fastCGI.

https://serverfault.com/questions/84962/php-via-fastcgi-terminated-by-calling-exit

http://php.net/manual/en/function.exit.php

«Следует отметить, что при создании сайта, работающего на FastCGI, вызов exit вызовет ошибку в файле журнала сервера. Он может быстро заполниться».

Однако мой журнал ошибок не сообщает об этой проблеме после запуска этого простого скрипта, хотя у меня настроен fastCGI:

<?php
$num=2;

if($num==2){
    exit();
}
?>

Будет ли безопасно использовать функцию выхода, пока у меня настроен fastCGI? И есть ли альтернативы функции выхода в php?

РЕДАКТИРОВАТЬ: я использую проверку формы формы функции exit() (т.е. если форма действительна, выход, если не анализировать все отправленные переменные в текстовые поля.)


person user784637    schedule 24.07.2011    source источник


Ответы (2)


Есть несколько законных причин для использования функции exit(), которая аналогична функции die(). Одним из примеров может быть использование заголовка Location: redirect.

Проверка формы — не место для использования die(). Структурируйте свой код так, чтобы вместо этого вы использовали функции или классы с методами, которые возвращают значения, и использовали логику ветвления.

С точки зрения fastcgi, если выход правильно используется для ситуаций, когда достигается код, которого не должно быть, тогда эти ситуации будут нетипичными, и несколько сообщений журнала не должны быть проблемой. Заполнение файла журнала кажется довольно глупой причиной, чтобы ничего не делать — активный веб-сервер регистрирует каждый запрос, и никто не спорит, что у вас не должно быть веб-журнала.

person gview    schedule 24.07.2011
comment
в отличие от незаконного использования? - person foxy; 24.07.2011

На справочной странице exit() есть действительно хорошая альтернатива exit(), опубликованная " dexen dot devries на gmail dot com":

Если вы хотите избежать вызова exit() в FastCGI в соответствии с комментариями ниже, но на самом деле хотите чисто выйти из вызова вложенной функции или включения, подумайте о том, чтобы сделать это способом Python:

определить исключение с именем `SystemExit', сгенерировать его вместо вызова exit() и перехватить его в index.php с пустым обработчиком, чтобы завершить выполнение скрипта без ошибок.

<?php

// file: index.php
class SystemExit extends Exception {}
try {
   /* code code */
}
catch (SystemExit $e) { /* do nothing */ }
// end of file: index.php

// some deeply nested function or .php file    

if (SOME_EXIT_CONDITION)
   throw new SystemExit(); // instead of exit()

?>
person foxy    schedule 24.07.2011