mysqli_connect () vs новое подключение и запросы PDO [дубликат]

Вам просто нужно переименовать ib_logfile0 и ib_logfile1 как ib_logfile_0 и ib_logfile_1. Тогда ваша проблема будет решена.

103
задан hakre 10 December 2012 в 07:23
поделиться

15 ответов

Ошибки и предупреждения обычно появляются в ....\logs\php_error.log или ....\logs\apache_error.log в зависимости от ваших настроек php.ini.

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

Итак, "tail -f "ваши файлы журналов, и когда вы получаете пустой экран, используйте параметры меню IE" view "->" source ", чтобы просмотреть исходный вывод.

46
ответ дан Jens 22 August 2018 в 02:41
поделиться
  • 1
    К сожалению, просмотр источника страницы ничего не показывает. – Matthew Scharley 25 September 2009 в 05:40
  • 2
    Ошибки анализа должны быть видны в журнале ошибок Apache, независимо от того, какой параметр у вас где-либо еще. Если у вас нет контроля над сервером, тогда получение журнала ошибок apache может быть затруднено, но я предлагаю вам поговорить с вашим провайдером, и есть способы предоставить вам журнал ошибок. Кроме того, я могу только предложить, что другие - проверить ваш код на синтаксический анализ ошибок на локальном сервере разработки, прежде чем развертывать его на производстве. Кроме того, надежная среда разработки, такая как PDT Eclipse, может оказать большую помощь. – Guss 25 September 2009 в 07:51
  • 3
    Возвращаясь к этому, у меня недавно возникла проблема с переполнением стека, которая не вызывала ошибок, даже в журналах, и не проявлялась сама по себе, пока я не установил xdebug на сервер. Гах. – Matthew Scharley 31 May 2011 в 00:44

Вы также можете запустить файл в терминале (командной строке) следующим образом: php -f filename.php.

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

0
ответ дан Aamnah 22 August 2018 в 02:41
поделиться

Я также видел такие ошибки, когда конфигурационный файл fastcgi_params или fastcgi.conf неправильно включен в конфигурацию сервера. Итак, исправление для меня было глупо:

include /etc/nginx/fastcgi_params;

Принял мне час , чтобы узнать это ...

0
ответ дан anarcat 22 August 2018 в 02:41
поделиться

Для тех, кто использует nginx и имеет белый экран даже для файла с <?php echo 123;. В моем случае у меня не было этой опции для PHP в файле конфигурации nginx:

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

Этот параметр не был в файле fastcgi_params, поэтому PHP не работал и ошибок не было в журналах.

0
ответ дан AVKurov 22 August 2018 в 02:41
поделиться

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

error_reporting(E_ALL & ~E_DEPRECATED); or error_reporting(0);

И, таким образом, переопределение настроек .htaccess.

0
ответ дан Denegen 22 August 2018 в 02:41
поделиться

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

function shutdown(){
  var_dump(error_get_last());
}

register_shutdown_function('shutdown');

добавление этого кода в начало вашего index.php поможет вам отладить проблемы.

18
ответ дан Eduardo Oliveira 22 August 2018 в 02:41
поделиться
  • 1
    спас мне жизнь! – webmaster 4 April 2017 в 17:13
  • 2
    Это чистое золото для людей, которые застряли в веб-хостах, которые не показывают ошибок, но допускают нулевой доступ к журналу – Rafael Mena Barreto 26 April 2017 в 18:34

Я всегда использую этот синтаксис в самом начале скрипта php.

ini_set('error_reporting', E_ALL);
ini_set('display_errors', 'On');  //On or Off
28
ответ дан FDisk 22 August 2018 в 02:41
поделиться
  • 1
    Извините, но -1 за то, что вы не читали другие ответы, уже опубликованные. Об этом заботятся в .htaccess, как уже упоминалось несколько раз. – Matthew Scharley 25 September 2009 в 08:57
  • 2
    обычный "бесплатный хостинг" игнорирует .htaccess – FDisk 25 September 2009 в 09:02

Попробуйте настроить уровень сообщений об ошибках в ваших действительных файлах php. Или, как предложили другие, проверьте настройки сервера - это может быть что-то в php.ini или какое-то ограничение в отношении вашего хоста. Не просто полагайтесь на .htaccess. Кроме того, при поиске и устранении неисправностей print_r любые переменные, которые могут показаться подозрительными.

