【问题标题】:'White Screen of Death' Causes - WordPress CMS [closed]“白屏死机”原因 - WordPress CMS [关闭]
【发布时间】:2013-04-09 07:01:55
【问题描述】:

我最近在 WordPress 上安装了一个主题,当它被激活时,它只会导致一个空白的白屏。造成这种情况的可能原因是什么?以及开始发现问题的步骤。

将网站从我们的测试服务器移到托管公司的服务器时,问题就暴露出来了,我们曾用它来托管其他各种 WordPress 网站。在我的实例中,白屏的可能原因是什么?以及开始发现问题的步骤。我已经采取了一些措施,例如增加内存限制和禁用插件等,但它们在原始服务器上运行良好,所以我怀疑它可能是由插件等引起的。

谢谢

更新

对,到目前为止,我已将内存限制增加到 128M,并禁用了所有插件以及临时命名它们的文件夹。

感谢@Sabari 的建议,我已启用调试,这导致了以下错误:致命错误:在 /home/neatly/ 中调用未定义函数 mb_internal_encoding() public_html/wp-content/themes/best_wedding_dress-babe23c7e828662f1a07c296a5608f52/functions.php上线12

我对 PHP 并没有什么用处,但是您可以就如何进行,例如在哪里以及如何定义 mb_internal_encoding 提出一些建议。这是第 12 行的代码:

mb_internal_encoding(get_bloginfo('charset'));

我想重申,这在我们的测试服务器上运行良好,所有这些问题只有在移动到新服务器时才会出现。我已经多次将 WordPress 网站从一台服务器转移到另一台服务器,并在这个特定网站上重新下载并上传了 3 次内容和数据库。两个版本(测试服务器和新服务器)具有相同版本的 WordPress,因此新服务器可能具有不同的技术。这些方面是否有任何可能导致此错误的原因?

萨巴里建议的答案

通过在我们的虚拟主机服务器上启用和配置 mbstring(多字节支持)解决了这个问题。

【问题讨论】:

  • 在配置中启用调试模式并查看导致空白屏幕的原因。定义('WP_DEBUG', true);
  • @DonCallisto 是的,可能,但在传递此消息时,他要求我告诉你,你的语法很糟糕。感谢您缺乏帮助:)
  • @DonCallisto 我只是看了一下,但没有发现问题。是因为这似乎不是一个特定的问题吗?这实际上是一个特定的问题,虽然我没有说明这一点。我认为纯粹的简单性会更好,因为我应该像常见问题解答部分所建议的那样引发简单、快速和轻松的响应。
  • @PaulArmstrong 检查我的答案

标签: php wordpress content-management-system


【解决方案1】:

我认为您的问题与未启用 mbstring 扩展有关。

mb_internal_encoding 函数需要mbstring 扩展。它是non-default 扩展,默认不启用。

有关如何安装和配置 mb_string http://www.php.net/mbstring 的更多信息,您可以查看此内容。

如果您在 Windows 上,请取消注释行(在 extension=php_mbstring.dll 之前删除分号)extension=php_mbstring.dll; 在 php.ini 中。

如果您使用的是 linux,您可以尝试使用 yum install php-mbstring for centos。

对于ubuntu我不清楚。

在此之后重新启动 apache。

更新

要检查扩展是否启用,您可以使用:

if (extension_loaded('mbstring')) {
    //functions using mb string extensions
}

新更新:

if (extension_loaded('mbstring')) {
    mb_internal_encoding(get_bloginfo('charset'));
}

我认为 WordPress 有一个内置函数 wp_set_internal_encoding() 可以处理这些问题。你只需要在你的文件中调用这个函数。 wp_set_internal_encoding() 所做的与我上面解释的一样:

function wp_set_internal_encoding() {
    if ( function_exists( 'mb_internal_encoding' ) ) {
        if ( !@mb_internal_encoding( get_option( 'blog_charset' ) ) )
            mb_internal_encoding( 'UTF-8' );
    }
}

它检查mb_internal_encoding function 是否存在(该函数只有在加载扩展时才会存在)。这是检查函数是否存在的另一种方法。

优点是你只需要调用函数而不必担心其他事情。 WordPress 会处理这些。

新更新:

对于您的第一个错误,将您的 mb_strlen 函数包装在 function_exists () 中 喜欢:

