Prosím o váš názor. Co myslíte, že se serveru nelíbilo v tomto případě?
Dnes v 10:36 se objevilo toto chybové hlášení:
Warning: fopen(): open_basedir restriction in effect.File(/wz.cz/x/x-y/log/2006-09.txt) is not within the allowed path. (from /3w/wz.cz/x/x-y) in /3w/wz.cz/x/x-y/gch-log.php on line 20
Warning: fopen(/wz.cz/x/x-y/log/2006-09.txt): failed to open stream: Operation not permitted in /3w/wz.cz/x/x-y/gch-log.php on line 20
Nelze otevřít soubor /wz.cz/x/x-y/log/2006-09.txt k rozšiřování.
Kromě tohoto hlášení nebylo do stránky načteno menu, které je vkládáno pomocí include.Po stisku CtrlF5 se stránka načetla normálně.Tento skript už používám dlouhou dobu, jediné problémy jsem zaznamenal jednou mezi půlnocí a jednou hodinou, kdy nebyly zapsány prokazatelné přístupy, myslel jsem si, že na servru probíhá nějaká servisní činnost.
Přikládám skript, řádek 20, otevření souboru, je označen //řádek 20
<?php>
//nastavení času
$cas=strftime("%H:%M:%S");
$dtm=strftime("%Y-%m-%d");
//nastavení údajů o klientovi
$title=$_SERVER["HTTP_REFERER"];
$refer=$_SERVER["REQUEST_URI"];
$uri=$_SERVER["REMOTE_ADDR"];
$forw=$_SERVER["HTTP_X_FORWARDED_FOR"];
$prohl=$_SERVER["HTTP_USER_AGENT"];
$radek = "$dtm|$cas|$uri|$forw|$prohl|$title|$refer".chr(13).chr(10);
$soubor = "$DOCUMENT_ROOT".'/wz.cz/x/x-y/log/'.strftime("%Y-%m").'.txt';
//zápis do souboru
$k = fopen($soubor, 'a'); //řádek 20
if ($k == false) {
echo("<P>Nelze otevřít soubor $soubor k rozšiřování.<BR>");
}else{
if(flock($k, LOCK_EX)){
fputs($k,$radek,strlen($radek));
flock($k, LOCK_UN);
fclose($k);
}
}
?>
osobne nechapu, proc skladas promennou $soubor takhle. Kdyz pouzijes misto toho relativni cestu, melo by to fungovat.Mas prava pro zapis?zkus nastavit o+w...
No openbasedir vetsinou protestuje pri pokusu o pristup absolutne do korenove slozky webu nebo nekam jeste nize. Aspon tak mi to prijde, narazim na nej dost casto :P
Ale mimochodem, ja osobne bych doporucil, je-li to mozne, radeji logovat do sql nez do souboru. Melo by to byt setrnejsi k prostredkum serveru, asi se to lepe vyporada s vice pristupy ve stejny moment...
Díky za názory.
Když teď na to s odstupem koukám, tak z:
Nelze otevřít soubor /wz.cz/x/x-y/log/2006-09.txt k rozšiřování.
vyplývá, že chyba je způsobena tím, že v cestě chybí /3w a to v tomto případě znamená, že $DOCUMENT_ROOT je prázdné.Také vidím, že jsem zapomněl přepsat $DOCUMENT_ROOT do tvaru $_SERVER["DOCUMENT_ROOT"] jak jsem to udělal s ostatními proměnnými. Myslíte, že by varianta s $_SERVER... byla stabilnější?
Skript totiž fungoval dříve se zápisem typu $DOCUMENT_ROOT, tak nyní s $_SERVER... (tedy i včetně toho, že občas nefungoval, při testech fungoval vždy, zkušenosti z provovozu ukazují, že ne vždy). Jako příčina se mi tedy jeví dočasná nemožnost načíst obsah proměmné $DOCUMENT_ROOT.
Je jasné, že nic nebrání napsat tam to /3w natvrdo nebo použít relativní cestu, jen by mě zajímalo jako je to s výše zmíněnými proměnnými
Já si testuju $SERVER["SERVER_NAME"] (tuším, píšu z hlavy) a podle toho si definuju kořenovou složku ve switchi.
Doporucoval bych relativni cestu.
zalezi na tom, zda jsou register_globals = on nebo off. Ovsem imho se vyplati radsi pouzivat $_SERVER[...].