Kom ihåg mig?
Home Menu

Menu


php require och sökvägsproblem

 
Ämnesverktyg Visningsalternativ
Oläst 2006-05-06, 00:13 #1
andla andla är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Nov 2004
Inlägg: 723
andla andla är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Nov 2004
Inlägg: 723
Måste vara min första post på den här forumavdelningen och det gäller en php fråga.
Frågan gäller relativa sökvägar i en katalog.

Jag har en hemkatalog och en underkatalog. Från hemkatalogen lägger jag till den här satsen.
<?php require("./LinkPageAuto/list.php"); ?>

I underkatalogen där list.php ligger så är skriptet definierat att ha en relativ sökväg och den borde strunta i var ifrån jag inkluderar filen.
Problemet är att den inte struntar i det så jag måste byta följande:
$fd = fopen ("list.txt", "r");
till
$fd = fopen ("./LinkPageAuto/list.txt", "r");

Hur kan man skriva så att skriptet tar hand om detta oavsett varifrån jag inkluderar filen?
andla är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-05-06, 00:24 #2
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
Citat:
Originally posted by andla@May 6 2006, 00:13

Måste vara min första post på den här forumavdelningen och det gäller en php fråga.
Frågan gäller relativa sökvägar i en katalog.
Jag har en hemkatalog och en underkatalog. Från hemkatalogen lägger jag till den här satsen.
?php require(./LinkPageAuto/list.php); ?
I underkatalogen där list.php ligger så är skriptet definierat att ha en relativ sökväg och den borde strunta i var ifrån jag inkluderar filen.
Problemet är att den inte struntar i det så jag måste byta följande:
fd = fopen (list.txt, r);
till
fd = fopen (./LinkPageAuto/list.txt, r);
Hur kan man skriva så att skriptet tar hand om detta oavsett varifrån jag inkluderar filen?
När du inkluderar en fil så befinner du dig fortfarande i den katalogen som den filen du inkluderar från finns i. Använd en absolut sökväg i fopen, t.ex. med $_SERVER['DOCUMENT_ROOT'].
__________________
Full-stack developer, free for smaller assignments
tartareandesire är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-05-06, 00:41 #3
andla andla är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Nov 2004
Inlägg: 723
andla andla är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Nov 2004
Inlägg: 723
echo $_SERVER['DOCUMENT_ROOT'];
blir bara '/'

Den verkar inte användas. Vilka andra metoder kan jag testa?
andla är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-05-06, 01:07 #4
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
Citat:
Originally posted by andla@May 6 2006, 00:41
echo _SERVER[DOCUMENT_ROOT];
blir bara /
Den verkar inte användas. Vilka andra metoder kan jag testa?
Testa $HTTP_SERVER_VARS istället för $_SERVER.
__________________
Full-stack developer, free for smaller assignments
tartareandesire är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-05-06, 12:38 #5
andla andla är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Nov 2004
Inlägg: 723
andla andla är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Nov 2004
Inlägg: 723
Blir samma sak..
andla är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-05-06, 12:50 #6
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
Kör phpinfo och se vad det står där.
__________________
Full-stack developer, free for smaller assignments
tartareandesire är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-05-06, 13:17 #7
Bamse Bamse är inte uppkopplad
Nykomling
 
Reg.datum: Aug 2003
Inlägg: 7
Bamse Bamse är inte uppkopplad
Nykomling
 
Reg.datum: Aug 2003
Inlägg: 7
Det här med sökvägar i PHP är en konst i sig att lära sig bemästra

Det hela utgår ifrån din cwd (current working directory). Kör du t.ex. index.php och sedan includear som du säger <?php require("./LinkPageAuto/list.php"); ?> så är din cwd /

När det gäller include() och require() söker de först efter filer i din include_path relativt din cwd (kolla vilken din include_path är med ini_get('include_path')). Sedan söker de efter filer i include_path relativt det script som körs (list.php i ditt fall).

Om du kör med ./ eller ../ för den delen kollar den bara relativt efter cwd.

resource fopen ( string filename, string mode [, bool use_include_path [, resource zcontext]] )

fopen() är dock en annan historia. Den kör inte som standard efter include_path alls (letar endast i cwd). Man kan specifiera parametern use_include_path till true så kör den efter include_path också, då kan du lägga till din katalog i include_path så har du löst problemet, det gör du med:

Kod:
$path = '/LinkPageAuto/';
set_include_path(get_include_path() . PATH_SEPARATOR . $path);
En annan lösning är att ge en absolut sökväg till filen i din fopen(). __FILE__ är en konstant som anger filnamnet för scriptet som körs, dirname() kan användas för att plocka ut katalogdelen för det. Då blir det:

Kod:
$fd = fopen (dirname(__FILE__) . "/list.txt", "r");
Hoppas detta rätar ut en del frågetecken!
Bamse är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-05-06, 13:36 #8
andla andla är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Nov 2004
Inlägg: 723
andla andla är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Nov 2004
Inlägg: 723
Provad detta och det fungerade fin fint
echo __FILE__ ;

Hoppas nu att detta funkar hos de flesta webbhotell som stödjer php. Funderar på att göra små skript i framtiden, skicka upp till några skriptsajter och se till att använda __FILE__ så att andra slipper detta krångel .
Kanske kan ge några nöjda besökare.
andla är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-05-06, 14:00 #9
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
Vet inte vad för webserver du använder? Uppenbarligen finns inte $_SERVER['DOCUMENT_ROOT'] på IIS, finns __FILE__ oavsett webserver?

Använder man en PHP-version som är äldre än PHP 4.0.2 så bör man hur som helst inte använda sig av __FILE__ då den ibland ger en relativ sökväg till filen.
__________________
Full-stack developer, free for smaller assignments
tartareandesire är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-05-06, 14:34 #10
andla andla är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Nov 2004
Inlägg: 723
andla andla är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Nov 2004
Inlägg: 723
Jobbig problem det här

Ännu jobbigare att få länkar att lira rätt med skriptet.
Har försökt att skriva här vad jag gör och raderat det för att det finns inget vettigt sätt att förklara problemet med text. *Svettas*
Gjorde en lösning hur som helst.
Grundtanken är att använda så lite kod som möjligt i huvudwebbsidan i rotkatalogen och sedan använda olika komponenter i underkataloger.
Om jag t.ex vill ha flera skriptade länklistor så kopierar jag en mapp och gör några små redigeringar i huvudwebbsidan. (med massa problem som följd )
andla är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 07:03.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017