Lex 1 Share Posted June 24, 2005 Sziasztok! A probléma a következõ: A weboldalam /log könyvtárában van egy szöveg állomány és egy php progi, ami ebbe a szövegállományba naplóz. A php progit más könyvtárakból include()-olom és a benne lévõ naplozas() fv-t hívom meg. A progiból nem tudom hogyan kellene az fopen-hez a szövegállomány elérési utját megadni, hogy bárhonnan hívom meg, mindig megtalálja a log könyvtárbeli szöveg állományt. Ha a gyökérbõl hivatkozok (/log/allomany.txt), akkor nem mûködik. Ha pl. $_SERVER['DOCUMENT_ROOT'] . "log/allomany.txt" sem ad jó eredményt, bár a saját gépem szerverével mûködik. Az include-olt progi egy részlete: $allomany="/log/naplo.txt"; if (! file_exists($allomany) ) touch($allomany); $f=fopen($allomany,'a'); Link to comment Share on other sites More sharing options...
arpsoft 12 Share Posted June 24, 2005 Az include helyett használjál require-t. Link to comment Share on other sites More sharing options...
Lex 1 Author Share Posted June 24, 2005 Ha jól tudom, akkor az az include-tól annyiban különbözik, hogy ha nem találja az includolandó file-t, akkor nem figyelmeztet, hanem kiakad hibával. PHP Kézikönyv Require() Vagy nem jól tudom? PS: Nem az include-dal van bajom, hanem az fopen-nel! Nem ezt értetted félre? Kicsit átfogalmaztam a témaindítót, hogy érthetõbb legyen. Link to comment Share on other sites More sharing options...
arpsoft 12 Share Posted June 24, 2005 Nem egészen ez a különbség. Az include megkeresi a fájlodat és lefuttatja, míg a require úgy dolgozik, mintha ott lenne a kódban az importált függvény. Link to comment Share on other sites More sharing options...
Lex 1 Author Share Posted June 24, 2005 Ezzel nincs is semmi bajom, csak pl. a /munka1 könyvtárban lévõ prog1.php állományba beinkludolom a /log/naplozas.php állományt, de ez ugyebár a /munka1 könyvtárban fut. Majd pl. a /munka2 könyvtárban lévõ prog2.php állományba is inkludolom a /log/naplozas.php állományt, de ez ugyebár a /munka2 könyvtárban fut. A naplozas.php állomány mindig más könyvtárban fut, ezért a benne lévõ fopennek nem tudom hogy adjam meg a /log/naplo.txt file elérési útját. Ezt a hibaüzit adja: Warning: fopen(): open_basedir restriction in effect. File(/log/belepes.txt) is not within the allowed path(s): (.:/disk/raid2/l/o/logex) in /disk/raid2/l/o/logex/log/naplozas.php on line 20 Warning: fopen(/log/belepes.txt): failed to open stream: Operation not permitted in /disk/raid2/l/o/logex/log/naplozas.php on line 20 Link to comment Share on other sites More sharing options...
arpsoft 12 Share Posted June 24, 2005 Na ez a require elõnye. Az ott fut, ahol a require van. Link to comment Share on other sites More sharing options...
Lex 1 Author Share Posted June 24, 2005 Az include is a hívó progi könyvtárában fut. Kipróbáltam require-vel. Ezt köpte rá: Warning: fopen(belepes.txt): failed to open stream: Permission denied in /disk/raid2/l/o/logex/log/naplozas.php on line 20 Ez azért van, mert a fõkönyvtáram index.php-jába includoltam és oda nincs írási joga. De nem is kell, mert a log könyvtárba kéne írnia. Hagyjuk a require-t és az include-ot. Nem az a hiba. Az fopen-nél hogyan tudok a gyökértõl hivatkozni egy állományra? Link to comment Share on other sites More sharing options...
arpsoft 12 Share Posted June 24, 2005 Van egy ilyen lehetõség: fopen("valami.txt","a+",1) Ilyenkor a php.ini-ben beállított útvonalon keres. De megadhatod neki a teljes elérési utat, pl fopen("http://akarhol/akarmi.txt","a+") Link to comment Share on other sites More sharing options...
Lex 1 Author Share Posted June 24, 2005 A Freeweben nem hiszem, hogy beletúrhatnék a php.ini-be! A teljes elérési út esetén (http://logex.fw.hu/log/naplo.txt) ezt kapom: Warning: fopen(): URL file-access is disabled in the server configuration Légyszíves ne használj piros színt a hozzászólásodban és ne idézd be az elõtted íródott hozzászólást! <PF> Ha nem szabad idézni, akkor minek hozza be - ha kérem, ha nem - ez a frankó IPB? Link to comment Share on other sites More sharing options...
arpsoft 12 Share Posted June 25, 2005 Azért, mert válaszolsz. A hozzászólásod alatt ott van az idézet egy másik szövegablakban. Ha a "Szólj hozzá"-ra kattintasz, akkor nem idéz. Link to comment Share on other sites More sharing options...
Lex 1 Author Share Posted June 25, 2005 @arpsoft: OK. Jobb megoldás hiányában egyenlõre az alábbi megoldást alkalmaztam a gyökérkönyvtár megállapítására: $root=substr($_SERVER['SCRIPT_FILENAME'] , 0, strpos($_SERVER['SCRIPT_FILENAME'], $_SERVER['SCRIPT_NAME'])); if (isset($_SERVER['HTTP_X_FW_USERNAME'])) $root=$root . '/' . $_SERVER['HTTP_X_FW_USERNAME']; $root=$root . '/'; Ez mûködik localhost-on és a szerveren is. Tud valaki egyszerûbbet? Link to comment Share on other sites More sharing options...
ocsi 0 Share Posted June 26, 2005 Lehet hogy én olvastam pontatlanul, de miért akarsz minden áron relatív hivatkozást?? Nem ûködik az hogy thotbalasz.fw.hu/log/naplozas/naplo.txt ???( vagy lehet h a freeweb is csinál egy kanyart az abszolút hivatkozásokban mint az srv...) Link to comment Share on other sites More sharing options...
arpsoft 12 Share Posted June 27, 2005 Ezért nem tudja: A teljes elérési út esetén (http://logex.fw.hu/log/naplo.txt) ezt kapom: Warning: fopen(): URL file-access is disabled in the server configuration Link to comment Share on other sites More sharing options...
Lex 1 Author Share Posted June 27, 2005 A Prog.hu-n (ha szabad itt ilyet mondani? ) egy kicsit egszerûbb választ már kaptam. A dirname(__FILE__) megadja a beinclude-olt állomány eredeti könyvtárát, tehát ez állandó, függetlenül attól, hogy honnan includolom. De ez még mindig nem a gyökér. Tudom, tudom, hogy ebbõl kiszedhetõ, de valahogy nem tudom elképzelni, hogy nincs egy normális, "hivatalos" módszer erre. Közben még az jutott eszembe, hogy a Linuxban, ~ jellel jelölik a felhasználó home könyvtárát. Kipróbáltam, de sajnos nem mûködik ezzel sem. Link to comment Share on other sites More sharing options...
arpsoft 12 Share Posted June 27, 2005 Létezik ez a változód? $REDIRECT_HOMEDIR vagy _SERVER["REDIRECT_HOMEDIR"] Link to comment Share on other sites More sharing options...
Lex 1 Author Share Posted June 27, 2005 Nem. A $_SERVER-t teljesen átnéztem: PATH_TRANSLATED=SCRIPT_FILENAME= a teljes elérési út a szerver gyökerétõl. SCRIPT_NAME=REQUEST_URI=PHP_SELF= elérési út a user könyvtárral. Van még a DOCUMENT_ROOT, de az /home/freeweb/, ami nem jó. A többi más jellegû. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now