Autor Zpráva
Darker
Profil
Potřebuji dodávat obsah jinam, než na konec souboru, aspoň tedy za urtčitých podmínek.
Zde je kód, který to má provést:
  $pozice=strrpos($text,"HLEDANY TEXT");
  $pozice=(string)$pozice;
  rewind($soubor);
  fseek($soubor,$pozice);
  fwrite($soubor, $text);

Jak vidno, snažím se něco dopsat před hledaný objekt, konkrétně před konec HTML tagu. Ale nefunguje to, skript data systematicky zapisuje na konec souboru. Mám ověřené, že proměnná $pozice je korektní, a odpovídá skutečnosti.
Děkuji za pomoc
AM_
Profil
máš to nějaké zmatené:
a) nevidím, jakým příkazem otevíráš soubor. fopen($soubor, 'r+') ?
b) k čemu je to přetypování na řádku 2? (chybu to zřejmě nezpůsobí, jen je to tam zbytečné nebo spíš hloupé)
c) proč na řádku 3 spouštíš rewind, když na dalším řádku spouštíš seek?

co vrátí funkce fseek? 0 nebo -1 (viz manuál)?
Darker
Profil
Řádek „2“ a „3“ byly jen zoufalé pokusy přijít na to, kde je chyba.
Funkce vrací vždy 0.
Tori
Profil
Pokud se nepletu, tak doprostřed souboru není možné něco "dopsat" - jedině se vám přepíše část původního obsahu od zadané pozice. Použila bych:
$soubor = 'neco.html';
$hledej = "HLEDANY TEXT";
$tmp = file_get_contents($soubor);
$tmp = substr($tmp, 0, strpos($tmp,$hledej)) . $text . substr($tmp, strpos($tmp,$hledej));
file_put_contents($soubor,$tmp);
Darker
Profil
Bál jsem se, že tahle metoda je pomalejší, proto jsem chtěl použít fwrite.
Ale uvědomuju si teď, že máš vlastně pravdu, tak by to stejně nešlo. děkuju.
Darker
Tori
Profil
Darker:
no, je to jen použitelné řešení, nemám dost znalostí, abych přišla s optimálním / s jistotou nejrychlejším.
AM_
Profil
- doprostřed souboru zapsat lze, ale přepíše to obsah odpovídající délky, např. na třetí pozici do tohoto souboru dopíšeme "ahoj"
123456789
a výsledek bude:
12ahoj789
otázka je, jestli toto je požadované chování.

- to stejně nevysvětluje, proč ti to zapisovalo nakonec, uvedený kód by měl opravdu zapsat na danou pozici (ledaže nahrazovaný text byl dlouhý a přemazal tedy celý zbytek souboru)

- principielně nejrychlejší je uříznout ze souboru část ZA požadovanou pozicí (a zapamatovat si jí), pak nakonec přilepit nahrazený text a zpět původní konec souboru, na mém příkladu:
- zapamatovat si 3456789, zkrátit soubor na délku 2
- připojit nakonec "ahoj"
- připojit nakonec 3456789

je na tvém vlastním uvážení, jestli má smysl se psát s touto variantou nebo použít "jednodušší" s přepsáním celého souboru, pokud ale operuješ v řádu kliobytů, asi to nemá cenu nějak dramatizovat.

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:

0