Ошибки при вызове функции exit () для fastCGI? - PullRequest
1 голос
/ 24 июля 2011

Я читал, что люди сталкиваются с проблемами при использовании функции выхода в своем 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 () (т. Е. Если форма является допустимым выходом, если не анализировать все опубликованные переменные втекстовые поля.)

Ответы [ 2 ]

2 голосов
/ 24 июля 2011

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

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

определите исключение с именем `SystemExit ', throwвместо вызова 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()

?>
2 голосов
/ 24 июля 2011

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

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

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

...