silfverMedlem sedan apr. 200312 679 inlägg Hejsan
Varför kan man skriva t.ex.
<link rel="stylesheet" href="/css/index.css" type="text/css">
Men inte
require "/includes/top.php";
Det jag syftar på är sökvägen. När man skriver /css/ så går den ju till roten och letar efter css-mappen. Men varför kan man inte göra samma sak när det gäller php? Funkar det inte för att den går för långt bak i kataloghanteringen? Hade vart smidigt att använda sig av /mapp/fil.php i stället för att behöva skriva ../mapp/fil.php och ännu jobbigare om den ligger djupt: ../../mapp/fil.php
Finns det någon lösning?
Mvh
silfver
PeeerMedlem sedan mars 20025 907 inlägg Det gör det väl visst?
Frågan är vad det är som du räknar som root? På en windowsburk är "/" ex. C: eller D: och på en *nix-burk så är / just / (dvs inte /usr/silfver/public_html)
SPiNMedlem sedan mars 20007 896 inlägg Ta en titt på http://se.php.net/manual/en/ini.sect.path-directory.php#ini.include-path så blir du nog lite klarare på hur det fungerar.
PHP använder färdiga sökvägar där den ska leta efter inkluderings-filer. Du kan ändra din 'include_path' så att den söker i mappen ovanför också, genom att slänga in ett ';..' i slutet, eller alternativt ':..' om du kör Linux/UNIX.
Typ:
<?php
ini_set( 'include_path', '.;..;c:\\php\\includes' );
// alt.
ini_set( 'include_path', '.:..:/php/includes' );
?>
silfverMedlem sedan apr. 200312 679 inlägg
Peeer skrev:
Det gör det väl visst?
Frågan är vad det är som du räknar som root? På en windowsburk är "/" ex. C: eller D: och på en *nix-burk så är / just / (dvs inte /usr/silfver/public_html)
Så här ser det ut när jag försöker:
Warning: main(): Unable to access /includes/top.php in /mnt/home/silfver/www.silfver.se/test/test.php on line 2
Warning: main(/includes/top.php): failed to open stream: No such file or directory in /mnt/home/silfver/www.silfver.se/test/test.php on line 2
Fatal error: main(): Failed opening required '/includes/top.php' (include_path='.:/usr/local/lib/php') in /mnt/home/silfver/www.silfver.se/test/test.php on line 2
silfverMedlem sedan apr. 200312 679 inlägg
SPiN skrev:
<?php
ini_set( 'include_path', '.;..;c:\\php\\includes' );
// alt.
ini_set( 'include_path', '.:..:/php/includes' );
?>
Tackar, nu funkar det ju! :) Koden ser lite mer komplicerad ut dock. :e
<?php
ini_set( 'include_path', '.:..:/includes/top.php' );
?>
r/ Hur ska jag göra om jag vill använda "require" i stället? För jag vill inte att sidan ska funka om den inte hittar filen.
SPiNMedlem sedan mars 20007 896 inlägg Det ska fungera för require också.
silfverMedlem sedan apr. 200312 679 inlägg
SPiN skrev:
Det ska fungera för require också.
Hur ska jag göra då? Trodde det funkade, men trög som jag är så såg jag inte att CSS:en inte låg med.
på http://www.silfver.se/test/ har jag skrivit:
<?php
ini_set( 'include_path', '.:..:/includes/top.php' );
?>
<p>test</p>
<?php
ini_set( 'include_path', '.:..:/includes/bottom.php' );
?>
Är det fel sådär? Eller hur ska jag göra? Ingen css kommer med, eller ingen html-kod...
GunnarDMedlem sedan juni 20014 290 inlägg Re: include "/mapp/fil.php"
silfver skrev:
Hejsan
Varför kan man skriva t.ex.
<link rel="stylesheet" href="/css/index.css" type="text/css">
Men inte
require "/includes/top.php";
Därför att den första går från "webrooten" men include() och require() går från filsystemets root.
Detta innebär att om dina sidor ligger i /www/domain.se/htdocs så kommer den första att hämta /www/domain/htdocs/css/index.css medans den andra hämtar /includes/top.php
För att få det enklare så brukar jag skriva så här när jag kör include() eller require():
<?php include($_SERVER["DOCUMENT_ROOT"]."/includes/top.php"); ?>
Då hämtas /www.domain.se/htdocs/inculdes/top.php
silfverMedlem sedan apr. 200312 679 inlägg Re: Re: include "/mapp/fil.php"
GunnarD skrev:
<?php include($_SERVER["DOCUMENT_ROOT"]."/includes/top.php"); ?>
Det där ser bättre ut. Funkar prima hittills. Tackar.
SPiNMedlem sedan mars 20007 896 inlägg I mitt exempel så sätter jag om variabeln 'include_path' i php.ini att peka på katalogen ovanför. Det är alltså inte så att filen inkluderas med den kodraden, du måste fortfarande använda require() för att inkludera filen.
<?php
ini_set( 'include_path', '.:..:\php\includes' );
require( "dinfil.php" );
Nu kommer alltså PHP söka efter filen 'dinfil.php' i aktuell katalog, katalogen ovanför samt i katalogen \php\includes.
Du kan även ändra direkt i php.ini istället för att i varje PHP-dokument ange ett ini_set-anrop, genom att öppna filen i valfri texteditor och ändra raden med 'ini_set' till önskade kataloger.
GunnarD's exempel är ett alternativ om du orkar skriva så mycket varje gång du ska inkludera något. ;)
silfverMedlem sedan apr. 200312 679 inlägg
SPiN skrev:
I mitt exempel så sätter jag om variabeln 'include_path' i php.ini att peka på katalogen ovanför. Det är alltså inte så att filen inkluderas med den kodraden, du måste fortfarande använda require() för att inkludera filen.
<?php
ini_set( 'include_path', '.:..:\php\includes' );
require( "dinfil.php" );
Nu kommer alltså PHP söka efter filen 'dinfil.php' i aktuell katalog, katalogen ovanför samt i katalogen \php\includes.
Du kan även ändra direkt i php.ini istället för att i varje PHP-dokument ange ett ini_set-anrop, genom att öppna filen i valfri texteditor och ändra raden med 'ini_set' till önskade kataloger.
GunnarD's exempel är ett alternativ om du orkar skriva så mycket varje gång du ska inkludera något. ;)
Jag har ju inte en egen server, så jag kan inte ändra i php.ini. Men din kod kanske funkar ändå? Men eftersom jag knappt förstår mig på php så kör jag på gunnars exempel. Lätt och bra. :e