Проверить и дописать в конец файла php ?

usergeyv

Знаток
Регистрация
5 Июл 2013
Сообщения
152
Реакции
25
PHP:
file_put_contents('x.txt', PHP_EOL .'testзапись', FILE_APPEND);

Как организовывать проверку "testзапись" если есть пропустить, если нет записать в конец

получить данные через file_get_contents и пробежаться поиском по всем строкам
Можно пример кода:(
 
Последнее редактирование модератором:
получить данные через file_get_contents и пробежаться поиском по всем строкам
<-------------- добавлено через 8249 сек. -------------->
Можно пример кода:(

самый простой вариант

Код:
if (strpos(file_get_contents('x.txt'), 'testзапись') === false)
    file_put_contents('x.txt', PHP_EOL .'testзапись', FILE_APPEND);
else
    print "already exists";
 
Я бы вместо strpos() использовал mb_strpos() – результат будет предсказуемым и с многобайтными кодировками.
а я бы preg_match использовал с \$, иначе под ваш шаблон попадает и testзапись в начале файла. А если у него вместо тестзаписи там что-то популярное из серии 'echo' - то получите 95% ложных срабатываний.
 
Я бы вместо strpos() использовал mb_strpos() – результат будет предсказуемым и с многобайтными кодировками.
<-------------- добавлено через 770 сек. -------------->
получите 95% ложных срабатываний.
я так понял, что ТС как раз хочет просто проверку наличия искомой строки в файле организовать:
PHP:
если есть пропустить, если нет записать в конец
 
strpos will find the position of the first string that he found, so if you have multiples lines it will find the first place but not in the last line, if you need to check only the last line you could use fopen ('x.txt , 'a+'), which will place the file pointer at the end of the file and then just loop backwards to read until start of the line

Код:
$handler = fopen('x.txt', 'a+');
$cursor = -1;
fseek($handler, -1, SEEK_END);
$char = fgetc($handler);
$line = '';
while ($char !== false && $char !== "\n" && $char !== "\r") {
    $line = $char . $line;
    fseek($handler, $cursor--, SEEK_END);
    $char = fgetc($handler);
}
var_dump($line);
 
Назад
Сверху