从服务器上随机删除图像

时间:2019-05-31 作者:thingEvery

我正在开发的一个网站有一个奇怪的问题。

最近,当任何人将图像上传到站点时,一段时间后(可能一个小时,有时几个小时),一个或多个图像会从服务器上消失。它们仍然显示在媒体库中,Wordpress创建的所有其他大小仍在服务器上。但是页面上使用的任何大小(通常是全尺寸图像,但不总是)都会被随机删除。

如果我通过FTP替换丢失的文件,它们往往会很快消失(有时几分钟,有时几小时之后)。

我已尝试删除最近安装的所有插件。没有运气。

我甚至将该站点迁移到了一个完全不同的服务器。奇怪的是,它一开始似乎奏效了。几天来,我把网站放在新服务器上,没有任何图像消失。但是,一旦我更新了DNS设置以指向该域,它们就开始消失。

这两家托管公司都不知道是什么原因造成的。

你见过这样的问题吗?你知道我能找到什么函数可以随机删除图像吗?

Update: 我最终发现问题与一个名为CyberSEO Lite的插件有关。自从我把它删除后,再也没有图像消失了。

3 个回复
最合适的回答,由SO网友:coolpasta 整理而成

显然,我想你已经检查了cron作业。

没有人可以告诉你,但每当你有问题,你想知道“到底是什么东西在与我的系统交互?”而有问题的部分(在你的例子中,删除图像)在其中有动作,我们可以看到所谓的特定删除。让我们看看这在你的案例中是如何应用的。

图片就是帖子。当它被删除时,除非有什么不好的事情发生,否则你可以放心地说wp_delete_post 将被使用,并且在这个函数内部,我们有最早的可以钩住的操作before_delete_post:

add_action( \'before_delete_post\', function( $postid ) {
    $past_backtrace = get_option( \'backtrace_for_deletion\', [] );
    $current_backtrace = debug_backtrace();

    $past_backtrace[] = json_encode( $current_backtrace );
    update_option( \'backtrace_for_deletion\', $past_backtrace );
});
我们基本上希望看到这种删除,所以让我们把它做得更漂亮一点:

    $backtraces = get_option( \'backtrace_for_deletion\' );
    foreach( $backtraces as $backtrace ) {
        ?>
        <pre>
        <?php
            print_r( json_decode( $backtrace ) );
            echo \'-----------------------------------------------------------------------------------\';
        ?>
        </pre>
        <?php
    }
这并不是最好的视图,但它可以为您提供信息。

以下几点:

第三项始终是调用删除的位置,它将为您提供确切的文件名和所称删除的行

SO网友:thingEvery

在处理这个问题将近一年后,我终于解决了它。它最终还是一个插件。这很难诊断,因为它是偶尔发生的,有时几个月内不会发生。但最终,我找到了一篇有规律的帖子,所以我将该站点复制到开发环境中,并逐一查看插件,直到找到罪魁祸首。它被称为CyberSEO Lite。一旦我删除了它,问题就停止了,从此再也没有出现过。

SO网友:MikeNGarrett

如果它定期发生,我首先要检查的是计划的任务。我还会检查您的错误日志,看看是否有任何显示。我还会检查权限。

当然,如果你想不出来,可以尝试禁用所有插件并更改主题。

相关推荐

Responsive header images

我刚刚建立了一个WordPress网站,但我的其他WordPress网站都有同样的问题:标题图像没有响应。不管屏幕有多小,它都有2000像素宽。我尝试了各种修复,从添加自定义CSS到安装特殊插件,但都没有成功。我最终通过选择不显示标题图像,然后打开文件标题来修复它。并手动在标题上方插入指向图像的链接。它工作得很好,但有两个注意事项。网站标题(在h1标签中)现在位于标题图像下方,而不是上方。此外,此修复程序仅适用于主页。我还没有弄清楚我要为其他页面做什么,除非我选择只在主页上使用标题图像。所以在我继续之前,