Codeigniter отображает пустую страницу вместо сообщений об ошибках

Я использую Codeigniter, и вместо сообщений об ошибках я просто получаю пустую страницу. Есть ли способ показать сообщения об ошибках PHP? Это очень сложно отлаживать, когда я не получаю обратной связи.

Моя среда – Ubuntu с Apache.

Поскольку ни одно из решений, похоже, пока не работает для вас, попробуйте следующее:

ini_set('display_errors', 1); 

http://www.php.net/manual/en/errorfunc.configuration.php#ini.display-errors

Это явно указывает PHP на отображение ошибок. В некоторых средах по умолчанию может быть отключено.

Вот как выглядят мои настройки среды в index.php :

 /* *--------------------------------------------------------------- * APPLICATION ENVIRONMENT *--------------------------------------------------------------- */ define('ENVIRONMENT', 'development'); /* *--------------------------------------------------------------- * ERROR REPORTING *--------------------------------------------------------------- */ if (defined('ENVIRONMENT')) { switch (ENVIRONMENT) { case 'development': // Report all errors error_reporting(E_ALL); // Display errors in output ini_set('display_errors', 1); break; case 'testing': case 'production': // Report all errors except E_NOTICE // This is the default value set in php.ini error_reporting(E_ALL ^ E_NOTICE); // Don't display errors (they can still be logged) ini_set('display_errors', 0); break; default: exit('The application environment is not set correctly.'); } } 

Убедитесь, что установлен php5-mysql .

У меня была эта же проблема, и, как заметил Шаян Хусайни, у меня была необнаруживаемая синтаксическая ошибка.

Я решил это, используя php linter в терминале:

 php -l file.php 

Вы также можете использовать что-то подобное, чтобы использовать linter в каждом файле в некоторой папке:

 find -type f -name "*.php" -exec php -l '{}' \; 

И для фильтрации только тех, у кого есть ошибки:

 find -type f -name "*.php" -exec php -l '{}' \; | grep '^[^N]' 

Это должно показывать файлы с ошибками синтаксического анализа и строку, где есть ошибка.

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

вы можете установить его в главном index.php

  define('ENVIRONMENT', 'development'); /* *--------------------------------------------------------------- * ERROR REPORTING *--------------------------------------------------------------- * * Different environments will require different levels of error reporting. * By default development will show errors but testing and live will hide them. */ if (defined('ENVIRONMENT')) { switch (ENVIRONMENT) { case 'development': error_reporting(E_ALL); break; case 'testing': case 'production': error_reporting(0); break; default: exit('The application environment is not set correctly.'); } } 

Это происходит со мной, когда я делаю автозагрузку в autoload.php, как «база данных»,

Чтобы решить эту проблему, если вы используете ОС Windows

  1. Откройте php.ini. Искать и раскомментировать эту строку – extension=php_mysql.dll

    (Пожалуйста, также проверьте, если директива PHP указывает, где находятся ваши расширения.
    Mine – extension_dir = "C:\php-5.4.8-Win32-VC9-x86\ext" )

  2. Перезапустите Apache и обновите страницу.

У меня была такая же проблема пару дней назад. Моя среда разработки – это Win8, и сайт работает нормально, но когда я загрузил файлы на рабочий сервер (Linux), отображалась пустая страница.

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

Файл должен быть назван «Blog.php» с капиталом «B».

Имена классов должны начинаться с буквы верхнего регистра.

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

Надеюсь, я помог.

Попробуйте добавить это в свой файл index.php

 error_reporting(E_ALL); 

Убедитесь, что у вас нет пустого файла index.html в корневой папке. Бывает 🙂

проверьте, включен ли error_reporting на сервере или нет, если этот идентификатор вы не получите никаких ошибок и просто пустую страницу. если вы находитесь на общем сервере, вы можете включить отчет об ошибках через htaccess. В CodeIgniter добавьте следующее в htaccess

 php_flag display_errors On 

и установить

 error_reporting(E_ERROR); ## or what ever setting desired in php 

надеюсь, что это сработает для вас

Прежде всего, вам нужно предоставить разрешение вашей папки Codeigniter, это может быть проблема с разрешением, а затем запустить ваш сервер.

Если вы используете CI 2.0 или новее, вы можете изменить тип index.php в своем index.php для define('ENVIRONMENT', 'testing'); ,
Кроме того, вы можете добавить php_flag display_errors on в ваш файл .htaccess .

загрузите ваш помощник URL, когда вы создаете функцию, например,

 visibility function_name () { $this->load->helper('url'); } 

он покажет вам ошибки или загруженное представление.

Вы используете символ @ где угодно?

Если у вас есть что-то вроде:

 @include('page_with_error.php'); 

Вы получите пустую страницу.

Я столкнулся с этим, потому что у меня был CLI, запущенный через cron в качестве пользователя root, создав таким образом файлы журналов с помощью root: root. Когда вы пытались перейти к URI, все было бы нормально, но CI показывал пустую страницу, вероятно, потому, что у нее не было права на запись в файл журнала.

Codeigniter, похоже, не выдает сообщение об ошибке, когда я ссылался на представление, которого не было.

В моем примере у меня был мой контроллер:

 $this->load->view('/admin/index/access_controls/groups/add'); 

Поскольку файл не существует, я получил пробел «Произошла ошибка страницы». Я изменил код на:

 $this->load->view('/admin/access_controls/groups/add'); 

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

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

Если у вас есть это в php.ini:

 display_error = On; 

и вы имеете это в своем приложении CI одновременно

 error_reporting(0); 

вы получите HTTP / 1.1 200 OK и полностью банковскую страницу.

Это связано с тем, что когда display_error включен, php-fpm всегда возвращает HTTP-код 200. И все ошибки для вывода запрещены error_reporting (0).

Для приложения CI запись index.php устанавливает рабочую среду как сильфон:

 if(isset($_SERVER['SERVER_ENV'])) { define('ENVIRONMENT', $_SERVER['SERVER_ENV']); } else { define('ENVIRONMENT', 'development'); } if (defined('ENVIRONMENT')) { switch (ENVIRONMENT) { case 'development': error_reporting(E_ALL); ini_set('display_errors', 1); break; case 'testing': case 'production': error_reporting(0); break; default: exit('The application environment is not set correctly.'); } } 

Короче говоря, когда вы устанавливаете директиву ENV в конфиге вашего веб-сервера, скажем, fastcgi_params от Nginx:

 fastcgi_param SERVER_ENV production; 

то CI автоматически установит

 error_reporting(0); 

Другим методом является проверка того, что вы случайно превысили ошибку в своем коде. Найдите весь свой код для любого экземпляра error_reporting (). Если вы вызываете его без параметров, он просто возвращает текущий уровень и безвреден. Если вы вызываете его с параметром, например 0 (ноль), он отключит отчет об ошибках.

Вы можете проверить это в CodeIgnitor, посмотрев их основную библиотеку в разделе ../system/core/Common.php и найдя раздел, который находится по строке 615, которая выглядит так:

 if (($severity & error_reporting()) !== $severity) { return; } 

Добавьте что-то вроде:

 if (($severity & error_reporting()) !== $severity) { echo "Suppressing errors!"; return; } 

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

Часто, когда codeigniter ничего не отображает, возникает синтаксическая ошибка. В основном, если приложение работает без проблем ранее, просто просмотрите самые последние изменения. Для меня опыт на этот раз был всем приложением, а не только страницей. Поэтому я быстро проверил мозг на самые последние изменения, которые я сделал, и работал в обратном направлении, просматривая каждый файл, над которым я работал в этот день. Оказалось, что это некоторые «где» в двух файлах модели: например, я

 $this->db->where('Type' => 'Blog'); rather than $this->db->where('Type', 'Blog'); 

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