Также известна как Белая страница смерти или Белый экран смерти . Это происходит, когда отчет об ошибках отключен, и произошла фатальная ошибка (часто синтаксическая ошибка).
Если вы включили протоколирование ошибок, вы найдете конкретное сообщение об ошибке в своем журнале ошибок. Обычно это будет в файле php_errors.log, либо в центральном месте (например, /var/log/apache2
во многих средах Linux), либо в самом каталоге самого скрипта (иногда используется в среде совместного размещения).
Иногда может быть более простым временно отображать ошибки. На белой странице отобразится сообщение об ошибке. Будьте осторожны, потому что эти ошибки видны всем, кто посещает веб-сайт.
Это легко сделать, добавив в начале скрипта следующий код PHP:
ini_set('display_errors', 1); error_reporting(~0);
Код включит отображение ошибок и установит отчетность на самый высокий уровень.
Поскольку во время выполнения ini_set()
он не влияет на синтаксические ошибки синтаксиса. Эти ошибки появятся в журнале. Если вы хотите также отобразить их на выходе (например, в браузере), вам необходимо установить директиву display_startup_errors
на true
. Сделайте это либо в php.ini
, либо в .htaccess
или любом другом методе, который влияет на конфигурацию перед временем выполнения .
Вы можете использовать те же методы для установки параметра log_errors и error_log , чтобы выбрать ваше собственное место в файле журнала.
Если вы посмотрите в журнале или используете дисплей, вы получите гораздо лучшее сообщение об ошибке и строка кода, где ваш скрипт останавливается.
Похожие вопросы:
Связанные ошибки:
В C объявляя Ваше перечисление первый путь позволяет Вам использовать его как так:
TokenType my_type;
при использовании второго стиля Вы будете вынуждены объявить свою переменную как это:
enum TokenType my_type;
, Как упомянуто другими, это не имеет значения в C++. Мое предположение - то, что или человек, который записал это, является программистом C в глубине души, или Вы компилируете код C как C++. Так или иначе это не будет влиять на поведение Вашего кода.
Это - наследие C в C, если Вы делаете:
enum TokenType
{
blah1 = 0x00000000,
blah2 = 0X01000000,
blah3 = 0X02000000
};
необходимо будет использовать его делающий что-то как:
enum TokenType foo;
, Но если Вы делаете это:
typedef enum e_TokenType
{
blah1 = 0x00000000,
blah2 = 0X01000000,
blah3 = 0X02000000
} TokenType;
Вы будете в состоянии объявить:
TokenType foo;
, Но в C++, можно использовать только бывшее определение и использовать его, как будто это было в определении типа C.
Вы не должны делать этого. В C (не C++) Вы были обязаны использовать перечислимый Enumname для обращения к элементу данных перечислимого типа. Для упрощения его, Вас разрешили определение типа это к единственному типу данных имени.
typedef enum MyEnum {
//...
} MyEnum;
позволенные функции, берущие параметр перечисления, которое будет определено как
void f( MyEnum x )
вместо более длинного
void f( enum MyEnum x )
Примечание, что название имени типа не должно быть равно названию перечисления. То же происходит со структурами.
В C++, с другой стороны, это не требуется, поскольку перечисления, к классам и структурам могут получить доступ непосредственно как типы их имена.
// C++
enum MyEnum {
// ...
};
void f( MyEnum x ); // Correct C++, Error in C