你如何格式化PHP错误消息?他们不尊重CSS

时间:2011-03-03 23:30:05

标签: php css

每当PHP输出错误消息时,它会忽略css和设计精美的页面,方法是输出页面顶部的消息,删除任何阻碍它的方式。

例如

some code} else {
echo "error, please do something!";

我如何得到它(或者很好地问)在我的css中已经存在的div中输出文本,以便它遵守该div附带的格式和对齐规则。

6 个答案:

答案 0 :(得分:14)

您可以使用following php.ini设置:

error_prepend_string = "<div class='error'>"
error_append_string = "</div>"

或者那种效果。

答案 1 :(得分:7)

修改

实际上,我刚刚意识到你所说的“错误”涉及回声/打印输出。这是问题所在。

printecho)字符串错误直接输出缓冲区(当您运行完所有代码时将HTML发送到浏览器)。 echo()print()会直接发送您正在回复/打印的内容,除非它位于output_buffer块中(我不会将此处的详细信息与您混淆)。

因此,您正在管理常规的html /文本输出,以便将print页面内容输出到输出缓冲区,但在这种情况下,您使用的是echo,它将字符串数据直接发送到缓冲区AT THAT MOMENT。

例如:

您的问题只是一个简单的例子

<?php

$mystr = "<html>";
$mystr .= "<body><h1>Hello World</h1></body></html>";

echo "<head></head>";

echo $mystr;

?>

哪会让我输出到浏览器:

<head></head><html><body><h1>Hello World</h1></body></html>

我正在存储字符串数据,但在echo其他html数据之前echo HEAD块。

我需要做的是:

<?php

$mystr = "<html>";
$mystr .= "<head></head>";
$mystr .= "<body><h1>Hello World</h1></body></html>";

echo $mystr;

?>

哪会让我输出到浏览器:

<html><head></head><body><h1>Hello World</h1></body></html>

我存储字符串输出(在这种情况下是你的错误),直到我需要稍后输出。这是您需要知道的,并在您的代码中完成。


我会调查error_reporting(0) / display_errorserror_get_lastset_error_handler

http://www.php.net/manual/en/function.error-reporting.php

http://www.php.net/manual/en/errorfunc.configuration.php#ini.display-errors

http://php.net/manual/en/function.error-get-last.php

http://www.php.net/manual/en/function.set-error-handler.php

这样您就可以立即停止将所有错误发送到输出缓冲区(这就是为什么它位于页面顶部),然后捕获,存储并显示错误。

error_reporting(0);

set_error_handler('phpLogError');

function phpLogError() {
    $error = error_get_last();

    if ($error['type'] == 1) {
        //do your stuff    
    } 
}

function phpGetLoggedErrors() {
    // return your prettified html errors
}

或者,换句话说......

<强> php_error_handle.php

<?php

$GLOBAL['_logged_php_errors'] = array();

error_reporting(0);

set_error_handler('phpLogError');

function phpLogError() {
    global $_logged_php_errors;

    $error = error_get_last();

    if ($error['type'] == 1) {
        $_logged_php_errors[] = "<span>$error</span>";
    } 
}

function phpGetLoggedErrors() {
    global $_logged_php_errors;

    return "<ol><li>".implode('</li><li>',$_logged_php_errors)."</li></ol>";
}

?>

<强> other.php

<?php

require_once 'php_error_handle.php';

// other stuff, pages included/required, etc...

请确保在第一行代码中发生此require_once。

答案 2 :(得分:2)

将@mario扩展到上面,我已经在我的php文件的顶部使用了这个(在开发中,当然不是生产!)这很好用。即使在Wordpress管理文件中!

scala

答案 3 :(得分:0)

Try...catch

http://php.net/manual/en/language.exceptions.php

您可以在自己的CSS中创建错误回声。

答案 4 :(得分:0)

echo '<div class="yourerrorclass">error, please do something!</div>';

如果它在输出中的位置错误,那是因为您过早输出错误。整个HTML由PHP顺序输出。如果您在任何其他HTML之前输出错误,则错误将出现在页面顶部,实际上会使您的HTML无效。

答案 5 :(得分:0)

在生产中运行时,应该完全禁止向屏幕显示错误,而是将它们记录到文件中以进行检查和修复。有详细信息,以及php.ini文件中的建议设置。