2015-01-09 3 views
3

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

if (!defined("something")) define("something", true); 

вместо только

define("something"; true); 

Второй фрагмент вызывает уведомление, если файл включен более одного раза. Аналогичная ситуация с индексами массива:

$data = array(); 
echo $data["does not exist"]; 

вызовет уведомление, так что мой предпочтительный способ заключается в следующем:

$data = array(); 
if (isset($data["does not exist"]) echo $data["does not exist"]; 
else echo "Missing info"; 

PHP обладает способностью подавлять эти сообщения, но я держу их поддержку, потому что я считаю, эти проверки хорошая практика, но мне не хватает доказательств того, что они нужны , и недавно сотрудник утверждал, что без кодирования нет никакого эффекта в кодировании.

Знаете ли вы о любых последствиях для безопасности при написании чеков? или я, возможно, являюсь paranoid и отключить уведомления приемлемо?

PS: Не уверен, что этот вопрос более подходит для StackOverflow, но не стесняйтесь сообщить мне, и я постараюсь его переместить.

+1

Если ни один из ответов не является приемлемым для вас, возможно, вы могли бы предоставить дополнительную информацию или уточнить, почему вы считаете, что на ваш вопрос не ответил? – Phizes

ответ

2

Избегание уведомлений - хорошая практика.

Возможно, вы должны изучить немного defensive programming и следовать The Right Way.

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

Хороший код никогда не производит уведомлений и ошибок, поскольку он контролирует ситуацию, когда они могут произойти.

3

Отключение уведомлений во время разработки неприемлемо, так как оно указывает на проблемы с вашим кодом. В идеале ваш код должен работать с уровнями сообщений об ошибках E_ALL и E_STRICT и не сообщать о каких-либо ошибках. Точные данные зависят от версии PHP, документация может быть найдена here.

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

Когда сайт находится в процессе производства, важно только регистрировать ошибки и установить ini.display_errors. Уменьшение уровня отчетности об ошибках в производстве может оказаться полезным, если невозможно обработать код, производящий большие количества определенных ошибок, но этот код следует исправить.

Я действительно считаю, что код должен избегать генерации уведомлений, это может быть «меньшая» проблема, но это по-прежнему проблема, о которой следует заботиться во время разработки.

Правильный способ избежать этих ошибок - просто избегать включения файлов более одного раза. (См.: include_once(), или require_once()) Если вы используете фреймворк, он, вероятно, включает в себя метод для обработки включает в себя для вас. Проконсультируйтесь с соответствующей документацией и убедитесь, что вы используете их реализацию для включения файлов.

+2

Эти уведомления могут также приводить к нефункциональному коду, более конкретным изменениям в заголовках из-за «отправленного уже отправленного» предупреждения – DarkBee

0

Существует множество способов обработки ошибок и исключений в системе. Я работал с большим количеством фреймворков и считаю, что они не полагаются на флаги display_errors и ini_config.

PHP имеет заблаговременное средство для обработки ошибок и исключение, генерируемый код с помощью set_exception_handler и set_error_handler. Поэтому, если вы хотите скрыть ошибки, вы можете отключить display_errors, но вы должны поставить выше двух функций для регистрации ваших ошибок.

Оборонительное программирование очень полезно, если вы хотите расслабиться и отдохнуть после загрузки работы над производственной стороной.

+0

** Скрытие ошибок никогда не решает проблемы! ** Рамки не полагаются на это, потому что они хотите охватить все возможные случаи неправильной настройки/использования сервера. Многие современные разработчики не могут подключиться к серверу и даже читать журналы, потому что они не хотят учиться, как это сделать. Обработчики, созданные для контроля над ситуацией. Пожалуйста, внимательно прочитайте [руководство] (http://php.net/manual/en/function.set-error-handler.php). – zoonman

+0

Я думаю, что не понял вопрос. Спасибо, хотя за упоминание «защитного программирования», это не новое для меня понятие, но я могу использовать его в аргументе – Purefan

Смежные вопросы