php php5 xhtml css mysql sqlite - projektowanie stron - własny cms

 
Menu główne

Dzisiaj o 30% taniej!

Statystyka
Wizyt: 2 002 638
Wizyt dzisiaj: 390
Wizyt wczoraj: 756
Wizyt w m-cu: 4692
Osób on-line: 3
Prenumeratorzy: 226


PHP.net
Pobierz Firefoksa!
Valid XHTML 1.0!
Valid CSS!

Porady
[PHP] Zapis danych do pliku tekstowego
Krzysztof Szypulski - Piątek, 27 stycznia 2006 23:23:33

Zapis danych do pliku tekstowego jest to jedna z prostrzych, a zarazem jedna z ważniejszych rzeczy jaką powinien opanować początkujący adept php.

PRZYKŁAD

<?php

// zmienna $dane, która będzie zapisana
// może także pochodzić z formularza np. $dane = $_POST['dane'];
$dane = "tekst do wprowadzenia\n";

// przypisanie zmniennej $file nazwy pliku
$file = "baza.txt";

// uchwyt pliku, otwarcie do dopisania
$fp = fopen($file, "a");

// blokada pliku do zapisu
flock($fp, 2);

// zapisanie danych do pliku
fwrite($fp, $dane);

// odblokowanie pliku
flock($fp, 3);

// zamknięcie pliku
fclose($fp);
?>

Często zadajecie pytanie jak zrobić aby dane dopisane do pliku byly na początku a nie na końcu?
Poniżej przykład takiego skryptu.

PRZYKŁAD
<?php

// zmienna $dane, która będzie zapisana
// może także pochodzić z formularza np. $dane = $_POST['dane'];
$dane="$jakas_zmienna\n";

// przypisanie zmniennej $file nazwy pliku
$file="baza.txt";

// uchwyt pliku, otwarcie do odczytu i dopisania
$fp=fopen("$file", "r+");

// dodanie do zmiennej dane poprzedniej zawartości pliku
$dane=$dane.fread($fp, filesize($file));

// ustawienie kursora na początku pliku
rewind($fp);

// blokada pliku do zapisu
flock($fp, 2);

// zapisanie danych do pliku
fwrite($fp, $dane);

// odblokowanie pliku
flock($fp, 3);

// zamknięcie pliku
fclose($fp);
?>


Od wersji 4.3.2 obsługiwany jest jeszcze jeden tryb otwarcia pliku do zapisu x. Tryb ten daje nam możliwość dopisywania do pliku na jego poczatku. Czyli jeżeli wersja PHP na naszym serwerze jest większa lub równa 4.3.2 to możemy stosować poniższy kod zamiast powyższego.

PRZYKŁAD
<?php

// zmienna $dane, która będzie zapisana
// może także pochodzić z formularza np. $dane = $_POST['dane'];
$dane = "tekst do wprowadzenia\n";

// przypisanie zmniennej $file nazwy pliku
$file = "baza.txt";

// uchwyt pliku, otwarcie do dopisania na początku pliku
$fp = fopen($file, "x");

// blokada pliku do zapisu
flock($fp, 2);

// zapisanie danych do pliku
fwrite($fp, $dane);

// odblokowanie pliku
flock($fp, 3);

// zamknięcie pliku
fclose($fp);
?>


rewind()
, fopen(), flock(), fwrite()

Warto zajrzeć:
http://pl.php.net/manual/pl/function.fopen.php
Drukuj Poleć znajomemuCofnij
Komentarze
K (83.29.2.xxx)
Środa, 05 stycznia 2005 07:44:07
Krócej i treściwiej nie widziałem chyba nigdzie :)

Arky (83.16.13.xxx)
Piątek, 11 lutego 2005 17:06:42
Jak zahashowac "#" konktetna linijke w pliku na serwerze np. /home/ktos/ktos_plik
w linii 13 i jak ja odhashowac ?? Oczywiscie dostep do pliku musi byc na prawach "ktos'ia"

Dafikz (83.23.35.xxx)
Sobota, 12 lutego 2005 18:15:21
Witam nie moge tego zajarac. A jak zrobic np tabelke w ktorej wpisuje dany text i zapisuje go do baza.txt
Od administratora:
A po co zapisywać tabelkę do pliku txt?

