我最近将WordPress实例从5.4更新到了5.5,最终在管理区域的菜单上方出现了一个恼人的页边空白。
我停用了所有插件,切换了主题,做了一些检查,最后得到了一些发现。
导致边距顶部的CSS类是.php-error
, 附加到#adminmenuwrap
当应该显示php错误时。
/* in load-styles.php */
.php-error #adminmenuback, .php-error #adminmenuwrap {
margin-top: 2em;
}
/* the menu wrapper */
<div id="adminmenuwrap"></div>
/* the php script in /wp-admin/admin-header.php line 201 */
// Print a CSS class to make PHP errors visible.
if ( error_get_last() && WP_DEBUG && WP_DEBUG_DISPLAY && ini_get( \'display_errors\' ) ) {
$admin_body_class .= \' php-error\';
}
/* print_r(error_get_last()) outputs */
Array (
[type] => 8
[message] => unserialize(): Error at offset 11857 of 11895 bytes
[file] => .../wp-includes/functions.php
[line] => 624
)
/**
* Unserialize data only if it was serialized.
*
* @since 2.0.0
*
* @param string $data Data that might be unserialized.
* @return mixed Unserialized data can be any type.
*/
function maybe_unserialize( $data ) {
if ( is_serialized( $data ) ) { // Don\'t attempt to unserialize data that wasn\'t serialized going in.
return @unserialize( trim( $data ) );
}
return $data;
}
这很正常
WP_DEBUG && WP_DEBUG_DISPLAY && ini_get( \'display_errors\' )
是真的(因为我实际上正在调试),但问题是没有显示php错误。
此实例(有bug)正在联机托管服务器上运行。但我也有这个实例在localhost上运行的完全相同的副本,只是它没有这个bug。
有人遇到过这种情况吗?你有什么建议?
------- EDIT (Fix) --------
下面的操作确实解决了问题,但我仍然不确定其来源或;“真实”;错误背后的原因。尽管如此,这是序列化数据中的一个计算错误,更准确地说,在我的例子中,它来自隐私策略页面示例(WordPress的教程)的内容。
我是这样做的:
// Edit the function in /wp-includes/functions.php on line 624 and include some
// error logging.
// DO NOT FORGET TO REVERT BACK TO THE ORIGINAL CODE ONCE DONE DEBUGGING!
/**
* Unserialize data only if it was serialized.
*
* @since 2.0.0
*
* @param string $data Data that might be unserialized.
* @return mixed Unserialized data can be any type.
*/
function maybe_unserialize( $data ) {
if ( is_serialized( $data ) ) { // Don\'t attempt to unserialize data that wasn\'t serialized going in.
error_log( "DATA DEBUGGING START ---------- \\r");
error_log( "TRIMED: ");
error_log( trim( $data ) );
error_log( "UNSERIALIZED: ");
error_log( print_r(unserialize( trim( $data ) ), true));
error_log( "DATA DEBUGGING END ---------- \\r\\n");
return unserialize( trim( $data ) );
}
return $data;
}
这将在调试中记录所有序列化和未序列化的值。日志或错误。根据您使用的方法记录。我正在使用默认的WordPress
define( \'WP_DEBUG_LOG\', true );
在w配置中。php,它在文件调试中记录错误。在/wp content/下登录。
这样做可以检测出数据库中导致问题的确切行。问题来自错误的计数计算。
a:3:{s:11:"plugin_name";s:9:"WordPress";s:11:"policy_text";s:11789:".....
我对那个键的内容进行了字符/字节计数,结果是11799而不是11789。
中的值s:11789
必须是s:11799
就我而言。所以我在数据库中更改了它,一切都很好。我也在编辑器中编辑了页面并保存了它,然后重新检查,一切都正常。
这解决了问题,但我想在某个时候出了问题。很可能是在我将本地数据库导入到另一个实例时。
我希望这有帮助!
SO网友:Braza
This is a fix, not a solution
下面的操作确实解决了问题,但我仍然不确定其来源或;“真实”;错误背后的原因。尽管如此,这是序列化数据中的一个计算错误,更准确地说,在我的例子中,它来自隐私策略页面示例(WordPress的教程)的内容。
我是这样做的:
// Edit the function in /wp-includes/functions.php on line 624 and include some
// error logging.
/**
* Unserialize data only if it was serialized.
*
* @since 2.0.0
*
* @param string $data Data that might be unserialized.
* @return mixed Unserialized data can be any type.
*/
function maybe_unserialize( $data ) {
if ( is_serialized( $data ) ) { // Don\'t attempt to unserialize data that wasn\'t
serialized going in.
error_log( "DATA DEBUGGING START ---------- \\r");
error_log( "TRIMED: ");
error_log( trim( $data ) );
error_log( "UNSERIALIZED: ");
error_log( print_r(unserialize( trim( $data ) ), true));
error_log( "DATA DEBUGGING END ---------- \\r\\n");
return unserialize( trim( $data ) );
}
return $data;
}
DO NOT FORGET TO REVERT BACK TO THE ORIGINAL CODE ONCE DONE DEBUGGING!
这将在调试中记录所有序列化和未序列化的值。日志或错误。根据您使用的方法记录。我正在使用默认的WordPress
define( \'WP_DEBUG_LOG\', true );
在w配置中。php,它在文件调试中记录错误。在/wp content/下登录。
这样做将有助于检测导致问题的数据库中的确切行。这里的问题来自错误的计数计算。
a:3:{s:11:"plugin_name";s:9:"WordPress";s:11:"policy_text";s:11789:".....
我对那个键的内容进行了字符/字节计数,结果是11799而不是11789。
中的值s:11789
必须是s:11799
就我而言。所以我在数据库中更改了它,一切都很好。我也在编辑器中编辑了页面并保存了它,然后重新检查,一切都正常。
这解决了问题,但我想在某个时候出了问题。很可能是在我将本地数据库导入到另一个实例时。
我希望这有帮助!