Just nu i M3-nätverket
Jump to content

DOCUMENT_ROOT Problem.


Conaj

Recommended Posts

Hej!

 

Har en utvecklingsdator som kör Apache, PHP på en Windows maskin. På "Live" servern kör det Apache, PHP, Linux.

 

På "Live" sidan så fungerar DOCUMENT_ROOT exemplariskt. Men på min utvecklingsdator blir det konstigt om jag anropar $_SERVER["DOCUMENT_ROOT"].

 

Där blir det en filsökväg ex. c:\webb\php\kalle

 

Min Apache config ser ut så här:

[log]

<VirtualHost *:80>

DocumentRoot c:\webb\php\kalle

ServerName test

DirectoryIndex dummy.dal

<Directory "c:\webb\php\kalle">

options Indexes FollowSymLinks

</Directory>

</VirtualHost>

 

LoadModule php4_module "c:/PHP/sapi/php4apache2.dll"

AddType application/x-httpd-php .php .php3 .phps

[/log]

 

I min windows hostfil ser det ut så här:

127.0.0.1 test

 

Hur ska jag göra så att DOCUMENT_ROOT är http://test och inte c:\webb\php\kalle?

 

Tack på förhand

Conaj

 

Link to comment
Share on other sites

DOCUMENT_ROOT talar om var i filsystemet dokumentrooten ligger, http-motsvarigheten är http://dindomän/

Om din kod inte vet vad den har för domän kan du antingen generera relativa länkar:

ex.

<a href="/">Länk till rooten</a>

eller plocka fram det med de variabler som står till ditt förfogande:

ex.

<a href="http:[color="#006400"]//<?=$_SERVER['HTTP_HOST']?>/">Länk till rooten</a>[/color]

 

 

Link to comment
Share on other sites

Jag har fifflat med host filen på Windows så att den ska ta upp alla http://test'>http://test och diregera om den till localhost.

 

Jag skulle vilja att roten var http://test (samma som den i host filen) men jag får ut:

file://c:\webb\php\kalle.

 

Detta gör att php filen som finns i den kataltogen inte körs på korrekt sätt eftersom det är en direkt sökväg till filen och inte genom servern....Kan jag fixa detta eller är det kört?

 

/Conaj

 

 

Link to comment
Share on other sites

Jag är inte riktigt säker på vad du menar. Som sagts så är det helt riktigt att $_SERVER['DOCUMENT_ROOT'] är en lokal sökväg, det är det den ska vara (se dokumentationen: http://se.php.net/manual/en/reserved.variables.php#reserved.variables.server), och det troliga är att det är nån annan variabel du vill använda. Vad försöker du använda DOCUMENT_ROOT till?

 

För att se de olika fälten i $_SERVER och vad de har för värden på din server, skriv följande i en php-fil:

 

<pre><?[color="#0000ff"]php[/color] [color="#0000ff"]print[/color]_r([color="#0000ff"]$[/color]_SERVER); ?>

 

Link to comment
Share on other sites

Hur jag än vrider och vänder på det så får jag inte någon server variabel att innehålla "http://test".

 

Jag vill alltså göra så här:

<?

echo <a href=\"$_SERVER["DOCUMENT_ROOT"]/about/index.php\"></a>

?>

 

Funkar bra på den publika servern (Linux, Apache, PHP) eftersom där är DOCUMENT_ROOT = http://www.test.com

 

Men inte på min utvecklingsserver (Windows, Apache, PHP) för där är DOCUMENT_ROOT=c:\webb\php\test

 

index.php sidan körs inte genom servern på min Windows maskin utan kallas direkt.

 

Varför jag ställer denna fråga är för att jag vill undvika att ändra i källkoden så fort jag laddar upp koden till den publika sidan /laddar ner den till min dator.

 

Hur kan jag lösa detta?

 

/Conaj

 

Link to comment
Share on other sites

Jag vill alltså göra så här:

<?

echo <a href=\"$_SERVER["DOCUMENT_ROOT"]/about/index.php\"></a>

?>

Det vill du inte alls, det du vill göra (och som jag skrev tidigare) är:

[color="#0000ff"]echo[/color] "<a href=\"http:[color="#006400"]//".$_SERVER['HTTP_HOST']."/about/index.php\">Om</a>";[/color]

 

DOCUMENT_ROOT har absolut inget med saken att göra, att tro att du ska kunna använda den är precis lika befängt som att tro att du ska kunna använda ett äpple som bränsle till en bil.

 

Funkar bra på den publika servern (Linux, Apache, PHP) eftersom där är DOCUMENT_ROOT = http://www.test.com

Jag har aldrig sett en server med linux, apache och PHP som har en så allvarlig bug.

Du måste ha sett fel.

 

Edit: Eforum radbryter koden olyckligt... Kika här för bättre färgkodning och visning: http://4b6bb0e942c5afdd.paste.se/

[inlägget ändrat 2005-02-11 15:13:37 av fhe]

Link to comment
Share on other sites

Tack.

 

Det funkar nu. ang. DOCUMENT_ROOT så står det så är från phpinfo()

SERVER["DOCUMENT_ROOT"] = /home/test/public_html

 

Helt korrekt alltså. Men när jag anropar det så blir det www.test.com

 

Detta gäller den publika servern.

 

På min egen så funkar HTTP_HOST alldeles utmärkt....poäng och tack.

 

Följd fråga....tycker du att jag ska byta DOCUMENT_ROOT till HTTP_HOST även där jag använder include_once?

 

Alltså: Include_once($_SERVER["DOCUMENT_ROOT"]./help/about.php)

Till: include_once($_SERVER["HTTP_HOST"]./help/about.php)

 

Har en massa sådana rader på den min utvecklingsburk som dessutom funkar kanon på den publika burken.

 

//Conaj

 

Link to comment
Share on other sites

Helt korrekt alltså. Men när jag anropar det så blir det www.test.com

Det blir det inte, gör view source får du se...

 

Dock är det så att om det i html står t.ex:

<a href="/home/test/public_html">

så kommer webbläsaren att hantera det som om det står:

<a href="http://dindomän/home/test/public_html">

 

En path som börjar med / är lixom per automatik en url på den host som sidan kommer från.

 

Link to comment
Share on other sites

tycker du att jag ska byta DOCUMENT_ROOT till HTTP_HOST även där jag använder include_once?

Nej,troligtvis vill du inte det. Om du använder HTTP_HOST kommer du att få en HTTP-adress, som alltså går genom servern, medan DOCUMENT_ROOT ger en sökväg i serverns filsystem. Om du vill inkludera en fil som finns på servern ska du använda DOCUMENT_ROOT för PHP-koden ska bli inkluderad. Om du kör över HTTP får istället den inkluderade filens utdata, dvs HTML-koden.

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...