Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.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
在没有Crontab的情况下,如何在PHP中每两周调用一个方法_Php - Fatal编程技术网

在没有Crontab的情况下,如何在PHP中每两周调用一个方法

在没有Crontab的情况下,如何在PHP中每两周调用一个方法,php,Php,我想用html更新div,每周只使用php显示不同的内容,而不使用cron。 如何才能实现这一目标?以下代码用于每2个月在第10天激活代码 但我想逻辑会有所不同。如果可能的话,一些提示或例子将是伟大的!我很想听到你的消息 // check if current day is 10th and month is an even number if (date('d')==10 && date('m') % 2 == 0) { // get todays-date (

我想用html更新div,每周只使用php显示不同的内容,而不使用cron。 如何才能实现这一目标?以下代码用于每2个月在第10天激活代码 但我想逻辑会有所不同。如果可能的话,一些提示或例子将是伟大的!我很想听到你的消息

    // check if current day is 10th and month is an even number
if (date('d')==10 && date('m') % 2 == 0) {
    // get todays-date (format: yyyymmdd)
    $today = date('Ymd'); 
    // get info about last run
    $last_run = variable_get('my_last_run', 0);
    // check last run was not today
    if ($last_run!=$today) {
        // set last run to today
        variable_set('my_last_run', $today);

        /* Place your code here */

    }
}

如果您不能或不想使用cron作业(这将是最简单和推荐的解决方案),您可以创建一个PHP脚本,该脚本将大部分时间用于睡眠,然后醒来检查日期并运行所需的任何内容

如果你不在乎日期,只想每两周运行一次,你可以让它像这样睡觉:

 sleep(14*24*60*60);
让你的脚本在那之后执行你的代码,并把所有这些放在一个无限循环中。然后从控制台运行脚本,这样它就没有执行时间限制

考虑到脚本可能会因不同的原因停止运行,例如服务器重新启动时,因此您应该监视该进程,如果该进程未运行或重新启动时,则应自动重新运行该进程。

这可能适合您

  function runEveryWeek(){
     sleep(/*for 2 weeks*/);
     runEveryWeek();
  }

为了每周显示不同的内容,您可以使用

$week = (int)date('W');
$odd = ($week % 2) === 0;
if ($ood) {
    // First week.
} else {
    // Second week.
}

你确定吗?您的网页将打开2个月

你可以应用一种逻辑

只需在数据库中保存下一个cron日期。所以你的逻辑会像

<?php

if($databaseDate == date()){
   //Perform acetion here
   // Save your next date here
}
?>

我希望这能解决你的问题

如果你不想这样做,那么你可以使用


对于pm2,您需要ssh访问服务器。

我刚刚更新了您的示例,现在它将在下周一正常工作:

$weekInYearNumber = (int)date('W');
$weekDayNumber = (int)date('w');
if ($weekDayNumber === 1 && $weekInYearNumber % 2 == 0) {
    // Rest of your code.
}

如果您想快速完成,您可以从2018年1月1日开始计算周数(因为这是周一:任何其他以周一开始的年份都可以),然后检查该数字是奇数还是偶数:

      $diffBetweenNowAndFirstJan2018 = time() - strtotime("2018-01-01");
      $numberOfWeeksSinceFirstJan2018 = floor($diffBetweenNowAndFirstJan2018 / (60 * 60 * 24 * 7));
      $isNumberOfWeeksOdd = ($numberOfWeeksSinceFirstJan2018 % 2 == 1)

      if($isNumberOfWeeksOdd){
            // it's other week time
    }
一行:

     if( ( (floor((time() - strtotime("2018-01-01")) / (60 * 60 * 24 * 7))) % 2 == 1) ){
            // it's other week time
    }

你不应该像Vladmir说的那样使用date('W'),因为在除夕之间,你可以连续得到两个“奇数”周

您需要一个cron或其他东西来触发该页面/脚本。PHP不会自行触发。请查看
date('W')
。这将为您提供一年中的周数。我如何处理上述代码?即使浏览器刷新,这些代码也能工作吗?我将如何添加一个条件来检查第3周和第4周?提前谢谢。是的,会的)你为什么要问?每次这种情况被调用时,它都会检查是否是第二周?我从来没试过,但看起来棒极了!谢谢你的帮助!很高兴它能帮助你!)不,那根本不行。从web服务器上运行的PHP脚本不能一次运行数周——它们将在这之前很久被杀死。