2
ответ дан Lewis LaCook 22 August 2018 в 02:41
поделиться
  • 1
    У меня нет доступа к php.ini. И когда появляются эти ошибки, это синтаксическая ошибка, поэтому print_r не помогает. – Matthew Scharley 25 September 2009 в 05:36
  • 2
    Если у вас нет доступа к php.ini, вы не должны разрабатываться на этом сервере. Используйте общий хостинг для производства, свою локальную машину для разработки. – carl 25 September 2009 в 05:46
  • 3
    И когда в производстве происходят ошибки? Мы все хотели бы верить, что этого не происходит, но это так. – Matthew Scharley 25 September 2009 в 05:48
  • 4
    Если у вас есть ошибка синтаксического анализа в производстве, что-то не так с вашей моделью разработки. :) Если у вас другая ошибка, вы не хотите, чтобы эта ошибка отображалась пользователю в любом случае +, у вас должен быть правильный механизм обработки ошибок. – carl 25 September 2009 в 05:53
  • 5
    Я бы предложил вам загрузить apache XAMP или WAMPserver и настроить среды разработки на вашем ПК. Если ваша среда рабочей станции ограничена вашей серверной средой, вы можете использовать portableapps.com/apps/development/xampp , которая не требует каких-либо прав администратора или специальных привилегий для установки и запуска. – James Anderson 25 September 2009 в 06:06

Следующий код должен отображать все ошибки:

<?php

// ----------------------------------------------------------------------------------------------------
// - Display Errors
// ----------------------------------------------------------------------------------------------------
ini_set('display_errors', 'On');
ini_set('html_errors', 0);

// ----------------------------------------------------------------------------------------------------
// - Error Reporting
// ----------------------------------------------------------------------------------------------------
error_reporting(-1);

// ----------------------------------------------------------------------------------------------------
// - Shutdown Handler
// ----------------------------------------------------------------------------------------------------
function ShutdownHandler()
{
    if(@is_array($error = @error_get_last()))
    {
        return(@call_user_func_array('ErrorHandler', $error));
    };

    return(TRUE);
};

register_shutdown_function('ShutdownHandler');

// ----------------------------------------------------------------------------------------------------
// - Error Handler
// ----------------------------------------------------------------------------------------------------
function ErrorHandler($type, $message, $file, $line)
{
    $_ERRORS = Array(
        0x0001 => 'E_ERROR',
        0x0002 => 'E_WARNING',
        0x0004 => 'E_PARSE',
        0x0008 => 'E_NOTICE',
        0x0010 => 'E_CORE_ERROR',
        0x0020 => 'E_CORE_WARNING',
        0x0040 => 'E_COMPILE_ERROR',
        0x0080 => 'E_COMPILE_WARNING',
        0x0100 => 'E_USER_ERROR',
        0x0200 => 'E_USER_WARNING',
        0x0400 => 'E_USER_NOTICE',
        0x0800 => 'E_STRICT',
        0x1000 => 'E_RECOVERABLE_ERROR',
        0x2000 => 'E_DEPRECATED',
        0x4000 => 'E_USER_DEPRECATED'
    );

    if(!@is_string($name = @array_search($type, @array_flip($_ERRORS))))
    {
        $name = 'E_UNKNOWN';
    };

    return(print(@sprintf("%s Error in file \xBB%s\xAB at line %d: %s\n", $name, @basename($file), $line, $message)));
};

$old_error_handler = set_error_handler("ErrorHandler");

// other php code

?>

Единственный способ создать пустую страницу с этим кодом - это когда у вас есть ошибка в обработчике выключения. Я скопировал и вставил это из своих собственных cms без тестирования, но я уверен, что он работает.

150
ответ дан m4dm4x1337 22 August 2018 в 02:41
поделиться
  • 1
    Большое спасибо, это действительно полезно и вытащило меня из массивной дыры :) +1 – David Passmore 24 March 2014 в 04:08
  • 2
    это должен быть принятый ответ, это помогло мне с этим в приложении doctrine / symfony2. – Alexander Kludt 1 August 2014 в 12:25
  • 3
    спасибо, что спасли мой день, очень полезно! – SuN 3 September 2014 в 15:54
  • 4
    Я получаю пустую страницу из этого кода. Что вы имеете в виду, «у вас есть ошибка в обработчике выключения», и что я должен сделать, чтобы решить проблему? – Paolo M 25 September 2014 в 00:08
  • 5
    Pure Genius, единственный способ, которым я обнаружил, что ошибки отображаются независимо. – The Humble Rat 14 April 2015 в 14:44

