some code} else {
echo "error, please do something!";
我该如何让它(或者委婉地请求它)输出已经存在于我的CSS中的div内的文本,以便它遵守该div所带来的格式和对齐规则。
some code} else {
echo "error, please do something!";
我该如何让它(或者委婉地请求它)输出已经存在于我的CSS中的div内的文本,以便它遵守该div所带来的格式和对齐规则。
error_prepend_string = "<div class='error'>"
error_append_string = "</div>"
或类似的东西。
trigger_error("oh noes, something went wrong");
往返,然后再像你的示例中使用一个错误消息池。(问题可能还在于错误在<body>开始之前就被打印出来了。) - mario'<div class=error>'
。 - user967451编辑
实际上,我刚意识到你所说的“错误”涉及一个回显/打印输出。问题在于:
你直接将字符串“error”print
(echo
)到输出缓冲区(当你完成运行所有代码时,它会将HTML发送到浏览器)。 echo()
和print()
将你要回显/打印的内容直接发送出去,除非它在output_buffer
块中(我不会让你混淆细节)。
因此,在管理常规的HTML/文本输出方面,你不采用print
将页面内容输出到输出缓冲区,但在这种情况下,你使用了echo
,它会立即将字符串数据直接发送到缓冲区。
例如:
一个简单示例中的问题
<?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_errors
、error_get_last
和set_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 函数在代码的第一行。
在@mario的基础上进行扩展,我将这段代码放在我的php文件顶部(当然是在开发环境中,而不是生产环境中!),效果非常好。即使在WordPress管理文件中也可以使用!
ini_set('error_prepend_string',"<div class='error'>") ;
ini_set('error_append_string',"</div>") ;
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
echo '<div class="yourerrorclass">error, please do something!</div>';
如果输出的位置不正确,那是因为您太早输出了错误。整个 HTML 是由 PHP 顺序输出的。如果在其他任何 HTML 之前输出错误,则错误将位于页面顶部,并实际上使您的 HTML 无效。