Я пытаюсь изменить мой текстовый файл, который я использую в dokuwiki.
Я генерирую метку времени поверх txt-файла следующим образом:
function filecont($file,$data)
{
$fileContents = file($file);
array_shift($fileContents);
array_unshift($fileContents, $data);
$newContent = implode("\n", $fileContents);
$fp = fopen($file, "w+");
fputs($fp, $newContent);
fclose($fp);
}
И мой оригинальный текстовый файл выглядит так:
Теперь, когда я использую свою функцию:
$txt= "Last generated: " . date("Y M D h:i:s");
filecont($file,$txt);
Я получаю такой результат:
Теперь я не хочу удалять мои ====== Open IoT book ======
это, вероятно, потому что у меня нет пустого места в первой строке?
Но худшая проблема, которая у меня есть, это то, что я генерирую много пустых мест, чего я не хочу.
Я только хочу получить last generated
в верхней части TXT-файла и все остальное нетронутым
Я проверил ваш код и удалил лишние новые строки, изменив строку:
$fileContents = file($file);
в
$fileContents = file($file, FILE_IGNORE_NEW_LINES);
Добавление флага FILE_IGNORE_NEW_LINES останавливает добавление новой строки к каждому элементу / строке.
http://php.net/manual/en/function.file.php.
Я также удалил функцию array_unshift (), которая оставляет в файле ‘====== Open IoT book ======’.
Итак, моя последняя функция выглядела так:
function filecont($file,$data)
{
$fileContents = file($file, FILE_IGNORE_NEW_LINES);
//array_shift($fileContents); Removed to preserve '====== Open IoT book ======' line.
array_unshift($fileContents, $data);
$newContent = implode("\n", $fileContents);
$fp = fopen($file, "w+");
fclose($fp);
}
Можно просто удалить эту строку
array_shift($fileContents);
решить вашу проблему?
когда вы получаете элементы файла, вы должны проверить, Last generated:
как ваш первый ряд или не в соответствии с этим вам нужно использовать array_shift
$fileContents = file($file);
if(stripos($fileContents[0],"Last generated:") !== false)
{
array_shift($fileContents); //if found use shift
}
array_unshift($fileContents, $data);