整个安装过程中的临时404不一致| post-template.php导致PHP错误


9

我对此感到非常困惑:我在Media Temple GS上安装了WordPress(其中许多工具工作正常,并且配置几乎完全相同),偶尔会在整个站点上提供404。发生这种情况时,我在PHP错误日志中总共得到3个错误:

[01-Nov-2013 22:20:50 UTC] PHP Notice:  Trying to get property of non-object in /nfs/---/---/mnt/---/domains/---.---/html/wp-includes/post-template.php on line 275
[01-Nov-2013 22:20:50 UTC] PHP Notice:  Trying to get property of non-object in /nfs/---/---/mnt/---/domains/---.---/html/wp-includes/post-template.php on line 209
[01-Nov-2013 22:20:50 UTC] PHP Notice:  Trying to get property of non-object in /nfs/---/---/mnt/---/domains/---.---/html/wp-includes/post-template.php on line 29

前两个与$post对象有关,第三个与对象有关:get_post()->ID;我认为是$post对象的创建。

我有两个相同的错误消息三重奏,相差几乎25分钟(相隔2秒)。

我尝试过MT支持,但他们认为这一定是WP错误。我正在运行WP的最新版本,但是在早期版本中遇到了此问题。

我启用了2个插件:W3 Total Cache和AJAX Thumbnail Rebuild

我已经测试了有无缓存插件,问题仍然存在。我刚刚禁用了缩略图插件,以查看它是否有所不同。

请帮助这让我发疯![并且我想今天公开发布此网站]

编辑

我还应该提到,我在此服务器上的其他但并非所有其他wordpress安装上看到了此错误。我认为但不能100%地确定那些显示错误的安装比可以正常运行的更新安装。虽然所有安装均已完全更新。

编辑2

我正在从事另一个WP项目,并且至少意识到了这3个错误的含义。通过转到不存在的自定义帖子类型的索引页面,我可以准确地再现这三个php错误。但是,这并不能解释为什么这会导致出现此问题404,尤其是因为它不仅发生在自定义帖子类型索引页面上。但是,我认为这一定程度上与自定义帖子类型有关。


Sidewide表示在所有页面/帖子/类别上,但在wp-admin中不是,因此基​​本上任何前端页面都可以吗?ps:禁用W3TC插件并不会立即删除所有缓存功能。更好的方法是在插件的主要选项页面上禁用缓存,这听起来确实像是缓存/缓存配置问题。
s1lv3r

是的,横向表示任何前端页面,但wp-admin中没有任何内容。我认为它与W3 Cache插件没有任何关系,因为在启用此功能之前,我偶尔在开发中遇到此问题。
iiz

2
那是仅有的三个通知吗?我的直觉是您的数据库即将退出,但这通常会触发它自己的通知。
马修·博因斯

发生此错误时,我只得到这三个通知。它发生在每小时2-3次之间,我发现其计时没有规律。当尝试访问任何页面而不仅仅是主页/存档时,可能会发生这种情况。PHP登录的级别设置为32767 [E_ALL]。我想我以前尝试过WP_DEBUG,但什么也看不到,但不能确定。现在,相关站点已启用[!对此没有选择]。但是,如果您认为值得的话,我可以使用与此相同的参数进行其他隐藏安装。
iiz

1
您可以同时查看访问日志以找出触发它的请求吗?
jezmck

Answers:


1

404错误有两种类型:WordPress生成的和服务器生成的。

在某些服务器环境中,在CPU过载或某些配置错误等情况下,服务器可能无法正确显示404。通常,服务器生成的404错误会在服务器底部显示诸如“ Nginx”或“ Apache”之类的内容。页(取决于服务器类型)。

在其他情况下,WordPress(PHP)可能会生成“假阳性” 404错误,因为安全插件阻止了对已加载资源的访问:

为什么在尝试使用Elementor更新页面时有时会出现404错误?

https://wordpress.org/support/topic/getting-false-positive-404-errors-with-newest-update/

尝试禁用所有安全性插件,清除缓存并刷新页面。服务器上安装的安全模块(例如ModSecurity)也可能是原因。

也可能是由于主题或插件编码错误造成的。检查是否在所有涉及的站点上安装了通用主题或插件。而且如果此问题仅发生在Media Temple托管上,则可能是它们配置错误,甚至服务器负载过大...


0

您没有足够的信息来解决您的问题。尝试将完整的堆栈跟踪和请求信息添加到错误日志中以调查问题。

