Ahojky chtel bych se zeptat kdyz mam tento script:
(predpokladame, ze formular je na jine strance, ktera pro zpracovani otevre tento script na jine strance)
<?PHP
$fp = fopen ("neco.php", "a");
if ($ok)
fwrite ($fp, "$text");
else
echo "Text nebyl zapsan";
fclose ("neco.php");
?>
tak se mi $text vzdy zapise na konec souboru neco.php, ale jak provedu to aby se mi $text zapsalo treba na zacatek souboru nebo do prostred nebo proste kam budu chtit aniz by se mi obsah souboru vzdy vymazal jako je to treba u "w".... Sem skromny nemusim mit vsechno staci mi to jen na ten zacatek... :D ale za ostatni bych se taky nezlobil... :)
Načteš soubor do proměnné ( $file = file_get_contents() ), otevřeš soubor s parametrem "w", zapíšeš $text.$file, zavřeš soubor.
pochopil sem to spravne ?
<?
$file = file_get_contents("neco.php");
$fp = fopen($file);
if ($ok)
fwrite ($fp, "$text.$file");
fclose ("neco.php");
?>
Dekuji
<?
$path = "neco.php";
$file = file_get_contents($path);
$fp = fopen($path,w);
if ($ok)
fwrite ($fp, $text.$file);
fclose ($fp);
?>
<?
$file = '/dir/subdir/file';
$fgc = file_get_contents($file);
if($fp = fopen($file)) {
fwrite ($fp, "$text.$fgc");
fclose ($fp);
}
?>
asi bude o kousek lepčí :)
Edit:
$fgc = file_get_contents($file, 'w');
na nazev tematu fwrite lze odpovedet:
http://cz2.php.net/fwrite
to ostatni je dotaz na uplne jine tema:
"$text zapsalo treba na zacatek souboru"
tam bych odpovedel takto:
http://www.volny.cz/peter.mlich/programs/PPguest4.txt
tak po tvych radach sem sesmolil tento kod:
<?PHP
$pass = "";
$path = "aktu.php";
$file = file_get_contents($path);
$fp = fopen($path, "w)";
$today = date("d.m.y");
$text = "<p><b><li>$today</li></b>$news</p>";
if ($ok && $password == $pass)
fwrite ($fp, $text.$file);
fclose ($fp);
?>
a haze mi to tyto chyby:
Warning: file_get_contents(): open_basedir restriction in effect. File(/dir/aktu.php) is not within the allowed path. (from /3w/wz.cz/d/dynamonohejbal) in /3w/wz.cz/d/dynamonohejbal/addnew.php on line 65
Warning: file_get_contents(/dir/aktu.php): failed to open stream: Operation not permitted in /3w/wz.cz/d/dynamonohejbal/addnew.php on line 65
Lezeš s cestou někam, kde nemáš co dělat; přesněji do /dir/aktu
Tvůj kořenový adresář je /3w/wz.cz/d/dynamonohejbal/
A v kódu máš chybu: $fp = fopen($path, "w)"; => $fp = fopen($path, "w");
jo opravil sem to ale nefunguje to, tak jak bych chtel zapise se mi to do aktu.php nahoru ale pokazde mi to vymaze minuly obsah... coz ja nechci
papirek (dynamonohejbal.wz.cz)
Autor: peta (peter-mlich.wz.cz)
Datum: 05. 02. 2007 18:13
Ten guestbook funguje si myslim spolehlive a dela to presne, jak to chces. By sis to mohl aspon vyzkouset, kdyz uz se clovek namaha ti odepsat.
ja sem to zkousel a nejde to vzdy mi to vymaze obsah a zapise mi to jen to posledni...
mno, kdyby ses podival na ten zdrojak, tak zjistis, ze je treba otevrit sobor 2x a do noveho napsat novou zpravu a pridat obsah puvodniho souboru.
<HTML>jako flag pro zapis v fopen() pouzij "a" misto "w"</HTML>
papirek:
Pořád nechápu, co ti nefunguje:
1) načteš obsah souboru pomocí file_get_contents();
2) otevřeš soubor pro zápis, zkrátíš ho na délku 0bytů pomocí fopen();
3) do souboru zapíšeš data tak, jak potřebuješ
4) zavřeš soubor
Richard: klučina chtěl přidávat nová data na začátek souboru, takže mu flag "a" bude celkem k ničemu, protože bude muset soubor stejně zkracovat.
Tom (manual.wz.cz)
mno, ono jde presouvat ukazatal v souboru, takze je docela mozne, ze by se to dalo realizovat i pres "a"
Peta:nešlo, ten ukazatel je jenom pro čtení, při zápisu se data stejně vloží na konec.
<HTML>Aha, chapu, necetl jsem ze chce data na zacatek (jsem tu vyjimecne krizove na dialupu)
Postupu kdy se nacte soubor, smaze a cely zase ulozi bych se vyhnul.
Neni to nejlepsi reseni a navic je treba soubor zamykat.
Navrhuji reseni urcit si nejaky oddelovac, pomoci nej oddelit jednotlive polozky (napr. datum;autor;text) a kazdy zaznam ukladat na jeden radek.
Do souboru pote pridavej data s flagem "a" tedy vzdy nakonec a soubor cti pres funkci file() ... vysledek bude v poli ktery pak snadno prehodis funkci array_reverse() tak aby byli posledni zaznamy jako prvni.
Zkracovani to sice neresi, ale tam uz by byl treba flock.
Prace se souborem (za ucelem casteho nacitani/ukladani/mazani dat) neni spravne reseni. Od toho existuji jine ucelnejsi zpusoby (databaze)</HTML>
"funkci array_reverse()"
Ano, skvely reseni, davat to na konec, ale misto reverse bych volil jen vypisovaci script opacne. :)
Ale dobres to popsal, upravim si guestbook.
Richard (moderátor)
No jo, ale, co kdyz bude chtit obsah o maximalni velikosti 200 radku? V tom pripade mu append nepomuze.
$vzkaz = "Text který chceš vložit\n"; //text
$write = StripSlashes($vzkaz); //odstraníme escape sekvence
if (File_Exists ("aktu.php")): // popřípadě zadat cestu ./adresar/aktu.php
$fp = FOpen ("aktu.php", r);// popřípadě zadat cestu ./adresar/aktu.php
$data = FRead ($fp, 3000); //do proměnné data uložíme obsah souboru
FClose($fp);
endif;
$fp = FOpen ("aktu.php", "w"); //popřípadě zadat cestu ./adresar/aktu.php
FWrite ($fp, $write.$data);
FClose ($fp); //zavře soubor
<HTML>radek: tento postup neni bohuzel 100% uspesny i kdyz vypada jednoduse a funkcne. Je to postup pro jednoho klienta, ale neni vhodny pro pouziti na web serveru. Pokud bude cas podivam se po tride kterou jsem na to kdysi vytvoril, mela by mit vyresnou tuto problematiku</HTML>
Já vím, tahle metoda je zastaralá, ale pro začátečníky na ukázku stačí, pochybuji že by si papírek poradil s třídou, když má problém s FOpen().
Já osobně tohle vlákno považuji za vyřešené, protože postup popsaný výše (viz Tomík a já) je funkční. Pokud se jej papirek rozhodne použít, tak určitě bude fungovat. To, že je to třeba ošetřit, určitě pozná hned, jak se mu sejdou dva dotazy a soubor se mu vymaže. Ale ošetření je absolutně primitivní a pokud člověk zvládá alespoň základní práci se soubory v PHP a orientaci v manuálu, tak to s využitím jedné až dvou funkcí zvládne.
To, že existují lepší řešení (viz databáze) bych zatím vynechal, papirek je očividně začátečník, tak proč mu s tím plést hlavu?!
Richard: třídu? To mi připadá jako jít na komára s kanónem (nebo jak je to přísloví)
radek: otevírat jeden soubor dvakrát je krásný, hlavně když máme funkce jako file_get_contents(), file(), ... ;)