Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] zapisywanie do pliku txt
Forum PHP.pl > Forum > Przedszkole
warkakw
witam
napisałem skrypt php i ma on za zadanie dopisywac kolejne linijki tekstu do
pliku *.txt. problem w tym że nie wiem co zrobic aby skrypt pisał od nowej linijki a nie na koncu ostatniej.
oto kod:
{
$top=fopen("top_download.txt", "a+t");
$do_zapisu="\\r\\n"."$_GET[fileid];42;$opis";
fwrite($top,$do_zapisu);
fclose($top);
}
ponoć \r\n ma powodować przejście do nowej linijki w pliku txt ale tak sie nie dzieje. Jest ono dopisywane jak zwykły tekst: blabla\r\nblabla
co zrobic aby pisało od nowej linijki?questionmark.gif
dziękuje za pomoc
Kamil
nospor
nie
  1. <?php
  2. $do_zapisu="rn";
  3. ?>

a:
  1. <?php
  2. $do_zapisu="rn";
  3. ?>


I prosze uzywac bbcode.

ps: przenosze
warkakw
thx

działa!
jacus
Witam

Wybacz, że się dokleję ale mam podobny problem a rozwiazanie coś mi nie idzie.
Otóż mam problem z zapisywaniem do plików na stronie
Kod
http://www.laizsme.edu.pl/~jacus/formularz/zapis.php


potrzebuje żeby zapisywało za każdym razem do następnego wiersza a nie kasowało mi pierwszego wiersza i zapisywało na nowo.

kod pliku zapis2.php
Kod
<?php
  $a = 'login.txt';
  $b = $_POST[login];

  if (is_writable($a)) {
  

     if (!$a = fopen($a, 'w+')) {
           echo "Nie mogę otworzyć pliku ($a)";
           exit;
     }
  

     if (fwrite($a, $b) === FALSE) {
         echo "Nie mogę zapisać do pliku ($a)";
         exit;
     }
  
     echo "Sukces, zapisano login do pliku ($a)";
  
     fclose($a);
  
  } else {
     echo "Plik $a nie jest zapisywalny";
  }

  $c = 'haslo.txt';
  $d = $_POST[haslo];
  
  if (is_writable($c)) {
  

     if (!$c = fopen($c, 'w+')) {
           echo "Nie mogę otworzyć pliku ($c)";
           exit;
     }
  

     if (fwrite($c, $d) === FALSE) {
         echo "Nie mogę zapisać do pliku ($c)";
         exit;
     }
  
     echo "Sukces, zapisano haslo do pliku ($c)";
  
     fclose($c);
  
  } else {
     echo "Plik $c nie jest zapisywalny";
  }
  ?>


login ma zapisywać do pliku login.txt a hasło do haslo.txt.
nospor
w kodzie masz tak: fopen($c, 'w+')
a teraz zajrzyj do manuala
http://pl.php.net/manual/pl/function.fopen.php
i przeczytaj sobie co robi w+. a potem doczytaj co powinno byc, by nie obcinalo a dodawalo

ps: i uzywaj wlasciwego bbcode!!!
jacus
a,w,r,x - nic nie działa tak jak ja chce.
możesz rozwinąc?:
"ps: i uzywaj wlasciwego bbcode!!!"
nospor
Cytat
a,w,r,x - nic nie działa tak jak ja chce.
nie moze byc. a mi sie wydaje ze wlasnie "a" dopisuje na koniec pliku:
Cytat
umieszcza wskaźnik pliku na jego końcu

Pewnie cos źle robisz. pokaz kod po poprawkach tym w razem w dobrym bbcode

Cytat
możesz rozwinąc?:
"ps: i uzywaj wlasciwego bbcode!!!"
ty uzywasz bbcode code do osadzenia kodu php. Do takiego kodu uzywa sie bbcode php
jacus
tak, masz racje, a osadza na końcu pliku tyle, że w tym samym wierszu a nie w następnym.

