Как да изтриете ред от файл

Когато се работи с малки количества данни в PHP, понякога е по-лесно да ги съхранявате във файл, можете да създадете база данни и организиране на взаимодействието с нея скриптове. В такива случаи, задачата за отстраняване на конкретни редове от текстов файл не се случва често. Нека разгледаме по-подробно на възможно най-лесният начин да го направя.

ще трябва

  • Основни познания за PHP

инструкция

- Имаме текстов файл allStrings.txt, която съдържа редица информационни линии

- който искате да премахнете от файл линия №44

Алгоритъм за решаване на този проблем е: трябва да отворите файла, прочетете информацията в него струни в низ масив, и презапишете съществуващите съдържанието на файловете на масива, като прескочите линията, предназначена за отстраняване.
  • За да се приложи този алгоритъм в сценария, първо се присвоява стойност на променлива, която ще съдържа оригиналното име на файла и номера на реда, осъден на отстраняване: $ Име на файл = "allStrings.txt";

    $ LineToKill = 44, а след това се чете само файла в масив от низове: $ stringsArray = файл ($ име); провери дали има ред в необходимия файл. Всички допълнително по-код ще бъде изпълнена само ако състоянието $ lineToKill на не повече от броя на редовете в масива $ stringsArray: ако ($ lineToKill // тук ще бъде основната програма линия

    > Ако условието не е изпълнено, тогава ние няма от какво да се премахне. Нека сценария отпечатва информационно съобщение за това: друго ехо "Броят на редовете във файла е по-малко от" $ lineToKill; ако условието е изпълнено, е необходимо да се почисти оригиналния файл към нов рекорд ..: $ FileHandle = fopen ($ името на файла, "w") "!" ; Сега трябва една линия, която повтаря върху всички елементи на масив от низове. Но тъй като индексирането на масива започва от нула, и номера на реда, за да се заличи, ние разчита на един, а след това преди началото на цикъла се намали стойността на $ lineToKill по един, за да не се повтаря тази операция на всяка крачка: $ lineToKill -; шумен една линия: foreach ( $ stringsArray като $ ключ => $ стойност)

    // код тук всяка стъпка цикъл

    > $ Ключова променлива ще съдържа индекса на текущия ред в масива, и променлива стойност $ - стойността на тази линия. На всяка стъпка от цикъла ще сравни код низ в масив, предназначена за отстраняване на редица и ако те не съвпадат, тогава пишем стойността на този низ във файла: ако (! $ Ключ = $ lineToKill) неуспешно ($ fileHandle, $ стойност); A ако мачът, а след това да бъде записан няма, както и ще се отпечата съобщението е изтрит успешно: ". изтрита" .. друго ехо "низ" $ lineToKill и в края на работния цикъл, след като е бил и записва файла, учтиво да го затвори: fclose ($ fileHandle);
  • Всички код в събранието ще изглежда така: $ lineToKill = 44; $ stringsArray = файл ($ име);

    ако ($ lineToKill $ fileHandle = fopen ($ името на файла, "w");

    foreach ($ stringsArray като $ ключ => $ стойност)

    ако ($ ключ = $ lineToKill!) неуспешно ($ fileHandle, $ стойност);

    .. Иначе ехо "низ" $ lineToKill "премахната.";

    След това, в продължение на работата, която трябва да се създаде временен файл. Да го направим в папка "ПТУ" и префикс временен файл ще даде едно и също: $ tempFile = tempnam ( "/ ПТУ", "ПТУ"); Сега се опитайте да отворите файла източник, за да се чете: ако ($ fileHandle = @fopen ($ име на файл " РБ "))

    // този код ще се изпълнява в случай на нормално отваряне на оригиналния файл

    > Ако не успее - по-нататъшната работа на скрипта няма смисъл, нека да убие процес с подходящи съобщения: друго умре ( "Източник на файла не съществува!"); Ако файлът се отваря нормално, след това публикува съобщение за това и да се опитате да отворите по-рано създаден временен файл с подходящи съобщения: ехо "на оригиналния файл съществува";

    ако ($ tempHandle = fopen ($ tempFile, "W")) ехо "е създаден временен файл.", а сега е време да започнете цикъла на четене линии от изходния файл, който ще продължи, докато лежеше в файл, завършващ: докато (feof (! $ fileHandle))

    // този код ще работи с текущия ред

    fclose ($ tempHandle); накрая преименуване на временен файл с оригинала. Ако тази операция е успешна, тя ще издаде съответното съобщение: ако (преименуване ($ tempFile, $ име)) ехо "lineToKill на низ $ отстранен";
  • Всички код в събранието:

    $ LineToKill = 44; $ tempFile = tempnam ( "/ TMP", "TMP");

    ехо "на оригиналния файл съществува";

    ако ($ tempHandle = fopen ($ tempFile, "w")) ехо "Временният файл е създаден.";

    друг да умре ( "Източник на файла не съществува!"); докато (feof ($ fileHandle)!)

    ако ($ lineToKill = (++ $ lineNum)!) неуспешно ($ tempHandle, $ lineToWrite);