更新页面时出现HTTP 500错误

时间:2020-02-19 作者:Thanassis

我们有一个Wordpress网站,几年前由外部承包商设计。https://playbacktheatre.com.au

我们最近(2019年12月)更换了主机提供商,以寻求更好的服务。迁移完成后,站点运行顺利,速度大大加快,正如我们所希望的那样。

尽管最近我们遇到了主页抛出HTTP 500错误的问题。我相信这是由其中一个页面的更新引发的(https://playbacktheatre.com.au/performances/) 使用Wordpress管理面板。只有主页抛出此错误,所有其他页面似乎都正常工作。

我要求我们的供应商恢复以前的状态,他们做到了。(我后来发现,他们只还原了一个文件夹[httpdocs],其中只包含静态文件和代码。他们没有还原数据库,也没有还原插件,也没有还原Wordpress本身。)问题解决了!然后我又在我想要的页面上进行了更新(performations/)。主页问题再次出现。

我开始深入研究,使用我们的托管提供商提供的工具(Plesk)。我在日志中发现了500个错误。错误如下:

。953468[通知][960332][103.27.34.22:38726-1#APVH\\u playbacktheatre.com.au:lsapi][STDERR]PHP解析错误:语法错误,在/var/www/vhosts/playbacktheatre中出现意外的“endif”(T\\u endif)。com。au/httpdocs/站点/wp内容/主题/播放/首页。php第186行

我浏览了头版。php文件试图找到第186行的明显错误(我不熟悉php,但我对编程和其他语言很熟悉)。我看不出有什么不对。然后,我再次将网站恢复到以前的工作状态(我自己找到了方法,只恢复了httpdocs文件夹),并检查主页是否正常工作。我再次浏览了头版。希望找到一些不同的东西。文件是exactly 与之前相同(与diff相比)。我对此感到困惑。为什么错误出现在一种情况下而不是另一种情况下?这是php脚本运行的不同部分的问题吗?我认为这样的语法错误无论如何都会引发错误。

我很高兴在这里发布完整的php文件(191行),但为了让您尝一尝,令人不快的endif语句是倒数第二个。

    <?php if( have_rows(\'page_previews\') ): while ( have_rows(\'page_previews\') ) : the_row(); ?>

        <?
        $post_object = get_sub_field(\'page\');

        $useCustom = get_sub_field(\'custom_content\');
        $cTitle = get_sub_field(\'custom_title\');
        $cSubtitle = get_sub_field(\'custom_subtitle\');
        $cText = get_sub_field(\'custom_excerpt\');
        $linkType = get_sub_field(\'link\');
        $align = get_sub_field(\'text_align\');

        if($post_object) :

           $post = $post_object;
           setup_postdata( $post );
            ?>

            <section id="<?php echo $post->post_name; ?>" class="preview">

 (... more code ...)

        <?php endif;?>    (<- This is line 186)
        <?php endwhile; endif; ?>
我试图解决问题的其他方面:

Wordpress从4.8更新。x至5.3。x、 使用Plesk更新插件,使用Wordpress管理面板停用插件,我可以尝试进行更全面的恢复(数据库和所有内容),但我不确定如何正确执行。我的文件夹结构如下:

Name    Modified    Size
.cagefs         Dec 20, 2019 03:23 AM
.cl.selector    Feb 5, 2020 03:23 AM    
.pki            Dec 19, 2019 06:43 PM   
.revisium_antivirus_cache   Dec 20, 2019 07:37 PM
.ssh            Dec 21, 2019 01:00 AM   
.wp-cli         Dec 20, 2019 03:24 AM   
error_docs      Dec 19, 2019 06:42 PM   
httpdocs        Dec 20, 2019 06:00 PM   
httpdocs.bak    Dec 20, 2019 05:36 PM
logs            Feb 19, 2020 03:28 AM   
lscache         Dec 20, 2019 02:48 PM   
migration       Dec 20, 2019 12:42 PM   
site.bak        Dec 20, 2019 05:36 PM   
snapshots       Feb 17, 2020 04:19 PM   
wp_h8yyl_2019-12-20_17-33-19.sql.zip Dec 20, 2019 05:33 PM  1.4 MB
欢迎提出任何建议。

1 个回复
SO网友:TomC

if语句使用的是另一种语法,因此它需要采用以下结构,以更改标准的大括号{ 到冒号: 和右括号}endif;

if ($post_object): 
    // Code if true
    else: 
    // Code if false
endif
我不确定这是否能完全解决您的问题,因为新服务器上可能有不同的PHP版本,主题中有不推荐的函数,但这应该会有所帮助。

相关推荐