Autor Zpráva
Hanz56
Profil *
Zdravim, potreboval bych mensi pomoc, mam tento script:

 if($this->cache) { // ulozit cache
      $abc = fopen($this->cacheFile, "a+");    
      if ($abc) {
       fwrite($abc, $buffer);
       fwrite($abc, 'ahoj'); // tento radek potrebuju zapsat do souboru na urceny radek
       fclose($abc);
      }  


Potreboval bych nejak upravit script aby se text "ahoj" zapsal na urceny radek do textaku. Takto to funguje tak ze se text "ahoj" napise uplne na posledni radek do textaku. Proste bych potreboval upravit tento script ve smyslu: "zapis text "ahoj" na radek cislo 5 a pritom NENAHRAD text ktery byl na tom samem radku doposud, jen to cele posun o ten jeden pridany radek".

Diky moc za odpoved

Moderátor Alphard: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
lingvik
Profil
Hanz56:
Myslím, že budeš muset nejdřív celý soubor přečíst a potom znovu od začátku zapsat. Nejdřív prvních n-1 řádků, potom nový řádek a nakonec zbytek souboru.
AM_
Profil
teoreticky by stačilo přečíst jen data za přidávaným řádkem, soubor oříznout [url=php.net/ftruncate]ftruncate()[/url], přidat na konec nový řádek a pak přečtená data. Pokud budeš přidávat předposlední řádek do 100MB souboru, tak už rozdíl mezi mým a lingvikovým řešením poznáš :)
Hanz56
Profil *
Jo to je pravda, asi jine reseni nebude. Nevim ale jak to zapsat, v php sem lama:) Jestli bude nejaky php guru tak hodny a napise to?:) Me by to zabralo nejmin tyden nez bych nato prisel jak to napsat:)

Diky
Hanz56
Profil *
..ne ten soubor je malinkaty, jen par kb
AM_
Profil
jen se snaž ;) když to budem dělat za tebe, tak se nic nenaučíš.
budiž ti http://php.net průvodcem

Hanz56:
ne ten soubor je malinkaty, jen par kb
no ale stejně je čistější a jednodušší mé řešení, tak to není důvod dělat složitě a neefektivně:)
lingvik
Profil
AM:
Funkci ftruncate jsem neznal a je fakt, že ořezání je efektivnější. Problém je jenom v tom, že velikost kusu k ořezání je v bytech a ne v řádcích. Proto bych se do toho v žádném případě nepouštěl u maličkých souborů a začátečníkovi bych tu funkci nedoporučil za žádných okolností. Počítání bytů tak, aby to bylo "tak akorát", by se mohlo zvrhnout v pěkný opruz.
AM_
Profil
lingvik:
nojo, to máš pravdu, nějak jsem se moc nezamýšlel nad konkrétní realizací toho ořezání... není to nic nemožného, ale pro začátečníka nic moc no..
Hanz56
Profil *
poresil sem to unkci string replace

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: