Как переписать 1 указанную строку в цикле .txt файла с помощью PHP file_get_contents - PullRequest
0 голосов
/ 29 марта 2019

Я перебираю текстовый файл и ищу токен.Когда найден, мне нужно заменить эту строку новой строкой.

Как мне это сделать?Я попытался fwrite, и я не мог сделать это правильно.

$file = 'test.txt';
$content = file_get_contents($file);
$alllines = explode("\n", $content); // this is your array of words

foreach ($alllines as $line) { //find requested token and check if it's virgin or not

    global $file;
    global $content;
    global $newtoken;
    global $token;
    $newtoken = md5(time());

    $words = explode("-", $line);
    //first word is token 2nd is opened or virgin

    if ($words[0] == $token) {
        //requested token found

        if ($words[1] != "opened") {
            echo "virgin token<br>";
            $newword = $words[0] . "-opened";
            //file_put_contents($file, $newword.PHP_EOL , FILE_APPEND | LOCK_EX); //this adds the new string in the end of the file -- not good
            echo "<br>now rewritten";
        } else {
            echo "used token<br>";
        }

        exit;
    } else {
        continue;
    }
}
echo "token not found"; exit;

Я хотел бы иметь возможность заменить эту строку в $ newword значением $ newword.

1 Ответ

2 голосов
/ 29 марта 2019

Вот мое предложение. Когда вы найдете токен, а он еще не opened, замените эту строку в массиве и перепишите файл с развернутым массивом:

$file = 'test.txt';
$alllines = file($file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

$newtoken = md5(time());
$tokenFound = false;
foreach ($alllines as $lineNumber => $line) { //find requested token and check if it's virgin or not
    $words = explode("-", $line);
    //first word is token 2nd is opened or virgin

    if ($words[0] == $token) {
        //requested token found
        $tokenFound = true;
        if ($words[1] != "opened") {
            echo "virgin token<br>";
            $alllines[$lineNumber] = $token.'-opened';
            file_put_contents($file, implode(PHP_EOL, $alllines), LOCK_EX);
            echo "<br>now rewritten";
        } else {
            echo "used token<br>";
        }
        break;
    }
}
if (!$tokenFound) {
    echo "token not found";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...