ďťż
Podstrony
|
telcocafeWitam.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... |
|||
Sitedesign by AltusUmbrae. |