Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
安排Joomla站点脱机_Joomla_Scheduled Tasks_Offline_Schedule - Fatal编程技术网

安排Joomla站点脱机

安排Joomla站点脱机,joomla,scheduled-tasks,offline,schedule,Joomla,Scheduled Tasks,Offline,Schedule,我想知道是否有人有更多关于如何安排Joomla在特定日期和时间设置为“离线/维护模式”的详细信息。我发现了这一点,我想知道是否有人成功地(1)实现了一个自定义插件来添加此功能,或者(2)通过一个脚本将站点设置为脱机/维护模式,也许还有一个cronjob在特定时间运行脚本,或者(3)可能已经存在一个扩展,它只是添加了这个脱机/维护模式调度功能 根据我之前链接到上面的帖子,我不确定插件是否有效,或者如何最好地使用脚本和cronjob技术。根据我对帖子中回复的理解,听起来脚本和cronjob是实现这一

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


根据我之前链接到上面的帖子,我不确定插件是否有效,或者如何最好地使用脚本和cronjob技术。根据我对帖子中回复的理解,听起来脚本和cronjob是实现这一点的唯一途径。如果有人能让我知道他们是否成功地实现了这一点,这将是多么好,或者关于如何实现这一点的任何建议或方向都会很有帮助。

在我看来,为这么少的东西使用插件是不值得的。 我宁愿使用一个小脚本,如:

<?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);
如果您需要通过编辑/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

一些提示:
!空($argv[1])&&$argv[1]
更简单地表示为
!空($argv[1])
。因此,您实际上可以将条件逻辑压缩为:
$offline=(int)!空($argv[1])
此外,如果模式中没有
^
$
元字符,则
m
模式修饰符将无效。总的来说,我可能会这样替换:
preg\u replace(“/public\$offline=\K.*/”、“{$offline};”、$configuration\u content)
谢谢@mickmackusa,我应该说我不知道
\K
的用法,它肯定会对我有帮助。我将根据这一点编辑我的答案,因为它显然更干净。对于某些人来说,简明的方法可能不够全面,我不知道这有什么规则。但是
&&$argv[1]
是完全没有必要的。或者你可以发布你的,而不是编辑我的。。。我不知道改进答案的最佳方法是什么。不想在堆栈交换上问这个问题吗?
# 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