Добрый вечер!
Помогите пожалуйста разобраться с задачей.
Есть файл в котором , например, 5 строк. Пускай это будет "text.txt". Есть файл "go.php" - из него мы добавляем строку в "text.txt". Что сделать, чтобы при добавлении новой строки в "text.txt" удалялась последняя строка из этого же файла, а остальные четыре сдвигались на одну позицию вниз (количество строк остается прежним) ?
Желательно пример реализации на PHP, если такое возможно
Заранее спасибо!
Для правильного вопроса надо знать половину ответа
Открываете файл (fopen)
Блокируете его эксклюзивно (flock)
Считываете построчно (fgets) первые четыре строки
Обрезаете файл до нулевой длины (ftruncate)
Записываете новую строку (fputs)
Записываете четыре ранее считанные строки (fputs)
Разблокируете файл (flock)
Закрываете файл (fclose)
Rsa97, я читал мануал и довольно много времени потратил на поиск ответа, иначе какой смысл мне тут задавать вопрос? Это уже крайняя мера. Но я так и не додумался или не догадался, каким образом при помощи fgets прочитать определенную строку, единственный момент - длина строки у этой функции измеряется в байтах, что же мне, вручную измерять вес каждой строки и каждый раз прописывать? На этом сервисе люди задают вопросы, почему в таком случае не убрать возможность отвечать тем, кто разбирается в вопросе, пускай введут просто универсальный ответ на все вопросы "читайте мануал" и дело с концом :/
polyvanov, Плохо читали. Параметр length взят в прямоугольные скобки, а значит он не является обязательным. Если прочитать его описание, то выяснится, что "Если длина не указана, чтение из потока будет продолжаться до тех пор, пока не достигнет конца строки".
Таким образом, для считывания первых четырёх строки из файла достаточно четыре раза вызвать функцию fgets, передав ей только один параметр - указатель на открытый файл.
Rsa97, каким образом fgets определит, что нужно читать конкретную строку, например, вторую? Мне кажется fgets подходит больше, когда данные записываются в одну длинную строку. И зачем говорить загадками, если Вы могли дать развернутый ответ?
polyvanov, Если хотите, чтобы всё сделали за вас - идите на Фрилансим.
fgets не определяет, какую строку надо считать. Он считывает строку, на которой стоит указатель чтения в файле.
У вас задача - считать последовательно четыре строки с начала файла, очистить файл, записать в него новую строки и четыре считанные ранее строки. Что тут сложного?