Если ошибка указана в PHP-коде, вы можете использовать функцию error_reporting () в вашем коде, чтобы установить для всего отчета.

Однако это не справляется с ситуацией, когда сбой PHP. Информация об этом доступна только в журналах сервера. Возможно, у вас нет доступа к ним, но многие хостинг-провайдеры, с которыми я работал, могут каким-то образом позволить вам получить к нему доступ. Например, подход, который мне больше всего нравится, заключается в том, что он создает файл error_log в текущем каталоге, где находится .php. Попробуйте найти там или обратитесь к вашему провайдеру хостинга.

-1
ответ дан Milan Babuškov 22 August 2018 в 02:41
поделиться

откройте свой php.ini, убедитесь, что он установлен:

display_errors = On

перезагружает ваш сервер.

4
ответ дан Otiel 22 August 2018 в 02:41
поделиться

, используя @inexistent_function_call(); в вашем коде, заставит intepreter спокойно умереть и прервать разбор скриптов. Вы должны проверить недопустимые функции и попытаться не использовать оператор подавления ошибок (@ char)

0
ответ дан Quamis 22 August 2018 в 02:41
поделиться

Это проблема загрузки или конфигурации времени выполнения

. Важно признать, что во время этапа компиляции или синтаксического анализа происходит синтаксическая ошибка или синтаксическая ошибка, что означает, что PHP закладывает деньги до того, шанс выполнить любой из ваших кодов. Поэтому, если вы изменяете конфигурацию PHP display_errors во время выполнения (это включает в себя что угодно: от использования ini_set в вашем коде до использования .htaccess, который является файлом конфигурации во время выполнения), тогда загружаются только загруженные настройки конфигурации по умолчанию.

Как всегда избегать WSOD в разработке

Чтобы избежать WSOD, вы хотите убедиться, что загруженный файл конфигурации имеет display_errors и error_reporting установлен на -1 ( это эквивалент E_ALL, потому что он обеспечивает включение всех битов независимо от того, какая версия PHP вы используете ). Не печатайте постоянное значение E_ALL, потому что это значение может быть изменено между разными версиями PHP.

Загруженная конфигурация - это либо ваш загруженный файл php.ini, либо ваш apache.conf или httpd.conf или файл virtualhost. Эти файлы читаются только один раз на этапе запуска (когда вы сначала запускаете apache httpd или php-fpm, например) и только переопределены изменениями конфигурации времени выполнения. Убедившись, что display_errors = 1 и error_reporting = -1 в загруженном файле конфигурации гарантируют, что вы никогда не увидите WSOD независимо от синтаксиса или ошибки синтаксического анализа, которые происходят до изменения времени выполнения, например ini_set('display_errors', 1); или error_reporting(E_ALL); может иметь место.

Как найти загруженные файлы конфигурации (php.ini)

Чтобы найти загруженные файлы конфигурации, просто создайте новый файл PHP только с помощью следующего кода ...

<?php
phpinfo();

Затем укажите ваш браузер и посмотрите на загруженный файл конфигурации и дополнительные файлы .ini, которые обычно находятся в верхней части вашего phpinfo() и будут содержать абсолютный путь ко всем ваши загруженные файлы конфигурации.

Если вы видите (none) вместо файла, это означает, что у вас нет файла php.ini в файле Configuration (php.ini). Таким образом, вы можете загрузить файл php.ini в комплекте с PHP отсюда и скопировать его в свой путь к файлу конфигурации как php.ini, затем убедитесь, что ваш пользователь php имеет достаточные разрешения для чтения из этого файла. Вам нужно будет перезагрузить httpd или php-fpm, чтобы загрузить его. Помните, что это файл development php.ini, который поставляется в комплекте с источником PHP. Так что, пожалуйста, не используйте его в производстве!


Просто не делайте этого в производстве

Это действительно лучший способ избежать WSOD в разработке. Любой, кто предположил, что вы положили ini_set('display_errors', 1); или error_reporting(E_ALL); наверху вашего PHP-скрипта или используете .htaccess, как вы это делали, не поможет вам избежать WSOD при возникновении синтаксиса или синтаксического анализа (как в вашем случае здесь ), если ваш загруженный файл конфигурации отключен display_errors.