您可以创建自己的自定义错误处理程序,以将堆栈跟踪和请求信息添加到错误日志中。

set_error_handler('wpse_120959_handle_error');

function wpse_120959_handle_error( $errno, $errstr, $errfile, $errline ) {

    if( $errno === E_USER_NOTICE ) {

        $error = PHP_EOL . PHP_EOL;

        $error .= sprintf('You have an error notice: "%s" in file "%s" at line: "%s".', $errstr, $errfile, $errline);
        $error .= wpse_120959_generate_stack_trace() . PHP_EOL;

        $error .= 'Request information:' . PHP_EOL;
        $error .= wpse_120959_generate_http_request_info();

        error_log( $error );
    }
}

// Function from php.net http://php.net/manual/en/function.debug-backtrace.php#112238
function wpse_120959_generate_stack_trace() {

    $e = new \Exception();

    $trace = explode( "\n" , $e->getTraceAsString() );

    // reverse array to make steps line up chronologically

    $trace = array_reverse( $trace );

    array_shift( $trace ); // remove {main}
    array_pop( $trace ); // remove call to this method

    $length = count( $trace );
    $result = array();

    for ($i = 0; $i < $length; $i++) {
        $result[] = ($i + 1)  . ')' . substr( $trace[$i], strpos( $trace[$i], ' ' ) ); // replace '#someNum' with '$i)', set the right ordering
    }

    $result = implode("\n", $result);
    $result = "\n" . $result . "\n";

    return $result;
}

function wpse_120959_generate_http_request_info() {

    $request_info = '';
    $request_info_format = "%s %s %s\nHTTP headers:\n";

    $headers = wpse_120959_get_headers();
    $header_format = "%s: %s \n";

    $request_method  = filter_input( INPUT_SERVER, 'REQUEST_METHOD', FILTER_SANITIZE_STRING );
    $request_uri     = filter_input( INPUT_SERVER, 'REQUEST_URI', FILTER_SANITIZE_STRING );
    $server_protocol = filter_input( INPUT_SERVER, 'SERVER_PROTOCOL', FILTER_SANITIZE_STRING );

    $request_info = sprintf( $request_info_format, $request_method, $request_uri, $server_protocol );

    foreach ( $headers as $name => $value ) {
        $request_info .= sprintf( $header_format, $name, $value );
    }

    return $request_info;
}

function wpse_120959_get_headers() {

    $headers = [];

    foreach ($_SERVER as $name => $value) {

        if (preg_match('/^HTTP_/', $name ) ) {

            $value = filter_input( INPUT_SERVER, $name, FILTER_SANITIZE_STRING );

            $name = strtr( substr( $name, 5 ), '_', ' ');
            $name = ucwords( strtolower( $name ) );
            $name = strtr( $name, ' ', '-' );

            // add to list
            $headers[$name] = $value;
        }
    }

    return $headers;
}

您可以通过在代码中的某个位置(例如在single.php文件中)添加trigger_error来检查其是否正常工作。

trigger_error('Annoying notice');

您的错误日志应输出如下内容:

2018/07/02 14:26:00 [error] 714#714: *58 FastCGI sent in stderr: "PHP message:

You have an error notice: "Annoying notice" in file "/var/www/test/content/themes/twentyseventeen/single.php" at line: "19".
1) /var/www/test/index.php(17): require('/var/www/test/w...')
2) /var/www/test/wordpress/wp-blog-header.php(19): require_once('/var/www/test/w...')
3) /var/www/test/wordpress/wp-includes/template-loader.php(74): include('/var/www/test/c...')
4) /var/www/test/content/themes/twentyseventeen/single.php(19): trigger_error('Annoying notice')
5) [internal function]: wpse_120959_handle_error(1024, 'Annoying notice', '/var/www/test/c...', 19, Array)

Request information:
GET /hello-world/ HTTP/1.1
HTTP headers:
Accept-Language: en-US;q=0.8,en;q=0.7
Accept-Encoding: gzip, deflate
Referer: http://test.local/
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
User-Agent: Mozilla/5.0 AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1
Upgrade-In" while reading upstream, client: 192.168.10.1, server: test.local, request: "GET /hello-world/ HTTP/1.1", upstream: "fastcgi://unix:/var/run/php/php7.2-fpm.sock:", host: "test.local", referrer: "http://test.local"

通过这种消息,将更容易发现问题出在哪里。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.