a możesz mi wyjaśnić jak się zmienia na bbcode php naczym to polega, i czym się różni od bbcode code bo nie mam pojęcia i na wikipedi też nie znalazłem.
nospor
Cytat
tak, masz racje, a osadza na końcu pliku tyle, że w tym samym wierszu a nie w następnym.
ba... podpiales sie do cudzego topicu argumentujac iz jest bardzo podobny do twojego problemu. Problemem w tym topicu byl brak nowych linii w pliku, ale problem ten zostal rozwiązany. aty sie podpinasz i nawet nie przeczytales dwoch postow w tym topicu, ktore mowią co i jak. Mamy sie pogniewac?
NIgdzie w Twoim kodzie nie widze \r\n. co to \r\n? to juz doczytaj w tym topicu.

Cytat
a możesz mi wyjaśnić jak się zmienia na bbcode php naczym to polega, i czym się różni od bbcode code bo nie mam pojęcia i na wikipedi też nie znalazłem.

to jest kod php wstawiony w bbcode php:
  1. <?php
  2. $zmienna = 'ala';
  3. //jakis inny kod
  4. ?>

Wiecej info tu:
Temat: Tematyka i zasady panujace na forum Przedszkole
oraz chyba w regulaminie smile.gif
jacus
a nie podobny mam problem ?
wszystkie posty przeczytałem i sporo innych tematów.
tyle, że nie wiem jak mam użyć tego \r\n
i gdzie to dopisać mad.gif

Kod
<?php
  $a = 'login.txt';
  $b = $_POST[login];
  $fwrite = "\r\n";

// $_POST[s].$_POST[s2].".php";
//."<br>"
  if (is_writable($a)) {
  

     if (!$a = fopen($a, 'a+t')) {
           echo "Nie mogę otworzyć pliku ($a)";
           exit;
     }
  

     if (fwrite($a, $b) === FALSE) {
         echo "Nie mogę zapisać do pliku ($a)";
         exit;
     }
  
     echo "Sukces, zapisano login do pliku ($a)";
  
     fclose($a);
  
  } else {
     echo "Plik $a nie jest zapisywalny";
  }

  $c = 'haslo.txt';
  $d = $_POST[haslo];
  
  if (is_writable($c)) {
  

     if (!$c = fopen($c, 'w+')) {
           echo "Nie mogę otworzyć pliku ($c)";
           exit;
     }
  

     if (fwrite($c, $d) === FALSE) {
         echo "Nie mogę zapisać do pliku ($c)";
         exit;
     }
  
     echo "Sukces, zapisano haslo do pliku ($c)";
  
     fclose($c);
  
  } else {
     echo "Plik $c nie jest zapisywalny";
  }
  ?>
nospor
Cytat
a nie podobny mam problem ?
podpbny, tylko ze ty wogole z tego topicu nie wziales nic, co do tyczy problemu
Przeciez masz pokazane, ze koles \r\n dodaje do tekstu ktory ma wpisac do pliku. \r\n oznacz koniec lini. jak chcesz miec po loginie koniec linii to musisz go tam wstawic
I wyraźnie mowie uzywaj bbcode php a nie codeexclamation.gif!
  1. <?php
  2. //....
  3. $b = $_POST[login]."rn";
  4. //.....
  5. ?>

Widzisz roznice w wygladzie kodu? Twoj to code moj to php.
jacus
Załapałem co z tym \r\n.
Do czego jest samo \r i samo \n? bo probowalem z \n i nie dzialalo mi z braku a+t
Jedyną rożnicę jaką widzę to zmiana = na - .
Ale jeszcze nie mogę znaleźć na tej stronce:
Kod
http://pl.php.net/manual/pl/function.fopen.php

co oznacza a+t ?
nospor
Cytat
Ale jeszcze nie mogę znaleźć
hmmm.... w takiej bajce jak "Mulan" (nie wiem czy ogladales) byl tekst: "Co ty, po chinsku nie kumasz?"
To ja mam ci napisac: "Co ty, po polsku nie kumasz?" tongue.gif
Przeciez tam masz po polsku napisane:
Cytat
Notatka: Różne rodziny systemów operacyjnych stosuja rózne konwencje końca lini. Kiedy zapisujesz plik tekstowy i chcesz wstawić łamanie lini, musisz użyć poprawnych dla twojego systemu operacyjnego znak(ów) końca lini. Systemy bazujące na Uniksie używają \n jako znaku końca lini, systemy bazujące na Windowsie używają \r\n jako znaków końca lini, a systemy Macintosh używają \r jako znak końca lini.

