PHP молча терпит неудачу, когда php-код находится внутри тега html - PullRequest
2 голосов
/ 10 июня 2010

ПРОБЛЕМА ОБНОВЛЕНА, ПРОЧИТАЙТЕ НИЖЕ

По какой-то причине мой CI не работает автоматически при загрузке представления.
Представление загрузки просто вызывается из контроллера

$this->load->view('templates/default.php');

Теперь. В загруженном представлении есть некоторые функции, которые не определены, если только не загружен надлежащий помощник. Обычно php выдает ошибку, но вместо этого он молча завершается неудачей. Понятия не имею почему. Шаблон выводится до строки, содержащей неопределенную функцию.

Мне потребовалось много времени, чтобы понять, где мой сценарий не работает.

Вот мои настройки:

  • Windows 7 Ultimate
  • Apache 2.2.15
  • PHP 5.3.2 со следующими настройками отчетов об ошибках:
    • display_errors = On
    • display_startup_errors = On
    • error_reporting = E_ALL | E_STRICT
  • CodeIgniter 1.7.2

Есть идеи, почему это так?


UPDATE

После дальнейшей отладки выяснилось, что PHP не сообщает о каких-либо ошибках, когда код php встроен в HTML и находится внутри тега HTML. Теперь это странно.

Возвращает фатальную ошибку:

<p><?php echo $bogus(); ?></p>

Это не происходит и молча терпит неудачу:

<p class="<?php echo $bogus(); ?>">paragraph</p>

Почему? : O


ОБНОВЛЕНИЕ 2

Дальнейшие исследования показали, что если в PHP указано error_log, то в этом файле фактически сообщается об ошибках, но все же нет в браузере ... Опять же, почему?


ОБНОВЛЕНИЕ 3

На самом деле мой код должен немного отличаться. Проверил другую установку PHP на совершенно другой машине, и это подтвердило ошибку PHP. Сообщается здесь: http://bugs.php.net/bug.php?id=52040

Ответы [ 6 ]

2 голосов
/ 11 июня 2010

Спасибо за помощь, ребята. Вы не поверите, в чем была проблема!
Сам браузер !!! Chrome 6-dev на самом деле.
На самом деле это было полное удаление неверной строки html.

Дальнейшие испытания показали:

  • IE8 нормально отображает ошибку в браузере (что на самом деле не так, как должно быть видно только в источнике)
  • Firefox 3.6 показывает ошибку в источнике
  • Opera 10.53 показывает ошибку в источнике

Еще раз спасибо за вашу помощь.

0 голосов
/ 11 июня 2010

Без необходимости изменения политики отображения ошибок для всего приложения вы можете добавить

ini_set('display_errors', 1);
error_reporting(E_ALL); // Or what ever fits

//If one would like to log the errors one could use
ini_set('log_errors', 1);
ini_set('error_log', FILE_TO_LOG_TO);

к рассматриваемому сценарию.

0 голосов
/ 10 июня 2010

Причина действительно довольно проста. Это потому, что браузер не отображает вашу ошибку, но если вы щелкните правой кнопкой мыши -> Просмотреть исходный код, вы можете увидеть ошибку в исходном коде HTML.

<p class="<?php echo $bogus(); ?>">paragraph</p>

будет выводить

<p class="Fatal error: Call to undefined function on line ...">paragraph</p>

или что-то подобное. Браузер просто думает, что эти слова являются коллекцией CSS-классов, поэтому вы ничего не видите на своем экране. Он содержится в атрибуте HTML.

0 голосов
/ 10 июня 2010

Попытка получить доступ к объекту, которого там нет, приведет к тихой (пустой экран) ошибке.

0 голосов
/ 10 июня 2010

Найдите в файле /system/application/config/config.php и /index.php файл и проверьте, какой уровень отчетов об ошибках CI дает команду PHP.

В верхней части файла index.php находится следующее, которое должно решить вашу проблему:

/*
|---------------------------------------------------------------
| PHP ERROR REPORTING LEVEL
|---------------------------------------------------------------
|
| By default CI runs with error reporting set to ALL.  For security
| reasons you are encouraged to change this when your site goes live.
| For more info visit:  http://www.php.net/error_reporting
|
*/
    error_reporting(E_ALL);

А в конфигурационном файле (для полноты) есть следующее:

/*
|--------------------------------------------------------------------------
| Error Logging Threshold
|--------------------------------------------------------------------------
|
| If you have enabled error logging, you can set an error threshold to 
| determine what gets logged. Threshold options are:
| You can enable error logging by setting a threshold over zero. The
| threshold determines what gets logged. Threshold options are:
|
|   0 = Disables logging, Error logging TURNED OFF
|   1 = Error Messages (including PHP errors)
|   2 = Debug Messages
|   3 = Informational Messages
|   4 = All Messages
|
| For a live site you'll usually only enable Errors (1) to be logged otherwise
| your log files will fill up very fast.
|
*/
$config['log_threshold'] = 2;

Я считаю, что это только для регистрации, а не для отображения.

0 голосов
/ 10 июня 2010

Посмотрите документацию по обработке ошибок , вы можете заставить CI создавать свои собственные отчеты об ошибках.

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