Пустая страница при попытке опубликовать новую тему на пользовательском форуме [duplicate]

@Bozho уже предоставил отличный ответ

Обычно вы размещаете эти типы констант в объекте Configuration (который имеет геттеры и сеттеры) в контексте сервлета и получаете к ним доступ с помощью $ {applicationScope .config.url}

Тем не менее, я чувствую, что нужен пример, чтобы он приносил немного большей ясности и оставлял чье-то время

@Component
public Configuration implements ServletContextAware {
    private String addressURL = Addresses.URL;

    // Declare other properties if you need as also add corresponding
    // getters and setters

    public String getAddressURL() {
        return addressURL;
    }

    public void setServletContext(ServletContext servletContext) {
        servletContext.setAttribute("config", this);
    }
}
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 19 August 2018 в 05:27
поделиться
  • 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 19 August 2018 в 05:27
поделиться

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

include /etc/nginx/fastcgi_params;

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

0
ответ дан anarcat 19 August 2018 в 05:27
поделиться

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

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

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

0
ответ дан AVKurov 19 August 2018 в 05:27
поделиться

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

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

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

0
ответ дан Denegen 19 August 2018 в 05:27
поделиться

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

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

register_shutdown_function('shutdown');

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

18
ответ дан Eduardo Oliveira 19 August 2018 в 05:27
поделиться
  • 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 19 August 2018 в 05:27
поделиться
  • 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 19 August 2018 в 05:27
поделиться
  • 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 19 August 2018 в 05:27
поделиться
  • 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
  • 5
    Pure Genius, единственный способ, которым я обнаружил, что ошибки отображаются независимо. – The Humble Rat 14 April 2015 в 14:44

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

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

-1
ответ дан Milan Babuškov 19 August 2018 в 05:27
поделиться

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

display_errors = On

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

4
ответ дан Otiel 19 August 2018 в 05:27
поделиться

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

0
ответ дан Quamis 19 August 2018 в 05:27
поделиться
16
ответ дан Sherif 19 August 2018 в 05:27
поделиться

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

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

2
ответ дан too much php 19 August 2018 в 05:27
поделиться
  • 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
14
ответ дан Uwe Keim 19 August 2018 в 05:27
поделиться
Другие вопросы по тегам:

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