@Bozho уже предоставил отличный ответ
Обычно вы размещаете эти типы констант в объекте Configuration (который имеет геттеры и сеттеры) в контексте сервлета и получаете к ним доступ с помощью $ {applicationScope .config.url}
blockquote>Тем не менее, я чувствую, что нужен пример, чтобы он приносил немного большей ясности и оставлял чье-то время
@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); } }
Ошибки и предупреждения обычно появляются в ....\logs\php_error.log
или ....\logs\apache_error.log
в зависимости от ваших настроек php.ini.
Также полезные ошибки часто направляются в браузер, но поскольку они не являются действительными html, они не отображается.
Итак, "tail -f
"ваши файлы журналов, и когда вы получаете пустой экран, используйте параметры меню IE" view "->" source ", чтобы просмотреть исходный вывод.
Вы также можете запустить файл в терминале (командной строке) следующим образом: php -f filename.php
.
Это запускает ваш код и дает тот же результат в случае каких-либо ошибок, которые вы увидите в error.log
. В нем упоминается ошибка и номер строки.
Я также видел такие ошибки, когда конфигурационный файл fastcgi_params
или fastcgi.conf
неправильно включен в конфигурацию сервера. Итак, исправление для меня было глупо:
include /etc/nginx/fastcgi_params;
Принял мне час , чтобы узнать это ...
Для тех, кто использует nginx и имеет белый экран даже для файла с <?php echo 123;
. В моем случае у меня не было этой опции для PHP в файле конфигурации nginx:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
Этот параметр не был в файле fastcgi_params, поэтому PHP не работал и ошибок не было в журналах.
Некоторые приложения сами обрабатывают эти инструкции, вызывая что-то вроде этого:
error_reporting(E_ALL & ~E_DEPRECATED); or error_reporting(0);
И, таким образом, переопределение настроек .htaccess.
Можно зарегистрировать крючок, чтобы сделать последнюю ошибку или предупреждение видимым.
function shutdown(){
var_dump(error_get_last());
}
register_shutdown_function('shutdown');
добавление этого кода в начало вашего index.php поможет вам отладить проблемы.
Я всегда использую этот синтаксис в самом начале скрипта php.
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 'On'); //On or Off
Попробуйте настроить уровень сообщений об ошибках в ваших действительных файлах php. Или, как предложили другие, проверьте настройки сервера - это может быть что-то в php.ini или какое-то ограничение в отношении вашего хоста. Не просто полагайтесь на .htaccess. Кроме того, при поиске и устранении неисправностей print_r любые переменные, которые могут показаться подозрительными.
Следующий код должен отображать все ошибки:
<?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 без тестирования, но я уверен, что он работает.
Если ошибка указана в PHP-коде, вы можете использовать функцию error_reporting () в вашем коде, чтобы установить для всего отчета.
Однако это не справляется с ситуацией, когда сбой PHP. Информация об этом доступна только в журналах сервера. Возможно, у вас нет доступа к ним, но многие хостинг-провайдеры, с которыми я работал, могут каким-то образом позволить вам получить к нему доступ. Например, подход, который мне больше всего нравится, заключается в том, что он создает файл error_log в текущем каталоге, где находится .php. Попробуйте найти там или обратитесь к вашему провайдеру хостинга.
откройте свой php.ini, убедитесь, что он установлен:
display_errors = On
перезагружает ваш сервер.
, используя @inexistent_function_call();
в вашем коде, заставит intepreter спокойно умереть и прервать разбор скриптов. Вы должны проверить недопустимые функции и попытаться не использовать оператор подавления ошибок (@ char)
Вы уверены, что PHP действительно набирает настройку «display_errors
» из .htaccess? Проверьте выход функции phpinfo()
, чтобы убедиться.
Кроме того, вы должны проверить, чтобы убедиться, что вы не использовали «@
», это может затмить ваши ошибки, если вы использовали '@include ...' или '@some_function (...)', где-то рядом с трассировкой стека.
display_errors
отключен в серверной конфигурации, но он отображает меньше ошибок, таких как несоответствие номера параметра и т. д. Я вообще не использовал оператора @
в этом проекте и обычно стараюсь избегать его именно по этой причине.
– Matthew Scharley
25 September 2009 в 05:47