Я использую 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
Откройте php.ini. Искать и раскомментировать эту строку – extension=php_mysql.dll
(Пожалуйста, также проверьте, если директива PHP указывает, где находятся ваши расширения.
Mine – extension_dir = "C:\php-5.4.8-Win32-VC9-x86\ext"
)
Перезапустите 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');
пожалуйста, проверьте, что папка с ошибкой находится в папке приложения не в моем случае. Я заменяю папку ошибок в папке приложения