1

以下を含むファイルusers.txtがあります。

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

有効期限が現在の日時よりも大きいかどうかを確認したくありません。そうであれば、その行の先頭にセミコロンを追加するか、単にその行を削除します。

そのためにこれまでに書いたコードは次のとおりです。

$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/>';
    }

 }

ファイルのすべての行から「有効期限」を取得します。また、現在の日付よりも大きいかどうかもチェックしますが、この時点では、条件を満たす行を編集する方法 (先頭にセミコロンを追加することによって) または削除する方法がわかりません。

助言がありますか?

4

2 に答える 2

5

このようにしてみてください:

$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);

その行を編集したい場合は、編集した行を使用preg_matchして新しい配列にプッシュします。

その行を削除したい場合は、何もしないでください。無視してください。

次の行に切り替えたい場合は、現在の行を新しい配列にプッシュします。

最後new arrayにファイルに保存します。

于 2013-08-27T09:59:14.453 に答える