if ( function_exists( 'mb_strlen' ) ) {
    mb_strlen();
 }

如果您启用了扩展程序并且它可能已损坏,则可能是这样。所以最好在调用之前检查函数是否存在。

对于第二个错误,您不需要在 functions.php 或任何其他文件中添加wp_set_internal_encoding。它是 WordPress 的内置功能。您只需要调用函数wp_set_internal_encoding。您实际上是在声明存在的功能。所以 PHP 会返回致命错误。

新更新

在您的函数中,您有 mb_strlen,它仅在启用 mbstring 扩展后才能工作。所以你应该改变

function theme_trim_long_str($str, $len = 50, $sep = ' '){
    $words = split($sep, $str);
    $wcount = count($words);
    while( $wcount > 0 && mb_strlen(join($sep, array_slice($words, 0, $wcount))) > $len)     $wcount--;
    if ($wcount != count($words)) {
        $str = join($sep, array_slice($words, 0, $wcount)) . '…';
    }
    return $str;
}

function theme_trim_long_str($str, $len = 50, $sep = ' '){
    $words = split($sep, $str);
    $wcount = count($words);

    if ( function_exists( 'mb_strlen' ) ) {
        while( $wcount > 0 && mb_strlen(join($sep, array_slice($words, 0, $wcount))) > $len)     
            $wcount--;
    } else {
        while( $wcount > 0 && strlen(join($sep, array_slice($words, 0, $wcount))) > $len)
            $wcount--;
    }
    if ($wcount != count($words)) {
        $str = join($sep, array_slice($words, 0, $wcount)) . '…';
    }
    return $str;
} 

希望对你有帮助:)

【讨论】:

  • @PaulArmstrong 测试服务器将启用此扩展。但是现在您已经转移到一个新的生产服务器。然后,您必须启用所需的扩展。也许您可以联系您的托管服务提供商。
  • @PaulArmstrong 检查我关于如何检查扩展是否启用的更新
  • @PaulArmstrong 您应该将 mbstring 函数包装在 extension_loaded 条件中。请检查我的新更新
  • @PaulArmstrong 没问题。当你解决问题时让我知道。那么到时候 extension_loaded('mbstring') 的输出是什么。它会告诉你扩展是否启用。你也可以 echo phpinfo();在某个页面上查看加载了哪些所有扩展
  • @PaulArmstrong 我想让你替换这个 mb_internal_encoding(get_bloginfo('charset'));有了这个 if (extension_loaded('mbstring')) { mb_internal_encoding(get_bloginfo('charset')); } 或者这个 if ( function_exists( 'mb_internal_encoding' ) ) { mb_internal_encoding(get_bloginfo('charset')); } 。但是后来我看到wordpress内部有一个函数wp_set_internal_encoding()。所以只需替换 mb_internal_encoding(get_bloginfo('charset'));用 wp_set_internal_encoding();
【解决方案2】:
WSOD. OK... possible cause, theme exhausts the memory limit
a) clear you cache
b) Make a backup before changing anything
c) Disable the plugins,  
d) Replace Theme with a Default Theme
e) Re-install Wordpress

使用调试进行故障排除

error_reporting(E_ALL); ini_set('display_errors', 1);

在 Wordpress 中:

define( 'WP_DEBUG', true);

【讨论】:

  • 嗨,我已经这样做了,将内存限制增加到 128m,禁用所有插件并将我的主题交换为默认的 TwentyTwelve 主题并且它可以工作。但是,我开发的主题仍然没有。
  • @PaulArmstrong 在 wp-config.php 中启用调试时看到的错误是什么
  • @Sabari 致命错误:在第 12 行调用 /home/neatly/public_html/wp-content/themes/best_wedding_dress-babe23c7e828662f1a07c296a5608f52/functions.php 中的未定义函数 mb_internal_encoding()。
  • @Sabari 第 12 行:mb_internal_encoding(get_bloginfo('charset'));查看我更新的问题,因为它的布局更好。
【解决方案3】:

很多事情都可能发生。如果文件未正确上传,则可能会发生。如果主题的函数文件有任何错误,也可能会发生。

【讨论】:

  • 谢谢,我会重新保存并上传它们看看是否有帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-24
  • 1970-01-01
  • 1970-01-01
  • 2011-02-24
  • 2019-02-01
相关资源
最近更新 更多