Boogi (158.75.16.xxx)
Wtorek, 15 lutego 2005 13:46:58
a dajmy na to mam plaska baze danych wygladajaca tak:
wpis11|wpis12|wpis13|...
wpis21|wpis22|wpis23|...
wpis31|wpis32|wpis33|...
wpis41|wpis42|wpis43|...
jak w takim pliku zmieniac poszczegolne rekordy? wiem ze gdzies juz o tym czytalem ale nie wiem gdzie a potrzebuje takiego skryptu:) z gory dzieki :)
Od administratora:
Wczytaj taki plik do tablicy, rozdziel dane za pomocą explode() i wybierz rekord, który Cię interesuje, zamień na nowy i zapisz wszystko na nowo do pliku.

tomi (62.21.17.xxx)
Czwartek, 17 lutego 2005 08:59:41
Jak zrobić żeby dane zapisywały się jeden pod drugim a nie jak jest teraz w jednej lini
Od administratora:
Przecież te dane zapisują się w nowej lini.
Polecam lekturę Łańcuchy znaków (string)

Mozart (83.21.25.xxx)
Poniedziałek, 18 kwietnia 2005 18:20:11
Witam mi tez dane nie zapisuja sie do nowej linijki tylko odzielane sa takm kwadracikiem !! jak zrobic aby bylo w nowej linijce
Od administratora:
Właśnie ten kwadracik, to znak końca linii. Najprostrzym sposobem sprawdzenia, czy dane zapisują się w nowej linii jest wczytanie pliku do tablicy i wyświetlenie zawartości w pętli foreach().
<?php
$plik
= file("plik.txt"
);

foreach(
$plik as $value
) {
    echo
$value."<br />"
;
}

?>

Carnivore (80.50.204.xxx)
Poniedziałek, 16 maja 2005 18:42:20
A jak ja chcę plik wykorzystać do przechowywania zmiennych i przykładowo aby z pliku dane.txt wczytać tylko 1 zmienną np. z 20 zmiennych (wcale nie pierwszą) następnie zmienić ją i zapisać tak aby inne były bez zmian?

enduro91 (83.16.206.xxx)
Sobota, 21 maja 2005 06:52:00
Czy jeżeli mam 3 pola formularza, to moge dać: &quot;$dane = $_POST['login'] AND $_POST['break'] AND $_POST['gg'];&quot;?
Od administratora:

Nie, każde pole formularza musisz odebrać osobno, a do pliku zapisać używając jakiegoś separatora.


denat (83.30.231.xxx)
Czwartek, 21 lipca 2005 16:51:33
a ja mam takie pytanie... jak zrobic, zeby dane z kazdej linijki (po wcisnieciu entera) w polu textarea byly zapisywane do pliku w jedenej linii i jak je prawidlowo odczytac? z gory dzieki
Od administratora:
Trzeba pozbyc sie znaku konca lini \n $text = str_replace("\n"," ",$text);

Max (83.26.36.xxx)
Czwartek, 18 sierpnia 2005 14:18:32
Mam pytanko (tak jak wszyscy) jak to będzie wyglądało z formularzem? z polem textarea. probowalem gdzies to umiescic ale nie idzie :/ heh...
Od administratora:
http://www.kess.com.pl/index.php?sid=10&pid=31

Michał (80.53.231.xxx)
Piątek, 14 października 2005 20:04:41
A jeżeli chce aby kilka zmiennych zapisywało się na raz to czy muszę kopiować cały 2 skrypt, czy wystarcze jakąć część?
Od administratora:
http://www.kess.com.pl/index.php?sid=10&pid=31

WEB MAJSTER (83.26.202.xxx)
Środa, 30 listopada 2005 21:25:51
A jak zrobić aby tworzony plik był tylko do odczytu?
Od administratora:
Nadać mu takie uprawnienia.

Olek (213.134.160.xxx)
Czwartek, 01 grudnia 2005 13:47:07
Jak utworzyć nowy plik tekstowy?
Dodam, że na moin serwerze pliku nie da się utworzyć funkcją fopen("lokalizacja", "w").
Od administratora:
Serwer ma ograniczenia. Nie ma innej możliwości.

PiciaTM (83.9.11.xxx)
Czwartek, 16 lutego 2006 01:05:36
Witam
jak zrobić coś takiego?
Mamy w pliku dane.txt
linia 1
linia 2
linia 3
Chę zmienić zawartość konkretnie lini np "linia 2" zmienić na "zmieniona 2"
z góry dziękuje za pomoc

Michal (213.134.191.xxx)
Środa, 26 kwietnia 2006 08:15:32
no tak a jak kodowanie wpływa na kształt znaku końca linii??
$text = str_replace("n"," ",$text);
to w moim przypadku nie działa :/
charset=windows-1250
Od administratora:
Nie ma żadnego wpływu

