【问题标题】:Changing PHP global variable by CRON通过 CRON 更改 PHP 全局变量
【发布时间】:2019-09-03 17:06:45
【问题描述】:

关于 PHP、wordpress 和 CRONE 的问题。我无法通过小部件调用的函数中的 CRON 过程更改全局变量。

$container

register_activation_hook(__FILE__, 'activate_my_plugin');
function activate_my_plugin() {
    wp_clear_scheduled_hook('update_container');
    wp_schedule_event( time(), 'hourly', 'update_container');
}

add_action('update_container', 'update_container');
function update_container() {
    global $container;
    // updating container
}

function use_container() {
    global $container;
    // !And here we have undefined $container
}

class acw_widget extends WP_Widget{
    // ... 

    public function widget( $args, $instance ) 
    {
        use_container();
    }
}

我正在尝试将请求缓存到 WP 站点上的数据库。因此,我决定使用 CRON 来安排请求并将结果存储在某个全局容器中。假设小部件将出于其目的从容器中获取数据,但我遇到了看起来像“未定义容器”的问题。

所以,我激活插件,wp-cron.php 显示,该容器已更新(在“update_container”),但在“use_container”中获取容器显示,$container 未定义且未更新。

请您解释一下,为什么会发生这种情况? 如何跟踪初始化/更新全局容器的正确顺序?

代码是真实代码的简化版本。也许这很尴尬,但我是 PHP 和 wordpress 的新手,所以这是我找到的解决方案。

谢谢

【问题讨论】:

    标签: php wordpress cron


    【解决方案1】:

    您不能使用任何变量(inc global)作为数据“容器”。因为 PHP 没有状态,每个 php 脚本都“从头开始”运行。

    因此,当您的 CRON 脚本运行时 - 它仅针对当前运行更新 global $container。然后,当您运行 widget 功能时 - 这是另一个“运行”,您会发现 $container 未定义。

    您需要的不仅仅是使用变量,而是将数据存储在数据库中(例如,通过相同的CRON 脚本)。然后,每次您需要该数据时 - 只需从数据库中获取即可。

    希望对你有所澄清。

    【讨论】:

      猜你喜欢
      • 2021-01-07
      • 2019-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-10
      • 2018-06-26
      • 1970-01-01
      相关资源
      最近更新 更多