ďťż

[PHP] Edycja pliku w dowolnej linijce

       

Podstrony


telcocafe

Witam.
Tak jak mówi Wam temat - piszę skrypt (system newsów) ale na plikach jednorodnych (.txt). Proszę, żeby było bez komentarzy, że w MySQL można to napisać 50% szybciej i 99% łatwiej - wiem, ale serw mi nie pozwala na to :)
Więc do rzeczy.
Każdy komentarz to jeden wiersz w pliku zakończony znakiem nowej linii ("\n"). Zapisuje tak:
$do_zapisu = $zm1."\t".$zm2."\t".$zm3."\n"; fwrite($plik,$do_zapisu);
Jak widać oddzielam poszczególne sekcje znakiem tabulacji (małe prawdobodobieństwo, że ktoś to wstuka :P).
Odczyt bez problemów - explode z "\t" i działa :)
Problem pojawił się gdy chcę plik wyedytować, ale tylko jedną linijkę załóżmy 5 (plik ma więcej wierszy). Próbowałem tak:
if($q == 5) { $s = ''; $fn = 'kom.txt'; $l = file($fn); $do_zapisu = $_POST['ndata$q']."\t".$_POST['nautor$q' ]."\t".$_POST['nkom$q']."\n"; $l[$q] = $do_zapisu; for ($i=0; $i<count($l); $i++) $s .= $l[$i]; $h = fopen($fn, "w+"); fwrite($h, $s); fclose($h); }
Ten kod nic z plikiem nie robi :(
Zapewniam poprawnoś i zapełnienie zmiennych $_POST
Jakieś sugestie? ;)



Ad zapisywanie: serialize();
Ad modyfikacja jednej linijki:
$content = file('nazwa_pliku.txt'); $content[5] = serialize($_POST); $arr = ''; foreach ($content as $key=>$value) { $arr .= $value; } file_put_contents('nazwa_pliku.txt', $arr);
Ogólniej oprzyj się na serialize i pokombinuj sam :)


Ad zapisywanie: serialize();
Ad modyfikacja jednej linijki:
$content = file('nazwa_pliku.txt'); $content[5] = serialize($_POST); $arr = ''; foreach ($content as $key=>$value) { $arr .= $value; } file_put_contents('nazwa_pliku.txt', $arr);
Ogólniej oprzyj się na serialize i pokombinuj sam :)

Ale co ta funkcja właściwie robi - pierwszy raz się z taką spotkałem :P ?

-.-
To nie ma w sieci dostępnego manuala?
http://pl2.php.net/m...n.serialize.php



Po angielsku - dokładnie nie zrozumiem :)
Przekształca na binaria? :P

I przykłady bez file_put_contents bo serw też nie obsługuje ;) Może jeszcze jakieś pomysły?
Użytkownik p_p_c++ edytował ten post 26 marzec 2007, 16:44
function file_put_contents($a_filename, $a_content) { $file = fopen($a_filename, 'r'); fwrite($file, $a_content); fclose($file); }

Przydałoby się też dać blokowanie, ale mi się nie chce.

PS. Jeśli korzystasz z yoyo, to daj rozszerzenie *.php5, powinno działać file_put_contents().

//Szukać nie umiesz? Chyba drugi wynik w Google masz po polsku...
http://www.google.pl...e...&lr=lang_pl
Użytkownik pbnan edytował ten post 26 marzec 2007, 17:02
Sorki, że tak późno, ale dużo roboty mam :)
Niestety nie działa Twój kod pbnan. Wydaje mi się, że to się chrzani przez znaki "\n" i "\r". Kiedy funkcją file wczytam plik to każdy wiersz jest wczytany do elementów tablicy, ale czy z tymi znakami? Kombinuje, ale nie wychodzi. Jeśli ktoś chce to mogę kod wysłać na e-mail.


Sorki, że tak późno, ale dużo roboty mam :)
Niestety nie działa Twój kod pbnan. Wydaje mi się, że to się chrzani przez znaki "\n" i "\r". Kiedy funkcją file wczytam plik to każdy wiersz jest wczytany do elementów tablicy, ale czy z tymi znakami? Kombinuje, ale nie wychodzi. Jeśli ktoś chce to mogę kod wysłać na e-mail.

Tak, file() zwraca tablicę wraz ze znakami końca linii :)
$str = file('asd'); $str[3] = 'asddsaasd'."\n"; $content = ''; foreach($str as $key=>$value) { $content .= $value; } $file = fopen('asd', 'rw'); fwrite($file, $content); fclose($file);
Taki kod powinien dobrze działać i edytować odpowiednią linijkę...

Niestety nie działa! :(

Jeżeli chodzi o wywalenie "\r\n" to polecam trim() :)
Nie wiem dokładnie o co chodzi bo się pomieszałem... Twój kod nie jest pełny i niezbyt poprawny - chodzi mi o if($q == 5) bo to miał być przykład, a kod otwiera tylko 5 tablicę lub wartość...
Gdyby to był pełny kod to bym mógł wiedzieć o co chodzi...

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.