aga (81.168.214.xxx)
Sobota, 13 maja 2006 14:05:11
Wszysko super tylko powiedzcie mi jak dodac do bazy ścieżkę do zapisanego pliku? Chodzi mi o to żeby plik zapisywał sie w katalogu na serwerze a ścieżka do tego pliku w bazie.

andi (82.139.18.xxx)
Niedziela, 04 czerwca 2006 00:16:16
Witam :) w jaki sposob mozna wyswietlic TYLKO pierwszych 10 wpisow? a nie wszystkie na raz?
Od administratora:
<?php
$file
= file("baza.txt");

$end = 10; // ilosc rekordow

foreach(
$file as $value) {
    ++
$i;
    if(
$i <= $end) {
        
$exp = explode("`",$value);
        echo
$exp[0]."<br />".$exp[1]."<hr />";
    }
}

?>

baxxs (83.31.40.xxx)
Czwartek, 20 lipca 2006 23:51:02
Kożystając z porad admina, udało mi się stworzyć czat. Tabela ma szerokość 20 literek i wszystko jest ok dopuki nie wpisze się wyrazu który ma np. 30 znaków. Tabela się rozszeża. Jak w tym przypadku załamać wiersz po 20 literkach?
Od administratora:
<?php
if(strlen($tekst)>20)
$tekst 
wordwrap($tekst20"<br />n");
?>

Elvis (83.11.144.xxx)
Niedziela, 03 września 2006 12:13:52
Siemka wszystkim mam mały problem z skryptem do księgi gości mianowicie po wypełnieniu wszystkie dane idą do notatnika wraz z kodem html, lecz sęk polega na tym, że po dokonaniu ok. 10 wpisów plik zajmuje ponad 5MB (na poczatku wpisy a potem same puste linie ok. 300000). Z racji ze jestem początkującym w tym fachu nie wiem, w czym tkwi problem
<?php
if (file_exists('wpisy.txt')) $dane=file('wpisy.txt');
else
$dane=array();

if (
$plik=fopen('wpisy.txt','w')) {
flock($plik,LOCK_EX);
fputs($plik,"<table width='95%' border='0'>");
fputs($plik,"<tr><td><b>Imię:</b>&nbsp;$_POST[imie]</td><td align='right'>$dzien $miesiac $rok</td></tr>");
if (isset(
$_POST['wyswietl'])) fputs ($plik,"<tr><td colspan='2'><b>E-mail:</b>&nbsp;<i>$_POST[meil]</i></td></tr>");
else
fputs ($plik,"<tr><td colspan='2'><b>E-mail:</b>&nbsp;<i><!-- $_POST[meil] --></i></td></tr>");
fputs($plik,"<tr><td colspan='2'><b>Treść:</b>&nbsp;$_POST[koment]</a></td></tr>");
fputs($plik,"</table><hr />");
for (
$i=0;$i<count($dane);$i++) fputs($plik,$dane[$i]."rn");
flock($plik,LOCK_UN);
fclose($plik);
info('Dziękuje, Twój wpis został dodany.','ok');
}
else
info('Wystąpiły problemy z zapisaniem pliku.');
include(
'lista.php');
return;
?>
to jest fragment zapisujący do pliku jeśli ktoś wie w czym rzecz proszę o informacje z wyjaśnieniem co gdzie i jak z góry dzięki Elvis
Od administratora:
Jak każdy wpis jest opatrzony tabelka, to nie dziwne, że plik tak rośnie...

czółwikij (83.30.255.xxx)
Środa, 13 września 2006 16:45:33
W jaki sposób ustawić wpisy zpliku baza.txt aby najnowsze bvyły wyświetlane na górze pliku podlgad.php?
Od administratora:
Przy zapisie w fopen przełącznik na r+

Dj_matthew (86.40.134.xxx)
Piątek, 06 października 2006 13:54:40
witam ja mam maly problem.chce z tego zrobic pozdrowienia kture mialy by sie wyswietlac na stronie
a problem jest taki ze to zapisuje do wielu liijek ja bym chcial zeby to zapisywalo do jednej i zeby sobie plynelo po stronie prosze o odp please
bo jestem zielony
Od administratora:
Przed zapisem trzeba pozbyć znaków końca linii "n" wtedy wszystko będzie w jednej linii.
http://www.kurshtml.boo.pl/html/animacja_marquee,multimedia.html