Jeśli użyjesz nieprawidłowego końca lini do zapisu pliku, możesz zaobserwować, w innych aplikacjach otwierając ten plik, że "wygląda on zabawnie".

Windows oferuje flagę ('t') konwertującą tryb tekstowy, która przezroczyście przekłada \n na \r\n kiedy pracujesz z plikiem. Dla kontrastu, możesz także uzyć 'b' aby wymusić tryb binarny, wtedy nie będzie konwertować twoich danych. Aby użyć tych flag, wstaw 'b' lub 't' jako ostatni znak w parametrze tryb.

Domyślnie tryb konwersji zależy od SAPI i wersji php jakiej używasz, więc namawiamy aby zawsze podawać stosowną flage w celu przenośności. Powinieneś użyć trybu 't' jeśli pracujesz ze zwykłymi plikami tekstowymi (plain-text)i używasz \n do ograniczenia konców lini w twoim skrypcie, ale wymagasz aby twój plik był czytelny w aplikacjach takich jak notatnik. Powinieneś uzyć 'b' w każdym innym przypadku.

Jeśli nie podasz flagi 'b' kiedy pracujesz na binarnych plikach, możesz doświadczyć dziwnych problemów z twoimi danymi, włączając uszkodzone pliki graficzne i dziwne problemy ze znakami \r\n.

Notatka: Dla przenośności, bardzo zalecane jest użycie zawsze flagi 'b' kiedy otwierasz pliki za pomocą fopen().

Notatka: Ponownie, dla przenośności, jest również bardzo zalecane abyś, przepisał swój kod, który używa lub polega na trybie 't' tak aby używał poprawnego końca lini oraz trybu 'b'.

Ladnie, prosto i po polsku

ps: ta tytułowa "Mulan" była Chinką
jacus
LOL nie oglądam bajek bo nie mam czasu.
A tego nie czytałem...
Wielkie dzięki za pomoc.
Mam jeszcze takie pytanie, w tym momencie zapisuje w kolejnych wierszach tzn 1,2,3,4 itd
a co i gdzie trzeba dopisać żeby zapisywało nowe wpisy w pierwszym wierszu tak żeby najstarszy wpis był na samym dole, przeciwnie do tego co jest teraz?
nospor
Cytat
a co i gdzie trzeba dopisać żeby zapisywało nowe wpisy w pierwszym wierszu tak żeby najstarszy wpis był na samym dole, przeciwnie do tego co jest teraz?
To juz nie jest takie proste.... ale trudne tez nie.
1) Pobierasz zawartosc pliku do zmiennej (file_get_contents).
2) Dopisujesz do początku zmiennej nowa wartosc (zwykle lączenie stringow),
3) zapisujesz zmienna do tego pliku (file_put_contents) (jak nie masz php5 to poszukaj w manualu odpowiednikow dla php4: http://pl.php.net/manual/pl/function.file-put-contents.php)
jacus
Faktycznie banalne to nie jest, niestety.
Może mi nie będzie potrzebne.
Jeszcze raz dzięki, pozdro
rozny
A te zapisywanie na poczatku pliku do czegos konkretnie ci jest potrzebne? jesli tylko po to, zeby najstarsze wpisy wyswietlac na samym dole strony, to wystarczy zastosowac array_reverse(); aby wyswietlic wpisy z konca pliku wyzyej niz te z poczatku smile.gif
jacus
Mnie to jest obecnie do niczego nie potrzebne ale potrzebuje żeby tak było, najnowszy wpis na samej górze w pliku txt.
Jak się posłużyć tym array_reverse()? jak to zastosować? tylko krok po kroku proszę smile.gif
lopik
Nie czytałem od początku tematu winksmiley.jpg, ale jak zapisujesz dane na końcu pliku to żeby ostatni wpis był pierwszym, to trzeba zrobić na przykład tak:

  1. <?php
  2. // tutaj czytasz plik z danymi do tablicy (jesli go jeszcze nie przeczytales za pomoca owej funkcji)
  3. $tablica = file($plik);
  4.  
  5. // i teraz odwracasz tablice do gory danymi ;)
  6. $odwroconaTablica = array_reverse($tablica, true)
  7. ?>


array_reverse
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.