Я использую Codeigniter, и вместо сообщений об ошибках я просто получаю пустую страницу. Есть ли способ показать сообщения об ошибках PHP? Это очень сложно отлаживать, когда я не получаю обратной связи.
Моя среда - Ubuntu с Apache.
Я использую 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, где находятся ваши расширения.
Мина 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 в корневой папке. Это происходит:)
Если вы используете CI 2.0 или новее, вы можете изменить тип ENVIRONMENT
на index.php
на define('ENVIRONMENT', 'testing');
.
Кроме того, вы можете добавить php_flag display_errors on
в свой .htaccess
файл.
проверить, является ли error_reporting включенным на сервере или нет, если этот id отключен, вы не получите никаких ошибок и просто пустую страницу. если вы находитесь на общем сервере, вы можете включить отчет об ошибках через htaccess. В CodeIgniter добавьте следующее в htaccess
php_flag display_errors On
и установите
error_reporting(E_ERROR); ## or what ever setting desired in php
надеюсь, что это сработает для вас.
Прежде всего вам нужно предоставить разрешение вашей папки Codeigniter, это может быть проблема с разрешением, а затем запустить ваш сервер.
загрузите ваш помощник 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');
Вот как я решил ту же проблему, с которой вы, похоже, сталкиваетесь, надеюсь, что кому-нибудь это поможет.
i также столкнулась с одной и той же проблемой и попробовала почти все, но, наконец, я перезапустил свой сервер, и я обнаружил, что все началось нормально. Я не знаю, как..... я думаю, что это была проблема на стороне сервера почему мой PHP-код не выдавал никаких ошибок.
Если у вас есть это в вашем 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 в своем веб-сервере conf, скажите Nginx fastcgi_params:
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 ничего не отображает, возникает синтаксическая ошибка. В основном, если приложение работает без проблем ранее, просто просмотрите самые последние изменения. Для меня опыт на этот раз был всем приложением, а не только страницей. Поэтому я быстро проверил мозг на самые последние изменения, которые я сделал, и работал в обратном направлении, просматривая каждый файл, над которым я работал в этот день. Выяснилось, что некоторые предложения "where" в двух файлах модели: например, я имел
$this->db->where('Type' => 'Blog'); rather than $this->db->where('Type', 'Blog');
У меня была та же проблема, я установил последнюю версию xamp и обнаружил, что мой сайт не работает, после исследований и траты времени я нашел это.
Мне нужно включить следующий тег в файле php.ini short_open_tag = On
Обязательно перезапустите apache после этого.
Надеюсь, это поможет, большинство из этих проблем связаны с файлом php.ini или новой установкой, если ваш сайт уже работал, как другие люди, сталкивающиеся с подобной проблемой.
после установки xamp/wamp вы можете заметить несколько ошибок подобного характера. Если ваш сайт уже запущен, не беспокойтесь, это проблема, связанная с конфигурацией.
1) проверить соединения с базой данных в файле database.php внутри папки приложения 2) проверить файл config.php проверить правильность URL-адреса или нет? 3) по умолчанию короткие ярлыки в новых установках отключены, следуйте процедуре ниже
в файле php.ini измените "short_open_tag = Off" на "short_open_tag = On"
Обязательно перезапустите apache после этого.
надеюсь это поможет.
Ошибка, в моем случае, произошла из-за того, что мой сервер Apache был настроен для запуска PHP
как Fast CGI
, я изменил его на FPM
и он работал.
пожалуйста, проверьте, что папка с ошибкой находится в папке приложения не в моем случае я заменяю папку ошибок в папке приложения