Autor Zpráva
laik
Profil *
Vytvořil jsem si PHP skript, který vloží do stránky textové počítadlo. Počet přístupů se zapisuje do samostatného souboru, jehož obsah skript přečte a upraví pomocí funkce FOpen().
Na jednom serveru to funguje správně, na jiném to hlásí chybu při volání výše zmíněné funkce. Jelikož to hlásí "... Permission denied ...", předpokládám, že na tomto serveru funguje tzv. bezpečný režim.
Mohu zde funkci FOpen() použít nějakým speciálním způsobem? Nebo existuje nějaký jiný postup?
Hugo
Profil
A nestacilo by pouze zmenit atributy toho souboru na 0777 (pokud to server umoznuje)??
printf
Profil *
atributy souboru spíš 0666, resp. mělo by stačit 0664. 0777 jsou pokud vím adresáře
Hugo
Profil
Ne 0777 je rwx pro vsechny, 0666 je rw pro vsechny, coz by melo stacit. 0664 bude stacit pouze pokud bude user apache ve stejne skupine jako ty.
printf
Profil *
nojo, pravda adresar se nastavuje jinak
laik
Profil *
Obávám se, že vůbec nevím, o čem tu mluvíte. Kde ty atributy mohu přenastavit...?
Hugo
Profil
Podle toho jakeho ftp klienta pouzivas, ale vetsinou to je polozka atributy nebo opravneni (permission).
laik
Profil *
Používám Windows Commander. Nic takového tady nevidím...
Honza Hučín
Profil
Najeď ve Windows Commanderu na nějaký soubor při FTP připojení a dej z menu Files - Change Attributes. U každého souboru se dají nastavit práva pro čtení, zápis a spuštění, a to odděleně pro vlastníka souboru, skupinu a veřejnost.
laik
Profil *
Atributy souboru, se kterým PHP skript pracuje jsem změnil pomocí FTP klienta (WinCommander). Supr, takhle to funguje. Chtěl bych ale aby to šlo i PHP skriptem. Problém je navíc v tom, že chci povolit práva i pro nově vytvářený soubor. Tuším, že se to dělá pomocí funkcí UMask() a ChMod(), ale neznám podrobnosti. Tzn. kdy tyto funkce volat a s jakými parametry.... Můžete mi poradit, jak to zakomponovat do následujícího skriptu?

$filename = "./pocitadlo.txt"; //chci povolit práva pro tento soubor
if(File_Exists($filename)):
$fp = FOpen($filename, "r+");
if(!$fp) return;
$hits = FGetS($fp, 10) + 1;
Rewind($fp);
else:
$fp = FOpen($filename, "w");
if(!$fp) return;
$hits = 1;
endif;
Hugo
Profil
Ono se uplne staci podivat do manualu:

$filename = "./pocitadlo.txt"; //chci povolit práva pro tento soubor
if(File_Exists($filename)):
$fp = FOpen($filename, "r+");
if(!$fp) return;
$hits = FGetS($fp, 10) + 1;
Rewind($fp);
else:
$fp = FOpen($filename, "w");
Chmod ($filename, 0777);
if(!$fp) return;
$hits = 1;
endif;
laik
Profil *
Díky za radu, ale bohužel to nefunguje. Skript nevykoná funkci FOpen, aby vytvořil pomocný textový soubor. Nevím, jestli je to důležité, ale tento skript se snažím rozběhnout na pipni.cz (v jiných diskuzích jsem se setkal s negativními ohlasy na tento server). Vypisují se tyto hlášky:

Warning: fopen(./pocitadlo.txt) [function.fopen]: failed to open stream: Permission denied in /DISK3/WWW/............

Warning: chmod() [function.chmod]: Unable to access ./pocitadlo.txt in /DISK3/WWW/............

Warning: chmod() [function.chmod]: No such file or directory in /DISK3/WWW/............


Rada od administrátora pipni.cz zní takto:
"Spatne nastavena prava. Povolte pravo zapisu (a zkontrolujte cestu)."
Hugo
Profil
A zkousels rucne vytvorit soubor pocitado.txt a dat mu prava pro zapis.
krteczek
Profil
jo je tu problem v tom že na pipni je safe mod to znamena že pokud chceš aby ti tohle běhaalo budeš muset mit v sadresari ve kterm maš ten skript adresar s pravy zapisu, a v něm vytvaret ten soubor
takze nejak takhle:

$filename = "data/pocitadlo.txt"; //chci povolit práva pro tento soubor
if(File_Exists($filename)):
$fp = FOpen($filename, "r+");
if(!$fp) return;
$hits = FGetS($fp, 10) + 1;
Rewind($fp);
else:
$fp = FOpen($filename, "w");
Chmod ($filename, 0777);
if(!$fp) return;
$hits = 1;
endif;

stím, že adresáři data nastaviš chmod 0777 (myslim že by stačilo 0666)
krteczek
printf
Profil *
tak, ale jelikož 7čka znamená povoliení spouštění, reději bych nechal 0777, jinak to nepovolí otevření toho adresáře při FTP prohlížení
printf
Profil *
resp. povolení spouštění je ten nejnižší bit konkrétního atributu, takže každé liché číslo (1,3,5,7)
laik
Profil *
Díky. Už to funguje. Vytvořil jsem adresář "data", kterému jsem ručně nastavil přístupová práva pomocí ftp klienta.
Pořád ale ještě nevím, k čemu je přesně funkce UMask(). Znáte někdo adresu, kde by to bylo podrobně vysvětleno (pro ty méně chápavé) i s nějakým příkladem použití?
Hugo
Profil
http://www.google.com/search?q=php+umask&sourceid=opera&num=0&ie=utf-8 &oe=utf-8
Toto téma je uzamčeno. Odpověď nelze zaslat.