2016-10-06 2 views
5

У меня был старый codesetup от другого разработчика и Я настраиваю же на моем сервере, там я увидел линиюМожно ли использовать @ символ в имени переменной PHP

<?php @$Days = $_POST['Days']; ?> 

Этот код работает хорошо на моем локальная настройка, но как только я загрузил ее на сервер, это не сработало и вернуло сетевую ошибку, и весь код/​​HTML после этого кода также не работал.

Хотя, я отладил эту проблему и удалил ее. Кроме того, я знаю, что для обработки ошибок мы используем символ @, а также я прочитал this question

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

Для ошибки отчетности я расскажу вам, что я уже использовал код ниже

<?php 
ini_set("display_errors", "1"); 
error_reporting(E_ALL); 
?> 

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

+0

Вы уверены, что прочитали этот вопрос? '@' подавляет/игнорирует ошибки, и вы не обрабатываете ошибки, игнорируя их. это как сказать, что вы обрабатываете долги по кредитным картам, игнорируя уведомления о погашении, которые вы получаете. –

+0

Да, и я знаю, что @ надменяет ошибку некоторыми функциями, я не понимаю, что она делает в моем случае, перед именем переменной. –

+0

* «для обработки ошибок мы используем символ @» * - это неправильно. Поставив '@' перед оператором, вы не обрабатываете ошибки. Вы [притворяетесь, что этого не произошло] (http://php.net/manual/en/language.operators.errorcontrol.php). Это большая разница. – axiac

ответ

4

@ - оператор подавления ошибок в PHP, посмотрите на documentation.

В вашем примере, он используется перед именем переменной, чтобы избежать ошибки E_NOTICE. Если в массиве $ _POST ключ «Дни» не установлен, он будет генерировать сообщение E_NOTICE, но @ используется там, чтобы избежать этого E_NOTICE.

Причина, по которой код не работает на сервере, вероятно, связан с отключенной конфигурацией scream.enabled directive in your php.ini.

Отключение scream должно решить проблему.

Изменение директивы в вашем php.ini, например так:

scream.enabled = 0 

Если вы хотите, чтобы отключить его во время выполнения, то вы можете использовать ini_set, как указано в руководстве:

ini_set('scream.enabled', false); 

Редактировать

Кто-то в комментариях указал, я не был достаточно тщательно с моим ответом. Я попытаюсь изменить мою ошибку в этом здесь edit :).

Причина, по которой крик (и отключение @) может/нарушит код, связан с тем, что переменная не имеет значения. Если оставшаяся часть кода пытается использовать переменную, она выдает ошибку.

Кроме того, E_NOTICE может выдать ошибку, если вы присоедините к ней обработчик ошибок. Цитата из another question:

Приведенный выше код будет сгенерировано ErrorException любой раз, E_NOTICE или E_WARNING поднимается, фактически завершая вывод скрипта (если исключение не поймали).Исключение исключений при ошибках PHP лучше всего в сочетании с параллельной стратегией обработки исключений (set_exception_handler), чтобы изящно прекратить производство .

+2

Уведомление не остановит выполнение, без нашего крика, поэтому я не уверен, что это действительно поможет. – IMSoP

+0

Правда, это не всегда приведет к ошибке, но без фактического сообщения об ошибке это лучшее, что я мог бы сделать :) Позвольте мне добавить некоторую информацию в ответ, чтобы улучшить ее, спасибо. –

+0

Спасибо за информацию @RickvanLieshout, я отлаживал это дальше, и на самом деле объявление переменной не вызывало ошибки. Он использовался как Это действительно вызвало проблему. –

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