Autor Zpráva
Hustik
Profil *
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
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 *
Můžete mi prosím mockrát upravený kód napsát? Díky mockrát
Joker
Profil
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 *
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
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);
Lepší bude nl2br.

echo "  <meta http-equiv='refresh' content='0;URL=/'>"    ;
Tohle má předpokládám zařídit přesměrování na hlavní stránku.
Lepší by bylo přesměrovat hlavičkou 301 (ale nesmí předtím být žádný výstup).
Hustik
Profil *
Vyřešeno

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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