Белый экран смерти на сайте php для определенного запроса?

Привет, у меня белый экран смерти на моем php-сайте, который возникает только при определенном запросе, и я не могу найти никаких ошибок. Я попытался просмотреть var/logs/apache2 и найти журнал ошибок php, но его не было.

Я использую yii. У меня есть страница со списком отфильтрованного содержимого. В моем контроллере у меня есть запрос:

     $model= Person::model()->findbyPk('12345');
     $list = $model->contacts;

«Контакты» — это отношение модели «человек», а список — это то, что я должен отображать. Если я опрашиваю людей с ключами «12345», «14256» и «23489», страница будет отображаться правильно. Но когда я запрашиваю конкретный «10012», он дает мне белый экран без ошибок и без формата стиля. Просто пустой экран. И это также загружает действительно дольше, чем другие запросы. Я попытался зарегистрировать его и проверить общие данные/среду выполнения, но он даже не дойдет до контроллера. Это просто происходит для этого конкретного Человека.

Что кажется наиболее вероятной причиной этого?


person Mika Sa    schedule 09.01.2014    source источник
comment
Есть ли в вашей базе данных запись с идентификатором человека 10012? Что возвращает ваш метод findbyPk(), если в базе данных нет соответствующей строки? Возможно, вам следует проверить $model, чтобы убедиться, что это объект, прежде чем разыменовывать его.   -  person Bill Karwin    schedule 09.01.2014
comment
Можете ли вы добавить некоторую отладочную информацию? возможно, как описано здесь. Попробуйте настроить какой-нибудь модульный тест, используя этот конкретный идентификатор, и посмотрите, какие ошибки сообщаются там.   -  person Ast Derek    schedule 09.01.2014
comment
Запустите этот запрос вне вашего php-приложения и посмотрите, что он возвращает. Белый экран часто свидетельствует о слишком большом количестве данных.   -  person Dan Bracuk    schedule 09.01.2014
comment
сохраните возвращенное значение в переменную сеанса, проверьте сообщение, что с идентификатором процесс работает нормально, и создайте дамп переменной сеанса, сообщите нам, что это дает.   -  person Rohan    schedule 09.01.2014
comment
Извините за поздний ответ, @DanBracuk был прав. Если ваш комментарий был только идентификатором ответа, проголосуйте за него. Думаю, я получил слишком много данных. Я уверен, что у меня модель 12345, потому что я сам проверил ее по базе данных. Слишком много было контактов.   -  person Mika Sa    schedule 15.01.2014


Ответы (3)


Вам нужно проверить, получаете ли вы результат в своей модели $ или нет. Попробуй это

$model= Person::model()->findbyPk('12345');
if($model=== NULL)
{
throw new CHttpException('I am empty. Please try another key');
}
else
{
// whatever you wanna do
    }
person Let me see    schedule 09.01.2014

Шаги:

1) Включите режим Yii DEBUG. 2) Включить все отчеты об ошибках на php. 3) Включить профилирование Yii с помощью это. и проверьте модель Person перед ее использованием, как показано ниже.

$model= Person::model()->findbyPk('12345');
if($model === NULL)
{
throw new CHttpException('There is no record with this key.');
}
// Normal expected code . 
person Chaulagai    schedule 09.01.2014
comment
Извините, но я был уверен, что ключ не пустой. Базу проверял сам. Если модель была нулевой, я уверен, что Yii выдаст ошибку «Попытка получить атрибут необъектного свойства» или что-то в этом роде. Я испытал это много раз раньше. - person Mika Sa; 15.01.2014

Основная проблема заключалась в том, что в отношении Person модели contacts было слишком много данных. Отношение было один ко многим. Решение заключалось в получении контактов другим способом/запросом.

В чем я до сих пор не уверен, так это в том, почему, когда я вхожу в контроллер, где запускаю запрос, он даже не достигает контроллера. Несмотря на то, что журнал был до запуска запроса, например.

   function actionListContacts() {
        Yii::log('Ireached this function');
        $request = Yii::app()->request;
        $personId = $request->get('personId');

        $model = Person::model()->findByPk($personId);
        // This is where the query for contacts should start..
        $contacts = $person->contacts;

        $this->render(['contacts' => $contacts]);
   } 

Если я использую идентификатор «12345», рендеринг проходит успешно, и если я проверю журналы, я увижу свой журнал. Но когда я использую 10012, что вызвало белую страницу, и я проверил журналы, он даже не достиг контроллера. И, кстати, id '10012' существует, проверил базу сам. :)

person Mika Sa    schedule 15.01.2014