Autor Zpráva
Warlord1
Profil *
Zdravím,
mám zvláštní problém.
Mám soubor 1a.txt ,ze kterého potřebuju číst text, popřípadě do něj zapsat text uplně nový. Kdesi na intervalu jsem si na to našel skript.
Na localhostu mi jede všechno v pohodě, tak jsem si to zkušebně hodil ke kámošovi na hosting. A tam to je nějaký špatný.

Při výpisu se mi soubor normálně načte a vypíše obsah (FOpen a FRead tedy pracuje)
Jdu tedy na zápis - přes textarea a submit přejdu k souboru zpracuj.php, ten má zhruba takovou konstrukci:

<?php
$fp = FOpen ("texty/1a.txt", "w"); // otevře soubor 1a.txt pro zápis
FWrite ($fp, $new); // uloží obsah proměnné $new do souboru 1a.txt
FClose ($fp); // zavře soubor 1a.txt
echo "Soubor byl změněn!";

include "navrat.html";
?>


Žádnou chybu to nevyhodí.
Hned se jdu podívat, zda byl soubor změněn - no a on byl. Jeho obsah byl smazaný a tak mi to vyhodí následující chybu (asi snad chápu správně, že FRead nedokáže přečíst prázdný soubor):

Warning: fread() [function.fread]: Length parameter must be greater than 0 in /home/content/s/k/y/skycave89/html/p/maya/admin/opena3.php on line 4

Tak a já bych od vás chtěl poradit, jaktože se do souboru nic nezapíše (na localu to funguje naprosto bezproblémově, úpravy v kódu jsem nedělal). Chmod je 777, tady stejně ale problém nebude, pže to by se text v souboru ani nesmazal, že?

Pak je tu další věc. Udělal jsem si menší zálohu, ze které jsem to chtěl v případě průšvihu zachránit, vypadá to nějak takhle (zaškrtávací políčko reset_check a tlačítko submit vede k tomuto skriptu) :

<?php
if ($reset_check == on) {
 $fp = FOpen ("texty/backup/1a.txt", "r"); // otevře soubor zálohu pro čtení
 $data = FRead ($fp, FileSize ("texty/backup/1a.txt")); // načte do proměnné $data obsah zálohy
 $fp = FOpen ("texty/1a.txt", "w"); // otevře soubor 1a.txt pro zápis
 FWrite ($fp, $data); // uloží obsah zálohy do souboru 1a.txt
 FClose ($fp); // zavře soubor data2.txt
 echo "Soubor byl přepsán na původní hodnotu!";
}
else echo "Akce nebyla provedena!";

include "navrat.html";
?>


Vrací i po zaškrtnutí checkboxu stále jen Akce nebyla provedena! Na localu opět zcela funkční...

Díky za každou radu a omlouvám se za obsáhlý post.
bukaj
Profil
Warlord1
FWrite ($fp, $new);
Tak mě napadá, není new náhodou nějaké z polí formuláře (<textarea name="new" ...>...</textarea> či podobně)? Je možné (a velice pravděpodobné), že kamarád bude mít na hostingu vypnuté register_globals, takže je potřeba používat náležité superglobální pole, viz FAQ.

omlouvám se za obsáhlý post.
Za tohle se rozhodně neomlouvej. Lepší chybu popsat důkladně a s kódy rovnou, než aby se tě pořád někdo musel vyptávat na různé detaily ;o)
Warlord1
Profil *
ÓÓÓÓÓÓÓÓ velice děkuji pán Velkomožný bukaj :D

Samozřejmě je to ono. Moje dnešní zkušenost s PHP byla první a ve skrytu duše jsem doufal, že to dnes taky dodělám. Všechno už funguje jak má. 12 hodin čistýho času - zatím se tím živit radši nebudu, nevidělal bych si ani na dva dni starej chleba.

Jen se zeptám - pro nějaké solidnější použití bych teď ten vstup měl asi ošetřit, že? Nějaké to převádění "nebezpečných" znaků přes htmlspecialchars? Popřípadě - mám důvod se bát, když tyto soubory budou schované ve složce zaheslované přes .htaccess a budu k nim přistupovat pouze já a kamarád? Pokoušel jsem se o takovou primitivní administraci (možná je to z toho příkladu trochu poznat). Jde o to, že když to osekám, nebudu moct používat HTML. Nebo mám osekat jen ty prvky, který nepoužiju při formátování textu? A to bych dal do kupy jak?

W.

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: