Php 如何使脚本在一个月后运行?

Php 如何使脚本在一个月后运行?,php,Php,我正在为网站创建一个访客柜台。它需要显示当月的访问量。 代码如下: <?php if(file_exists('visitors.txt')) { $myFile = "visitors.txt"; $fh = fopen($myFile, 'r'); $myFileContents = fread($fh, 21); fclose($fh); echo $myFileContents; $myFile2 = "visitors.txt"

我正在为网站创建一个访客柜台。它需要显示当月的访问量。 代码如下:

<?php
 if(file_exists('visitors.txt'))
 {
    $myFile = "visitors.txt";
    $fh = fopen($myFile, 'r');
    $myFileContents = fread($fh, 21);
    fclose($fh);
    echo $myFileContents;
    $myFile2 = "visitors.txt";
    $myFileLink2 = fopen($myFile2, 'w+') or die("Can't open file.");
    $newContents = $myFileContents+1;
    fwrite($myFileLink2, $newContents);
    fclose($myFileLink2);
    echo $newContents;
 }
 else
 {
    $myFile = "visitors.txt";
    fclose($fh)
 } 
?>

这是基本思想。
我查看文件是否存在。
如果是,则我读取内容并将其添加到计数中,并将其保存到文件中(覆盖以前的数据)。
如果否,则创建计数为1的文件

$ym = date("Y-m");  // 2018-05
if(file_exists('visitors-' $ym . '.txt')){ // visitors-2018-05.txt
    $count = file_get_contents('visitors-' $ym . '.txt');
    $count++;
    file_put_contents('visitors-' $ym . '.txt', $count);
}else{
    file_put_contents('visitors-' $ym . '.txt', "1");
}
编辑;只要您不亲自打开和编辑内容(不小心添加了空格或其他字母,导致$count++失败),这应该可以正常工作。
您可以执行
$count=(int)文件获取内容('visitors-'$ym..txt')但它并不完全安全。
如果您需要一个万无一失的解决方案,我认为您需要对内容进行正则化,但这是一种过激的做法,它会毫无理由地消耗内存和cpu。
只要远离文件,只使用代码打开它,您就安全了

再次编辑:只是一个提示。几个月后,您将拥有大量文本文件。

将它们保存在一个单独的文件夹中,以保持webroot中的干净。

您可以省去很多麻烦,并将信息存储在数据库中。使用cronjob触发另一个脚本进行重置…为什么要每月从0开始?为什么不保留数据并在下面的行中添加一个新的月份,或者创建一个新文件
Visitors 2018-06
或其他什么?不需要cronjob。顺便问一下,你真的想在脚本中使用
或死(“无法打开文件”)
?您是否应该仅仅因为无法将访问者存储在文本文件中而完全停止执行请求?您可能还需要使用
LOCK\u EX
-标志,因为我假设站点上可以同时有多个用户。可能不需要,但比抱歉更安全。@MagnusEriksson老实说,我从来没有使用过LOCK_EX。它做什么?它基本上在文件上设置了一个文件锁,以便在打开和写入文件时不能从另一个进程更改它(为了事务完整性)。在这种情况下,可能根本不需要它,除非OP在同一时间获得大量用户。但是OP在文件解决方案方面会有更大的问题,所以…-)我只是习惯于在写入可能同时被其他进程更改的文件时使用它。