PHP - Edit/Delete particular line in a file

做~自己de王妃 提交于 2019-12-08 04:52:18

问题


I have a file users.txt which contains:

"ID" "Access" ;Expire>>26-08-2013<<
"ID" "Access" ;Expire>>27-08-2013<<
"ID" "Access" ;Expire>>28-08-2013<<

I wan't to check if the Expire date is greater than current datetime, and if so I want to add a semicolon at the begin of that line or simply delete that line.

The code i wrote so far for that is following:

$files = file('users.txt');
foreach ($files as $line) {

    $pattern = '/>>(.*)<</';
    preg_match($pattern, $line, $matches);
    $expiredate = strtotime($matches[1]);
    $currdate = strtotime(date('d-m-Y'));
    if ($currdate > $expiredate) {
        echo 'access expired... edit/delete the line<br/>';
    } else {
        echo 'do nothing, its ok -> switching to the next line...<br/>';
    }

 }

It retrieves the 'expire date' from every single line from file. It also checks if it's greater than current date but at this point i don't know how to edit (by adding semicolon at the begin) or delete the line which satisfy the condition.

Any suggestions?


回答1:


Try like this one:

$files = file('users.txt');

$new_file = array();
foreach ($files as $line) {

    $pattern = '/>>(.*)<</';
    preg_match($pattern, $line, $matches);
    $expiredate = strtotime($matches[1]);
    $currdate = strtotime(date('d-m-Y'));
    if ($currdate > $expiredate) {
        // For edit
        $line = preg_replace('/condition/', 'replace', $line); // Edit line with replace
        $new_file[] = $line; // Push edited line

        //If you delete the line, do not push array and do nothing
    } else {
        $new_file[] = $line; // push line new array
    }
 }

file_put_contents('users.txt', $new_file);

If you want to edit that line, use preg_match and push edited line to new array.

If you want to delete that line, do nothing. Just ignore.

If you want switching to the next line, push currently line to new array.

At final save new array to file.




回答2:


The basic process is:

open main file in readonly mode
open secondary (temp) file in writeonly mode
Loop: readline from main file
   process the line
   save to secondary file
until end of file
close both files
delete the main file
rename the secondary file.


来源:https://stackoverflow.com/questions/18461951/php-edit-delete-particular-line-in-a-file

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!