Michaaal (83.238.82.xxx)
Poniedziałek, 23 października 2006 10:17:48
Super opis ale mam jeden problem: Wszystko OK, php przechwytuje moje zmienne ale chcę, żeby przed automatycznie dodanymi wpisami było jeszcze pare tagów html. Chodzby np. Kodowanie i znacznik "<jazda>". A więc chodzi mi o to, zeby rewind() nie przewijał całkiem od porzdu ale np. tyo 40 znaku.. tzn. zaraz po znaczniku "<jazda>". Jak to zrobic?

Paluch (83.21.224.xxx)
Sobota, 04 listopada 2006 11:17:57
Napisales zeby mu nadac takie uprawnienia a jak dokladnie to zrobic ? :) byl bym bardzo wdzieczny
Od administratora:
Chmod

Tyran31 (85.128.86.xxx)
Środa, 06 grudnia 2006 22:49:36
A co zrobić żeby skrypt wysłany wcześniej w formularzu zapisywał się do pliku i działał?
Bo jak ja zapisuje to jest takie coś:
<IMG SCR="obrazek.gif"> i przez to "" skrypt nie chce działać. Co zrobić żeby nie tworzyło się automatycznie przy skrypcie "" ?
Od administratora:
Użyj przed zapisem do pliku stripslashes()

Tomasz89 (85.128.86.xxx)
Czwartek, 07 grudnia 2006 10:42:21
Widziałem powyżej komentarz w którym administrator wyjasnił jak wyswietlić tylko 10 pierwszych wpisów. Próbowalem wszystkich kombinacji i zawsze był jakiś błąd. A zatem jak ten kod zedytować:
<?
$dane
="$jakas_zmienna<br>";
$file="baza.txt";
$fp=fopen("$file", "r+");
$dane=$dane.fread($fp, filesize($file));
rewind($fp);
flock($fp, 2);
fwrite($fp, $dane);
flock($fp, 3);
fclose($fp);
?>
aby wyświetlały się w nim tylko 7 ostatnich wpisów?
Od administratora:
Akurat ten kod nie służy wyświetlaniu tylko zapisywaniu do pliku.
Aby wyświetlić 7 ostatnich wpisów należy umieścić ten kod w osobnym pliku:
<?php
$file
= file("baza.txt");

$end = 10; // ilosc rekordow

foreach(
$file as $value) {
    ++
$i;
    if(
$i <= $end) {
        
$exp = explode("`",$value);
        echo
$exp[0]."<br />".$exp[1]."<hr />";
    }
}

?>

Milosz (80.43.124.xxx)
Środa, 13 grudnia 2006 23:17:28
Czy ja dobrze myślę że jakby się uparł to zrobiłby z tego prosciutki CMS do newsow? Brakuje mi tylko jednej rzeczy:
1) Jak nadpisywać te dane (a nie dodawać).
albo lepiej
2) Jak wrzucic aktualną zawartość tekstu już do pola formularza jako wartość, tak żeby pojawił się w okienku i można go było zmodyfikować, usunąć, lub dopisać coś?

Potem bym sobie zawartość pliku include'ował automatycznie w odpowiednie miejsce na stronie i mam newsy! Mylę się?
Od administratora:
W fopen zamiast "a" daj "w".

Andrzej (10.17.229.xxx)
Piątek, 05 stycznia 2007 20:58:51
i gdy chce dodac komentarz niezapisuje sie do osobnego pliku , niewiem jakiej opcji / argumentu uzyc zeby tekst ktury pisze w polu tabeli zapisywal sie do pliku
Za pomoc slicznie dziekuje !! !
Od administratora:
Tekst pisze się raczej w jakimś formularzu, a nie w tabeli...

marko135 (83.18.242.xxx)
Środa, 21 lutego 2007 23:45:41
witam mam taki problem musze umiescic na stronie pole w ktorym uzytkownik wpisuje dane na temat specyfikacji komputera a potem te dane zostana wysłane na poczte www np onet
jak mam to zrobic?nie chce zeby to było w postaci formularza bo to nie ma byc zadna ankieta czy cos podobnego moj email to marko135@o2.pl
Od administratora:
Tu jest przykład

hanziri (83.23.51.xxx)
Poniedziałek, 26 lutego 2007 23:52:59
witam, było opisane jak usunąć znaki nowej linii '/n' a ja mam taki problem: jak wyszukać czy znak nowej lini nie występuje zaraz po sobie (ktoś na księdze gości wpisze same entery) lub nie występują prawie zaraz po sobie (czyli ktoś wpisze " x<enter>x<enter>x<enter>" lub "xy<enter>xy<enter>" itd.) Proszę o naprowadzenie na jakiś sposób. pozdrawiam
Od administratora:
W mojej księdze jest takie zabezpieczenie, zobacz jak to działa.

