| Autor | Zpráva | ||
|---|---|---|---|
| Darker Profil |
#1 · Zasláno: 1. 11. 2010, 17:12:20
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 |
#2 · Zasláno: 1. 11. 2010, 17:31:08
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 |
#3 · Zasláno: 1. 11. 2010, 17:39:02
Řádek „2“ a „3“ byly jen zoufalé pokusy přijít na to, kde je chyba.
Funkce vrací vždy 0. |
||
| Tori Profil |
#4 · Zasláno: 1. 11. 2010, 17:42:17
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 |
#5 · Zasláno: 1. 11. 2010, 18:04:11
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 |
#6 · Zasláno: 1. 11. 2010, 18:08:59
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 |
#7 · Zasláno: 1. 11. 2010, 18:28:45
- 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. |
||
|
Časová prodleva: 16 let
|
|||
0