【问题标题】:if statement with a limit phpif 语句与限制 php
【发布时间】:2011-04-28 17:27:41
【问题描述】:

我这样做是为了检查我的课程表,以便在没有课时提醒我。我将它设置为每小时检查一次的 cron 作业,但我的问题是,当没有课时,我整天都会收到警报,除非我禁用 cron 作业,否则无法停止它。 我想知道如何将这一天限制为只有 5 个提醒?

$source = file_get_contents($website);
preg_match('#<classtime>(.*?)</classtime>#', $source, $match);

    if (strlen($match[1])<32) {
        mail('XXXXXXXXXX@txt.att.net', 'REMINDER!', 'No Class');
    }
    else

    if (strlen($match[1])>32) {
        mail('XXXXXXXXXX@txt.att.net', 'REMINDER!', 'No Class');
    }

    else {
        echo "Check Class Schedule";
    }

【问题讨论】:

  • (sidenote) 考虑使用 SimpleXml 来解析 XML 而不是使用 Regex。考虑检查if === 32 then echo else mail 以删除重复项。另外,将幻数 32 替换为有意义的数字。
  • 为了让事情变得有趣,您是指任何 24 小时内的 5 个还是午夜和午夜之间的 5 个?我想你的意思是后者,但前者会更有趣。
  • @Blowski 是的,24 小时会很好。
  • 完成 - 请参阅下面的答案。
  • 你最后得到了什么答案?

标签: php if-statement


【解决方案1】:

保存一个文本文件(或使用数据库)以更新当天发送警报的次数, 如果大于 5 则不发送警报

【讨论】:

    【解决方案2】:

    将已发送警报的计数存储在某个文件中,每次检查时递增,如果计数大于 5,则不要发送警报。午夜过后,将计数重置为 0。

    【讨论】:

      【解决方案3】:

      快速而简单的答案是创建一个文件,您可以对其进行读写。例如。

      while (( $fp = fopen ($counterfile,"r+")) == false)
      { usleep(5);}
             while (!flock($fp,2))
      { usleep(5); }
      $data = fread($fp,filesize($counterfile));
      if (rewind($fp)!=0)
      {
              $data++;
              fwrite($fp,$data,strlen($data));
      }
      flock($fp,3);
      fclose($fp);
      

      如果每次遇到“No class”情景时都使用它,一旦达到 5,如果读取显示为 5,则不再发送任何消息。然后为了简单起见,在午夜有一个 cron 作业将“0”回显到文件中。

      【讨论】:

      • 谢谢!我只是想知道我是否只是将它放入我的代码中,还是我必须将我的代码添加到这个中
      • 要么说实话。读取和递增计数器,您可以将代码添加到它,或者将它添加到您的代码中。
      【解决方案4】:

      在过去 24 小时内检查不超过 5 封电子邮件。可以进行大规模改进,它需要错误处理,但它应该可以工作:

      $log_file = 'log.txt';
      $log = file_get_contents( $log_file );
      $timestamps = array_splice( explode( PHP_EOL, $log ), -5, 1 );
      if ( count( $timestamps > 5 ) )
          {
          if ( end( $timestamps ) == '' )
              {
              array_pop( $timestamps );
              }
          $fifth_from_last_email = ($timestamps[0]);
          $time_24_hours_ago = time() - 3600 * 24;
          if ( $fifth_from_last_email < $time_24_hours_ago )
              {
              $fp = fopen( $log_file, 'a+' );
              fwrite( $fp, time() . PHP_EOL );
              fclose( $fp );
              mail( 'XXXXXXXXXX@txt.att.net', 'REMINDER!', 'No Class' );
              }
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-18
        • 1970-01-01
        • 1970-01-01
        • 2017-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-14
        相关资源
        最近更新 更多