Autor Zpráva
bazz
Profil
Ahoj, hledám ale nenacházím.
potřeboval bych nějak číst txt řádek po řádku od konce, nebo klidně zapisovat do něj na první řádek a pok číst normálně.. mohl byjste mě někdo popostrčit...
juriad_
Profil *
To čtení je složité, protože napřed musíš najít předchozí odřádkování.

Zapisovat můžeš jen na konec (nebo nějakou část souboru přepsat). Pokud je opravdu potřeba něco zapsat na začátek, pak se celý soubor musí zapsat znovu.

Nesnažíš se vytvořit nějaký chat? Je totiž mnohem lepší použít na ukládání databázi než obyčejný soubor.
bazz
Profil
No ne chat ale chtěl jsem si dát na stránky komentáře které by se mi zobrazovaly od nejnovějšího vloženého... doufal jsem že existuje příkaz který umí číst řádek po řádku od spodu. ale jestli ne tak budu muset řešit databazi...
quatzael
Profil
bazz:
Tak to asi není vůbec problém, ne?
Při zápisu do souboru požívej mezi jednotlivými komentáři nějaký oddělovač.

Při čtení soubouru načti celý soubor jako string, pak ho rozkouskuj pomocí explode().
No a nakonec získané pole projeď například funkcí ksort() a budeš to mít seřazený od nejnovějšího.
juriad_
Profil *
quatzael:
Co když někdo vloží do své zprávy tvůj tajný oddělovač? Nebylo by lepší používat formát, který má podporu pro ukládání záznamů? Práce se soubory má obecně více problémů: operace se soubory nejsou atomické, takže můžeš dospět chybného stavu. Toto bude obzvláště problém, pokud se bazz bude snažit o nějakou redakci komentářů.

Nejlepším řešením je databáze, obzvláště pokud to vypadá, že bazz o ní už slyšel.
quatzael
Profil
juriad:
Co když někdo vloží do své zprávy tvůj tajný oddělovač?
To se dá jednoduše vyřešit vlastním escapováním..

Nejlepším řešením je databáze, obzvláště pokud to vypadá, že bazz o ní už slyšel.
Jasně že je. Ale záleží co opravdu bazz potřebuje. A když to za každou cenu potřebuje mít jako soubor, tak tady je prostě řešení.
Já bych tenhle problém samozřejmě řešil databází, ale vlákno je o tom jak číst txt soubor pozpátku, tak tady je prostě řešení.
bazz
Profil
juriad:
Slyšel ale nejsme moc dobří kamarádi.
Je to stránka malého divadelního souboru kde budou chodit dva lidi měsíčně a předpokládám starší takže si nemyslím že by mi to chtěl někdo hackovat :-D
Keeehi
Profil
quatzael:
To se dá jednoduše vyřešit vlastním escapováním..
Jistě že ano. Ovšem podporuje explode nějaké escapování? Nepodporuje. Takže z triviálního rozsekání se stane úloha napsání vlastního parseru. Pak už to ale může rovnou ukládat nějak strukturovaně a použít již existující postupy.

No a nakonec získané pole projeď například funkcí ksort() a budeš to mít seřazený od nejnovějšího.
To je trochu zbytečné, nemyslíš? for($i=count($lines)-1 ; $i>=0 ; $i--) číst od zadu zvládne taky a v paměti nemusí nic nikam přesouvat. Sice píše, že záznamů moc nebude ale stejně, proč řadit, když to není potřeba. A pokud by to bylo potřeba opravdu v paměti fyzicky otočit, pak vhodnější by byla funkce array_reverse.

bazz:
takže si nemyslím že by mi to chtěl někdo hackovat :-D
To, jestli se to bude snažit někdo hacknout vůbec nezáleží na tom, jakou máš návštěvnost. Přesněji se zvyšující se návštěvnosti roste i riziko útoku, ovšem malá návštěvnost neznamená že na tebe nikdo útočit nebude.
Alphard
Profil
Ta volba není jen mezi „velkou databází“ (která přinese zase jiné problémy) a souborem, kde se musí vše ošetřit ručně. Mezi nimi je ještě SQLite například, nebo najít nějakou jinou knihovnu, která tvoří vrstvu pro základní práci nad souborem.

Soubor, nebo (velká databáze) databáze?
- Je ta aplikace kritická? Je důležité nepřijít o data? Použijte databázi.
- Očekává se velký objem dat? Doporučuji databázi.
- Je už v projektu použitá databáze? Použijte ji i tady.

Potřebuji aspoň SQLite?
- Má tam být i nějaká administrace? Pokud ano, určitě nějakou databázi.
- Bude třeba nějak víc modifikovat výstupy? Doporučuji databázi.

- Pokud ne, půjde jen přidávat komentáře a případné mazání si budete řešit ručně, mohl by být soubor schůdný.

Já bych se rozhodoval asi takto, jestli už v projektu mám databázi, použil bych ji. Pokud ne, není funkčnost kritická, neočekává se velký objem dat a pokročilejší funkce, nasadil bych SQLite nebo soubor. Velkou databázi bych tam nezatahoval.

Jak to vytvořit ručně nad souborem?
1. Zapisovat určitě na konec souboru, vstup escapovat (v tomto specifickém případě ještě před uložením), převést PHP_EOL sekvence na <br> a se zamknutím souboru zapsat na konec.
2. Načíst pomocí file() a pak vypsat odzadu, jak uvedl Keeehi.
3. Občas ten soubor zálohovat.

S čím budou dost možná největší problémy?
Jestli si ty stránky oblíbí nějaký spamovací robot (a občas si oblíbí i malé weby), užijete si ještě dost zábavy.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: