[PHP] Jak dopisać dane na początku pliku tekstowego?
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.
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.