Jacek (uxxx)
Środa, 18 kwietnia 2007 14:58:11
Mam plik i z niego odczytuję dane. Ale chcę tylko część rekordów. To zrobiłem ale jak zrobić aby mi zliczało tylko te które mi się wyświetlają a nie wszystkie z tego pliku.
if (file_exists($plik))
{
$c = file($plik);
echo count($c);

Pobiera wszystkie dane i zlicza wynik ale ja chcę aby zliczył mi tylko te rekordy w których znajduje się powiedzmy wpis "jacek"
Od administratora:
W takim przypadku trzeba by to w jakiejś pętli zrobić i wykorzystać do zliczania inkrementację.

sasza (83.30.90.xxx)
Środa, 18 kwietnia 2007 18:42:37
wszystko ładine a ja mam pytanko a jak zrobić żeby do jednego pliku zapisać kilka pul formularza...??
Od administratora:
Wystarczy je rozdzielić jakimś separatorem.

pajdonet (83.23.130.xxx)
Niedziela, 03 czerwca 2007 17:46:37
Posiadam script w którym za pomocą formularza dodaje mi kolejne linie w pliku.txt ale na końcy
Zależy mi na tym aby dodawał na początku.
Przełącznik mam "a" lecz zmiana go na inny robi mi zamieszanie w pliku.txt.
Przełącznik "x" rownież nie daje efektu.
Możliwe że znacznik jest w złym miejscu. zmieniałem go na początek lini ale przy dodawaniu kolejnego recordu zmieniał mi istniejącą już linię.
prosże o pomoc.
Od administratora:
Proponuję dodawać jak dotychczas, ale przy wyświetlaniu zmień kolejność.

Tomek58 (80.244.146.xxx)
Czwartek, 09 sierpnia 2007 19:28:01
Wszystko pięknie ładnie :), ale co trzeba zrobić, aby na stronie wyświetliło liczbę dodanych wpisów? Każdy wpis jest w nowej linijce, więc potrzeba skrypciku, który liczy ilość linii w pliku, a następnie wyświetla tą ilość jako liczbę na stronie.
Od administratora:
Plik zamieniasz na tablicę file() a następnie pobierasz ilość wierszy przez count().

frastie (83.20.101.xxx)
Sobota, 18 sierpnia 2007 02:44:32
Skorzystałem ze skryptu, który dopisuje dane na początku pliku. Wszystko działa, poza jedną sytuacją: gdy plik txt do którego chcę zapisać jest pusty. Pojawia się wtedy komunikat: "Warning: fread() [function.fread]: Length parameter must be greater than 0 in". Co zrobić aby działało poprawnie?
Od administratora:
Trzeba by zrobić jakieś sprawdzenie.

Arthas (213.76.150.xxx)
Niedziela, 19 sierpnia 2007 12:29:43
Nie jestem zbyt obyty w programowaniu php więc dlatego mam taki banalny problem. Potrzebny mi jest taki tryb zapisu zmiennej do pliku tekstowego żeby przy zapisie nowej zmiennej stara się kasowała. Potrzebne mi to jest do wysyłania aktualnych komunikatów z formularza i dlatego chodzi o to żeby w pliku txt był zawsze tylko jeden nowy komunikat. Z góry dziękuje
Od administratora:
"w"

Ze względu na brak czasu na moderowanie komentarzy, zawieszam możliowść ich dodawania. Masz pytanie, wykorzystaj formularz "Zadaj pytanie".
Publikowane komentarze są prywatnymi opiniami użytkowników serwisu. Serwis nie ponosi odpowiedzialności za treść opinii.


Zadaj pytanie
Nie znalazłeś(aś) odpowiedzi na nurtujące Cię pytanie?
Zapytaj mnie, może będę umiał Ci pomóc.




Umieść u siebie...
Porady txt
RSS

Losowa książka

Reklama
Modna i seksowna bielizna damska, męska oraz stroje kąpielowe.

Kurs HTML

Setki porad dla właścicieli stron WWW

webmaster html css php mysql

Hosting & design





Copyright © 2001-2010 by Krzysztof Szypulski • Hosting: Snug.pl
Agroturystyka Koniowozy Portfolio Weimary - wyżeł weimarski Linki