2010-02-14 3 views
2

Есть ли способ добавить или удалить строку текста из файла с помощью PHP.Редактирование файлов в PHP

Я в процессе написания панели управления хостингом для своего конкретного стека веб-хостинга и хотел бы иметь возможность вносить изменения в файлы с минимальными требованиями касаться файловой системы и, как таковой, не хотел бы иметь переписать весь файл, чтобы добавить или удалить параметр конфигурации.

+0

Вы можете уточнить - вы можете гарантировать, что опция конфигурации всегда будет находиться на последней строке? – Mawg

ответ

0

Работа с файлами в PHP полна подводных камней, в частности, параллельного параллелизма и блокировки. Тот факт, что вы пишете файлы конфигурации, также подразумевает, что вы подвергаете задачи, обычно доступные только пользователю с привилегиями root через Интернет. Вы не упомянули об этом в своем посте, но ваш вопрос тривиален по сравнению с решением этих проблем.

Что касается вашего вопроса - хотя его довольно тривиально реализовать то, что вы предлагаете (например, exec'ing sed - хотя вы и не сказали, на какой ОС это работает) Я бы рекомендовал создать копию исходного файла в некоторое другое представление - очевидные кандидаты были бы базой данных, где вы можете применять порядковые номера к строкам и легко создавать пробел для заполнения, или PHP SplDoublyLinkedList, хранящийся в сеансе. Затем, как только пользователь выполнил столько изменений, сколько потребуется, регенерируйте файл в одной операции из рабочего представления.

Обратите внимание, что в конечном счете, независимо от того, как вы реализуете решение, решение будет переписывать весь файл - это всего лишь вопрос о том, какая часть этого процесса раскрывается в вашем коде.

Помните, что то, что вы делаете, такое же, как и большинство веб-скриптов php, за исключением того, что они манипулируют и переписывают HTML, вы делаете это с другим типом файла - так что вы можете посмотреть, как написаны другие шаблонные системы PHP и рассмотрим, можно ли создать шаблон для ваших файлов конфигурации.

НТН

C.

+0

Спасибо за ваш ответ (и всем остальным, кто нашел время, чтобы ответить мне.) это правильно решение, с которым я закончу работу. поскольку это кажется лучшим решением моей конкретной проблемы. Система предназначена для * систем NIX для управления веб-службами (почтой, DNS и www-сервером), и я намерен завершить изменение в отдельном скрипте, который не отображается в веб-интерфейсе, чтобы обеспечить его защиту. – Philderbeast

1

Да, вы можете открывать файлы в режиме добавления:

$fh = fopen('testFile.txt', 'a'); 

Если теперь записать в файл, новое содержание добавляемое.

См fopen и с этой документацией:

'а': Открыть только для записи; поместите указатель файла в конец файла. Если файл не существует, попытайтесь его создать.

Удаление последней строки невозможно.

+0

как он справляется с удалением опции? – Mawg

2

Невозможно удалить строку из файла без предварительного разбора файла в строках, а затем снова записать его.

Вы можете добавить в файл с помощью fopen с $mode набора к «а»

$fp = fopen('myfile', 'a'); 
2

Для добавления, вы должны использовать fopen с $mode из a.

See this please, о том, как удалить строку из файла.

0

Если вам нужно что-то изменить в середине файла, вы должны прочитать его, проанализировать и сохранить. В противном случае вы можете только добавить что-то к концу.

Вы не должны беспокоиться о стоимости этой операции, хотя, поскольку это файл конфигурации, который не будет изменяться сотню раз в секунду, это должно занять незначительное время.

Если вам нужна дополнительная гибкость в доступе/обновлении/удалении, я думаю, вам стоит переместить файл конфигурации в таблицу базы данных.