Autor | Zpráva | ||
---|---|---|---|
Hustik Profil * |
#1 · Zasláno: 25. 11. 2012, 15:53:46
Zdravím. Mám zápis do souboru a potřeboval bych aby se obsah celého souboru načetl do proměnné a při vložení nového příspěvku by se vložil nový příspěvěk a potom až obsah proměnné. Jak toho docílit?
Nějak si nemohu pomoct, ale nejde mi to $jmeno = $_POST['jmeno']; $email = $_POST['email']; $web = $_POST['web']; $zprava = $_POST['zprava']; $ip= Date("j/m/Y v H:i:s", Time()); $jmeno=HTMLSpecialChars($jmeno); //převede některé znaky na entity $email=HTMLSpecialChars($email); $web=HTMLSpecialChars($web); $zprava=HTMLSpecialChars($zprava); $jmeno=stripslashes($jmeno); //odstraní lomítka $email=stripslashes($email); $web=stripslashes($web); $zprava=stripslashes($zprava); $zprava = str_replace("\n"," <br /> ", $zprava); $zprava = substr($zprava, 0, 10000); $email_celek=" | <a href='mailto:$email'>$email</a>"; $web_celek=" | <a href='$web'>$web</a>"; $ip_celek=" $ip"; if ($web=="http://"){$web_celek="";} if ($email==""){$email_celek="";} if ($zprava!="" and $jmeno!=""){ $celek="<p>dfdfdlal <strong>$jmeno</strong>$email_celek $web_celek dddd $ip_celek</p><p>$zprava</p><hr>"; $soubor = fopen ('data.inc','a'); //otevře soubor pro doplňování fwrite ($soubor, $celek); //zapíąe zprávu fclose ($soubor); //zavře soubor $jmeno = ""; echo " <meta http-equiv='refresh' content='0;URL=/'>" ; } |
||
Alphard Profil |
#2 · Zasláno: 25. 11. 2012, 16:09:31
Můžete jednoduše použít file_get_contents() a file_put_contents(), ale bez ošetření paralelního přístupu je zde poměrně vysoké riziko ztráty dat.
|
||
Hustik Profil * |
#3 · Zasláno: 25. 11. 2012, 16:29:15
Můžete mi prosím mockrát upravený kód napsát? Díky mockrát
|
||
Joker Profil |
#4 · Zasláno: 25. 11. 2012, 16:32:17
Hustik:
Vzhledem ke způsobu uložení souborů na disku nelze data vložit jinam než na konec souboru. Vložení na začátek (nebo doprostřed) souboru se dělá tak, že se nejdřív celý ten soubor načte, pak se jeho původní obsah smaže a uloží se tak, jak má vypadat nově. Jak se to udělá konkrétně popisuje [#2] Alphard. Ještě jedna poznámka, nepoužívejte stripslashes. Ta lomítka způsobuje funkčnost zvaná magic_quotes_gpc, která je zastaralá a není k ničemu dobrá (jen dělá binec s těmi lomítky). Řešením je nechat na hostingu vypnout magic_quotes_gpc. Pokud to z nějakého důvodu nejde (kdyby to nešlo z důvodu, že hosting nechce, změnil bych hosting), stačí na začátek skriptu přidat tento univerzální kód na zrušení magic_quotes. |
||
Hustik Profil * |
#5 · Zasláno: 25. 11. 2012, 16:35:47
Upravené mi to háže chybu resoirce id#2 nebo #3
ještě jednou prosím o úpravu kódu Díky předem |
||
Joker Profil |
#6 · Zasláno: 25. 11. 2012, 16:54:43
Hustik:
„Upravené mi to háže chybu resoirce id#2 nebo #3“ To není chybová hláška, nejspíš přes echo vypisujete něco, co není řetězec, ale resource. Tipnul bych, že vypisujete výsledek fopen (v kódu výše tedy $soubor)? Kód viz Alphard: file_get_contents načte původní obsah souboru, pak z toho vyrobit nový (normálně spojováním) a pak file_put_contents to uloží. To nahradí řádky 29-31. A ještě další poznámky mimo: $zprava = str_replace("\n"," <br /> ", $zprava); echo " <meta http-equiv='refresh' content='0;URL=/'>" ; Lepší by bylo přesměrovat hlavičkou 301 (ale nesmí předtím být žádný výstup). |
||
Hustik Profil * |
#7 · Zasláno: 25. 11. 2012, 17:46:24
Vyřešeno
|
||
Časová prodleva: 11 let
|
0