PHP每天數據寫當天文件,第二天讀取,和刪除三天前的文件

關於這個腳本,我思路是文件名直接用當天的日期,之後讀取文件和刪除文件就很方便了。如:20190218.txt

關於時間的處理:獲取當前時間可以使用date()函數,獲取到的是當前的時間戳,如果想顯示日期可以給裏面加參數,參數規定時間顯示的格式,如data("Ymd"),是本次我使用的日期格式,輸出的數據就是"20190218"這樣;date("Y-m-d")是"2019-02-18";如果還要顯示具體的時間,date("Y-m-d H:i:s"),結果如"2019-02-18 10:51:26"。關於獲取前幾天或後幾天的時間,可以使用strtotime()方法。這個方法的作用是將英文文本日期時間解析爲 Unix 時間戳。使用方法如:date("Ymd",strtotime("-1 day");獲取昨天的日期,若是獲取三天前的,則把"-1 day"換成"-3 days"即可;當然,也可以把day換成mouth,week,hour,year等,前面是“-”表示前幾天或幾小時,“+”表示後幾天或幾小時的時間。由於它是按時間戳算,所以只能計算1970年之前的。自 January 1 1970 00:00:00 GMT 起的秒數。

$date = date("Ymd");
$file_name = '/tmp/'.$date.'.txt';

以上代碼是獲取當前時間並生成文件名的部分,文件存在/tmp目錄下。

 

PHP寫文件:寫文件需要一條數據寫一行,最開始使用的是file_put_contents(),用於把一個字符串寫入文件中。這個方法的語法是:

file_put_contents ( string $filename , mixed $data [, int $flags = 0 [, resource $context ]] )

參數的含義分別是:

爲了避免出錯,數據寫入前都先使用json_encode編碼爲json字符串。使用file_put_contents方法寫入數據,後面勢必要加FILE_APPEND,但是數據會直接跟在後面,讀取的時候讀取一行數據會把整個文件作爲一行數據都讀出來,而不是取一條。解決的辦法是每行數據後都加入一個換行符。後面發現了PHP更爲方便的一個文件處理方法,就不再用這個方法。

$fp = fopen($file_name,'a'); //打開文件,生成文件句柄,如果文件不存在則新建。
fwrite($fp,json_encode($log)."\n"); //寫入數據
fclose($fp); //關閉文件

PHP讀取文件:使用的方法是fgets(),該方法一次讀取一行數據。

$date = date('Ymd',strtotime('-1 day')); //獲取前一天的日期
$file_name = '/tmp/'.$date.'.txt'; //前一天的文件名
if(file_exists($file_name)) {
    $fp = fopen($file_name, "r");
    while (!feof($fp)) {
        $log = fgets($fp);
        $log = json_decode($log, true);
        ...
        //使用讀取的數據,記得判空,最後一行是個換行符
        ...
        }

    fclose($fp);
}

PHP刪除文件:使用unlink方法,若成功,則返回 true,失敗則返回 false。

$date = date('Ymd',strtotime('-3 days')); //獲取三天前的日期
$file_name = '/tmp/'.$date.'.txt'; //三天前的文件名
if(file_exists($file_name)){
    unlink($file_name); //刪除文件
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章