[PHP] Jak dopisać dane na początku pliku tekstowego?

0x01 graphic

Zwykle wszystkie dane dopisuje się na końcu pliku, ale nagle musisz dopisać coś na samym początku. Konieczność dopisania informacji na początku może wystąpić w tekstowych bazach danych, plikach z informacjami, zapiskami, raportami, statystykami. Można to zadanie wykonać na wiele sposobów.

0x01 graphic

Odczytaj cały plik i umieść go w tablicy. Teraz dopisz to, co miało się znaleźć na początku pliku, a następnie dodaj zapamiętaną wcześniej resztę pliku z tablicy. Oto gotowy kod programu:

<?

//odczyt pliku do tablicy

$dane = file("plik.txt");

$ile = count($dane);

//zapisanie nowej linijki i starej zawartości

$up = fopen("plik.txt", "w");

flock($up,2);

fwrite($up, "pierwsza linijka\n");

for($i=0; $i<$ile;$i++) fwrite($up, $dane[$i]);

flock($up,3);

fclose($up);

?>

Na początku trzeba pobrać całą zawartość pliku do tablicy za pomocą file(). Następnie musisz otworzyć plik do zapisu, ale tak by nadpisać zawartość, czyli w trybie "w" (write). Teraz jako pierwsze dopisujemy nasze wyrażenie - pierwsza linijka\n (\n to przejście do nowej linii), a za nim całą zawartość wcześniej odczytanego pliku, która znajduje się w tablicy $up.

Po małych zmianach w kodzie można dopisać nowe wyrażenie w dowolne miejsce w pliku, wystarczy odpowiednio zmodyfikować zawartość tablicy. Nadpisywanie pliku zawsze jest niebezpieczne, więc gdy robi to kilka osób jednocześnie warto zablokować na chwilę dostęp do pliku poprzez funkcję flock(). Wartość 2 blokuje dostęp innym, wartość 3 odblokowuje dostęp. W tym czasie tylko my możemy zmieniać zawartość pliku i nikt go nam nie zmieni (w większości wypadków, ponieważ nie zawsze funkcja flock() działa poprawnie - zależy to od systemu operacyjnego).

Jeżeli zawsze chcesz dopisywać informacje na początku pliku, to pamiętaj, że możesz dopisywać dane na koniec pliku, a plik odwrócić, aby to co jest na końcu znalazło się na początku. Jak? Oto kod:

$dane = file("plik.txt");

$dane = array_reverse ($dane);

Teraz Twój plik (w tablicy) jest obrócony. Możesz więc zapisywać zawsze na końcu i wyświetlać od końca. Łatwo i wygodnie.