Многие люди (и фондовые установки PHP) будут использовать файл production-ini, который по умолчанию отключен display_errors, что обычно приводит к это то самое разочарование, которое вы испытали здесь. Поскольку PHP уже отключился, когда он запускается, он сталкивается с синтаксической или синтаксической ошибкой и не дает ничего для вывода. Вы ожидаете, что ваш ini_set('display_errors',1); в верхней части вашего PHP-скрипта должен был избежать этого, но не имеет значения, не может ли PHP не разобрать ваш код, потому что он никогда не достигнет времени исполнения.

16
ответ дан Sherif 22 August 2018 в 02:41
поделиться

Вы уверены, что PHP действительно набирает настройку «display_errors» из .htaccess? Проверьте выход функции phpinfo(), чтобы убедиться.

Кроме того, вы должны проверить, чтобы убедиться, что вы не использовали «@», это может затмить ваши ошибки, если вы использовали '@include ...' или '@some_function (...)', где-то рядом с трассировкой стека.

2
ответ дан too much php 22 August 2018 в 02:41
поделиться
  • 1
    Это. display_errors отключен в серверной конфигурации, но он отображает меньше ошибок, таких как несоответствие номера параметра и т. д. Я вообще не использовал оператора @ в этом проекте и обычно стараюсь избегать его именно по этой причине. – Matthew Scharley 25 September 2009 в 05:47
  • 2
    Вы также должны проверить, что display_errors не изменяется скриптом PHP где-то. – too much php 25 September 2009 в 05:56
  • 3
    Я построил эту структуру с нуля, так что нет, это не так (если что-то в основном меняет ее по какой-то причине ...) – Matthew Scharley 25 September 2009 в 06:18
  • 4
    Если вы вызываете неопределенную функцию (для генерации фатальной ошибки), вы видите это сообщение об ошибке? – too much php 25 September 2009 в 07:11

Не знаю, если это поможет, но вот часть моего стандартного файла конфигурации для проектов php. Я не слишком зависеть от конфигураций apache даже на моем собственном сервере.

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

Отредактировано для показа APPLICATON_LIVE

/*
APPLICATION_LIVE will be used in process to tell if we are in a development or production environment.  It's generally set as early as possible (often the first code to run), before any config, url routing, etc.
*/

if ( preg_match( "%^(www.)?livedomain.com$%", $_SERVER["HTTP_HOST"]) ) {
    define('APPLICATION_LIVE', true);
} elseif ( preg_match( "%^(www.)?devdomain.net$%", $_SERVER["HTTP_HOST"]) ) {
    define('APPLICATION_LIVE', false);
} else {
    die("INVALID HOST REQUEST (".$_SERVER["HTTP_HOST"].")");
    // Log or take other appropriate action.
}


/*
--------------------------------------------------------------------
DEFAULT ERROR HANDLING
--------------------------------------------------------------------
Default error logging.  Some of these may be changed later based on APPLICATION_LIVE.
*/
error_reporting(E_ALL & ~E_STRICT);
ini_set ( "display_errors", "0");
ini_set ( "display_startup_errors", "0");
ini_set ( "log_errors", 1);
ini_set ( "log_errors_max_len", 0);
ini_set ( "error_log", APPLICATION_ROOT."logs/php_error_log.txt");
ini_set ( "display_errors", "0");
ini_set ( "display_startup_errors", "0");

if ( ! APPLICATION_LIVE ) {
    // A few changes to error handling for development.
    // We will want errors to be visible during development.
    ini_set ( "display_errors", "1");
    ini_set ( "display_startup_errors", "1");
    ini_set ( "html_errors", "1");
    ini_set ( "docref_root", "http://www.php.net/");
    ini_set ( "error_prepend_string", "<div style='color:red; font-family:verdana; border:1px solid red; padding:5px;'>");
    ini_set ( "error_append_string", "</div>");
}
14
ответ дан Uwe Keim 22 August 2018 в 02:41
поделиться
  • 1
    Из любопытства, где APPLICATION_LIVE обычно определяется? – Matthew Scharley 25 September 2009 в 11:46
  • 2
    @Matthew Scharley - Обновлено. – Eli 25 September 2009 в 22:36
  • 3
    @Eli. У этого есть накладные расходы во время выполнения, хотя на страницу запроса . – Pacerier 14 October 2014 в 10:35
  • 4
    up 1 для концепции, которая не учитывает настройки отладки, однако сервер настроен, хорошо, пока вы развертываете или поддерживаете (в разработке) – justnajm 20 July 2017 в 10:04
Другие вопросы по тегам:

Похожие вопросы: