【问题标题】:Schedule Joomla Site Offline安排 Joomla 网站离线
【发布时间】:2020-09-25 14:29:43
【问题描述】:

我想知道是否有人有更多关于如何安排 Joomla 在特定日期和时间设置为“离线/维护模式”的详细信息。我找到了这个post here on stack overflow,我想知道是否有人成功地(1)实现了一个自定义插件来添加这个功能,或者(2)通过一个将站点设置为离线/维护模式的脚本,也许还有一个cronjob在特定时间运行脚本,或者如果 (3) 可能已经存在一个扩展,它只是添加了这个离线/维护模式调度功能。

根据我在上面链接的上一篇文章,我不确定插件是否可以工作,或者如何最好地使用脚本和 cronjob 技术。根据我基于帖子中的回复的理解,听起来脚本和 cronjob 将是完成此任务的唯一方法。如果有人可以让我知道他们是否成功实施了这一点,以及这将是多么棒,或者任何关于如何去做的建议或指导都会有所帮助。

【问题讨论】:

  • 不想在Joomla Stack Exchange 上问这个?

标签: joomla scheduled-tasks offline schedule


【解决方案1】:

在我看来,使用这么少的插件是不值得的。 我宁愿使用像这样的小脚本:

<?php

// Make sure this is only called through command line
if (php_sapi_name() !== "cli") die('Only command line');

// Replace by your joomla configuration file path
$configuration_file_path = '/var/www/joomla/configuration.php';

if (!empty($argv[1])) {
    $offline = 1;   
} else {
    $offline = 0;
}


// Retrieve configuration file content
$configuration_content = file_get_contents($configuration_file_path);

// Replace the offline line by the calculated value
$configuration_content = preg_replace('/(.*)public \$offline =(.*)/m', '$1public $offline = \'' . $offline . '\';' , $configuration_content); 

// Write back the configuration file
file_put_contents($configuration_file_path, $configuration_content);

这个脚本可以通过命令行调用:

php offline.php 1 #to enable offline status

php offline.php 0 #to disable offline status

如果您需要通过编辑 /etc/crontab 或将其添加到您的托管设置中来通过 cronjob 运行它:

# Offline at 4AM each day
0 4  * * *   www-data php /path/of/your/script/offline.php 1 >> /dev/null 2>&1
# Online at 4:05AM each day
5 4  * * *   www-data php /path/of/your/script/offline.php 0 >> /dev/null 2>&1

【讨论】:

  • 一些提示:!empty($argv[1]) &amp;&amp; $argv[1] 更简单地表示为!empty($argv[1])。就此而言,您实际上可以将条件逻辑压缩为:$offline = (int)!empty($argv[1]); 此外,如果模式中没有^$ 元字符,则m 模式修饰符是无用的。总的来说,我可能会这样替换:preg_replace('/public \$offline = \K.*/', "'{$offline}';", $configuration_content)
  • 谢谢@mickmackusa,我应该说我不知道​​\K 的用法,它肯定会帮助我。我将据此编辑我的答案,因为它显然更干净。对于某些人来说,浓缩的方式可能不太全面,我不知道关于 SO 的规则是什么。但是&amp;&amp; $argv[1] 是完全没有必要的。
  • 或者你可以发布你的而不是编辑我的......我不知道改善答案的最佳方法是什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-27
  • 2012-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多