Подскажите есть ли такая возможность в ПХП удалить последний символ (или запись) из текстового файла? Например мы добавляем запись в текстовый файл: $data=345; $filename="data.txt"; $filepointer=fopen($filename, "a+"); fwrite($filepointer, "$data"); fclose($filename); и допустим у нас уже есть несколько записей в текстовом файле до этого: 12 345 Как можно удалить только последнюю запись не трогая предыдущую?
PHP: <?php $data='345'; $filename = "data.txt"; $handler = fopen($filename, "a+"); fwrite($handler, $data . '\r\n'); fclose($handler); //Удаление последней записи $file = file($filename); array_pop($file); //Пересобираем строку $str = implode('\r\n', $file); file_put_contents($filename, $str); ?>
Я несовсем понял что именно значит "пересобираем строку"( я только учусь- новичек), и что конкретно происходит в этих 3 строках: array_pop($file);(здесь, как я понимаю, мы строим массив из текстового файла, где каждой строке фала соответствует ячейка массива. Если да то такой вариант мне несовсем подходит , потому что я немогу ставитбь перенос строки после добавления данных. Мне нужно чтобы все было в одной строке, потомучто в другой строке уже идут другие данные) //Пересобираем строку $str = implode('\r\n', $file); file_put_contents($filename, $str);
Раздел записей фиксирован? Или между ними есть какой-то разделитель? Если оба ответа "нет" - то никак. Более того вы даже прочитать назад по-отдельности записи не сможете.
Это обычно. Тебе нужен один из вариантов 1. фиксированный размер записи 2. разделитель между записями 3. Где-то отдельно хранить информацию о месте записи
Например, дополняй данные пробелами до длины 9 символов. PHP: <?php define ('RECORD_SIZE', 9); $fp = fopen('somefile.txt', 'a+'); for ($i=1; $i<10; $i++) { $a = sprintf('%' . RECORD_SIZE . 's', $i); fwrite($fp, $a); } // читаем 6й элемент fseek($fp, (6 - 1) * RECORD_SIZE); $res = fread($fp, RECORD_SIZE); var_dump($res); fclose($fp);
$a = sprintf('%' . RECORD_SIZE . 's', $i); Если Вас незатруднит, немогли бы Вы пояснить детальнее эту строку? Я пока еще неучил такие выражения. И можно ли избавитса от пробелов между символами?