[PHP] Het Require pad

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • RwD
  • Registratie: Oktober 2000
  • Niet online

RwD

kloonikoon

Topicstarter
Ik probeer het volgende vrij eenvoudige te doen:
code:
1
require_once( $_SERVER['DOCUMENT_ROOT'] . 'admin/dal_mysql.php' );


Maaar een echo $_SERVER['DOCUMENT_ROOT']; laat zien dat deze variabele niet gevuld is.....

nou zag ik hier staan:
'DOCUMENT_ROOT'
The document root directory under which the current script is executing, as defined in the server's configuration file.
Dus zou ik de conclusie trekken dat het niet geconfigureerd is. (Het gaat hier om een shared webspace...)

De documentatie gaf ook niet aan of '/admin/dal_mysql.php' een geldig pad zou moeten zijn zoals dit in HTML kan, maar dit bleek ook niet te werken.
Tot nu toe heb ik zonder er bij na te denken altijd PHP_SELF geript en van daar uit een relatief pad naar de root berekend.

Op dit forum worden allemaal suggesties met DECOMENT_ROOT gedaan, dus dat zou toch moeten werken...

Wie weet waarom bovenstaande niet werkt, en wat ik moet doen om niet met relatieve paden (ook al worden ze uitgerekend en in variabelen gezet) zoals './../../../admin/dal_mysql.php' te hoeven werken??

Overigens is de foutmelding steevast dat het bestand niet gevonden kan worden, terwijl dat bestand in de /www/admin/ dirtectorie staat waar /www/ de root is

Acties:
  • 0 Henk 'm!

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
*need more input*

Ik vrees dat we hiervoor iets meer informatie nodig hebben.
- Welke versie van php?
- Welke webserver gebruik je?
- Hoe gebruikt deze webserver php? Als plug-in of worden de calls omgezet naar een aanroep van php.exe?

Ik heb het vermoeden dat een goede search op Google wonderen zal doen, maar goed, als je de bovenstaande informatie verschaft kan er misschien alweer meer licht op je probleem worden geworpen.

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Maak eens een bestandje met daarin:
PHP:
1
phpinfo();
Staat het er dan wel in?

Acties:
  • 0 Henk 'm!

  • RwD
  • Registratie: Oktober 2000
  • Niet online

RwD

kloonikoon

Topicstarter
djluc schreef op 17 juni 2004 @ 15:09:
Maak eens een bestandje met daarin:
PHP:
1
phpinfo();
Staat het er dan wel in?
Ben ik vergeten te zeggen...
Dit heb ik geprobeerd, en ik heb wel 100 keer de string van PHP_SELF voorbij zien komen, maar 0 keer document root.

En voor de vorige poster:
Ik heb gegoogeled, maar ze komen allemaal zonder oplossing, dus ik zoek slecht of het staat er niet goed zichtbaar tussen.

Acties:
  • 0 Henk 'm!

  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05 09:40

GX

Nee.

document_root moet in de php configuratie bestand gezet worden, anders kan je beter absolute paden gebruiken..

of gewoon document_root in de config goed zetten, of include_path..

[ Voor 7% gewijzigd door GX op 17-06-2004 15:32 . Reden: wazig nederlands verwijderd ]


Acties:
  • 0 Henk 'm!

  • RwD
  • Registratie: Oktober 2000
  • Niet online

RwD

kloonikoon

Topicstarter
GX schreef op 17 juni 2004 @ 15:32:
document_root moet in de php configuratie bestand gezet worden, anders kan je beter absolute paden gebruiken..

of gewoon document_root in de config goed zetten, of include_path..
Ik wil wel absolute paden gebruiken, maar '/admin/dal_mysql.php' pikt ie niet

Dus hoe precies bedoel jij absolute paden?

Acties:
  • 0 Henk 'm!

  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05 09:40

GX

Nee.

RwD schreef op 17 juni 2004 @ 15:34:
[...]

Ik wil wel absolute paden gebruiken, maar '/admin/dal_mysql.php' pikt ie niet

Dus hoe precies bedoel jij absolute paden?
absoluut voor PHP is niet zoals de browser het benaderd.

Stel dat je bestanden in /etc/www/rwd/ zouden staan, word je include path '/etc/www/rwd/admin/dal_mysql.php'

of voor windows 'D:\\www\\admin\\dal_mysql.php'

:)

edit:

even gespiekt, aan de hand hiervan: _ENV["PATH_TRANSLATED"] kan je je absolute pad wel bedenken

[ Voor 15% gewijzigd door GX op 17-06-2004 15:42 ]


Acties:
  • 0 Henk 'm!

  • RwD
  • Registratie: Oktober 2000
  • Niet online

RwD

kloonikoon

Topicstarter
GX schreef op 17 juni 2004 @ 15:36:
[...]


absoluut voor PHP is niet zoals de browser het benaderd.

Stel dat je bestanden in /etc/www/rwd/ zouden staan, word je include path '/etc/www/rwd/admin/dal_mysql.php'

of voor windows 'D:\\www\\admin\\dal_mysql.php'

:)

edit:

even gespiekt, aan de hand hiervan: _ENV["PATH_TRANSLATED"] kan je je absolute pad wel bedenken
iew :P
dat zou wel verklaren waarom ik het niet kon vinden, hier apache, thuis IIS. Ik zal het nog eens nazoeken... Wordt vervolgd....

Acties:
  • 0 Henk 'm!

  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05 09:40

GX

Nee.

RwD schreef op 17 juni 2004 @ 15:44:
[...]
iew :P
dat zou wel verklaren waarom ik het niet kon vinden, hier apache, thuis IIS. Ik zal het nog eens nazoeken... Wordt vervolgd....
Je kan ook relatieve paden maken natuurlijk

./admin/dal_mysql.php zal ook wel werken :)

Acties:
  • 0 Henk 'm!

  • RwD
  • Registratie: Oktober 2000
  • Niet online

RwD

kloonikoon

Topicstarter
GX schreef op 17 juni 2004 @ 15:46:
[...]


Je kan ook relatieve paden maken natuurlijk

./admin/dal_mysql.php zal ook wel werken :)
Alleen als je al in de root bent dan heh, en ik wilde juist af van dat relatieve gedoe, dr zouden dan misschien dingen mis kunnen gaan :?

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

RwD schreef op 17 juni 2004 @ 15:56:
[...]
Alleen als je al in de root bent dan heh, en ik wilde juist af van dat relatieve gedoe, dr zouden dan misschien dingen mis kunnen gaan :?
Het is lastig als je veel verschillende directories gebruikt en dingen uit die directories weer overal include. Dan worden relatieve paden op een gegeven moment een aardige hel :)

Als DOCUMENT_ROOT niet werkt kun je ook zelf even een variable ergens zetten die je overal gebruikt met je absolute pad (zou als het goed is wel ergens te vinden moeten zijn, anders even aan je hostingpartij vragen).

Acties:
  • 0 Henk 'm!

  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05 09:40

GX

Nee.

RwD schreef op 17 juni 2004 @ 15:56:
[...]
Alleen als je al in de root bent dan heh, en ik wilde juist af van dat relatieve gedoe, dr zouden dan misschien dingen mis kunnen gaan :?
Nee hoor, die . staat gewoon voor de directory waarin het bestand staat. Weer een voorbeeld om 't duidelijker te maken;

Stel je test.php staat in /etc/www/rwd/

In test.php roep je ./admin/dal_mysql.php aan, dan vraagt ie om /etc/www/rwd/admin/dal_mysql.php

Die . kan veel uitmaken.

[ Voor 1% gewijzigd door GX op 17-06-2004 16:13 . Reden: wazig nederlands ]


Acties:
  • 0 Henk 'm!

  • RwD
  • Registratie: Oktober 2000
  • Niet online

RwD

kloonikoon

Topicstarter
GX schreef op 17 juni 2004 @ 16:12:
[...]


Nee hoor, die . staat gewoon voor de directory waarin het bestand staat. Weer een voorbeeld om 't duidelijker te maken;

Stel je test.php staat in /etc/www/rwd/

In test.php roep je ./admin/dal_mysql.php aan, dan vraagt ie om /etc/www/rwd/admin/dal_mysql.php

Die . kan veel uitmaken.
nou, ik was niet duidelijk helaas :P
./admin kan alleen vanuit de root omdat de admin directory in de root staat ;)
in mijn geval

[ Voor 3% gewijzigd door RwD op 17-06-2004 16:23 ]


Acties:
  • 0 Henk 'm!

  • RwD
  • Registratie: Oktober 2000
  • Niet online

RwD

kloonikoon

Topicstarter
Bosmonster schreef op 17 juni 2004 @ 16:12:
[...]


Het is lastig als je veel verschillende directories gebruikt en dingen uit die directories weer overal include. Dan worden relatieve paden op een gegeven moment een aardige hel :)

Als DOCUMENT_ROOT niet werkt kun je ook zelf even een variable ergens zetten die je overal gebruikt met je absolute pad (zou als het goed is wel ergens te vinden moeten zijn, anders even aan je hostingpartij vragen).
Die variabele is wel een idee, alleen, ik moet altijd eerst een bestand global.php invoegen, die doet authenticatie en andere zaken die nodig zijn. en juist die wilde ik gewoon kunnen vinden met een absoluut pad. Als ik weer een variabele ga zetten, kan ik die net zo goed laten wijzen naar het pad naar global....

Acties:
  • 0 Henk 'm!

  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05 09:40

GX

Nee.

RwD schreef op 17 juni 2004 @ 16:22:
[...]
nou, ik was niet duidelijk helaas :P
./admin kan alleen vanuit de root omdat de admin directory in de root staat ;)
in mijn geval
Oh, dan heeft al mijn bovenstaande geblaat ook geen nut geloof ik :)

Misschien heb je er ooit iets aan!

Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
GX schreef op 17 juni 2004 @ 15:46:
[...]


Je kan ook relatieve paden maken natuurlijk

./admin/dal_mysql.php zal ook wel werken :)
Dat gaat bij veel includes die veel includes hebben die geinclude worden door ook nog andere bestanden fout, snap je ;)

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ik denk toch wel dat relatieve paden het makkelijkst zijn, maar wel zolang je include_path maar niets is (en in geen geval de . erin heeft staan). Dan worden includes namelijk altijd gewoon vanuit de dir waar de huidige sourcefile in staat behandeld, en krijg je ook geen rare conflicten als je files met dezelfde naam in verschillende dirs hebt staan

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Rostvertol-Mil
  • Registratie: Januari 2002
  • Laatst online: 15:42
gewoon bij elke pagina de path_tot_root in een variabele zetten, zoiets:
code:
1
2
3
4
5
6
<?php
$root = "./";

require($root . "include.php");

?>

dus als de root een paar map terug is doe je em lekker $root = "../../../";

relative paden zijn denk ik altijd makkelijker
en als je et zo doet gaat et ook 90% goed.

[ Voor 25% gewijzigd door Rostvertol-Mil op 17-06-2004 17:12 ]

dot.blaat


Acties:
  • 0 Henk 'm!

  • RwD
  • Registratie: Oktober 2000
  • Niet online

RwD

kloonikoon

Topicstarter
Rostvertol-Mil schreef op 17 juni 2004 @ 17:10:
gewoon bij elke pagina de path_tot_root in een variabele zetten, zoiets:
code:
1
2
3
4
5
6
<?php
$root = "./";

require($root . "include.php");

?>

dus als de root een paar map terug is doe je em lekker $root = "../../../";

relative paden zijn denk ik altijd makkelijker
en als je et zo doet gaat et ook 90% goed.
dat is 10% te weinig ben ik bang :Y)

[ Voor 6% gewijzigd door RwD op 17-06-2004 18:12 ]


Acties:
  • 0 Henk 'm!

  • Eärendil
  • Registratie: Februari 2002
  • Laatst online: 15:34
RwD schreef op 17 juni 2004 @ 16:25:
[...]

Die variabele is wel een idee, alleen, ik moet altijd eerst een bestand global.php invoegen, die doet authenticatie en andere zaken die nodig zijn. en juist die wilde ik gewoon kunnen vinden met een absoluut pad. Als ik weer een variabele ga zetten, kan ik die net zo goed laten wijzen naar het pad naar global....
Je kan in global.php ook de voorgedefineerde constante __FILE__ gebruiken, als global.php in je root-dir staat heb je met
PHP:
1
$root = dirname(__FILE__);

al het absolute pad naar je root-dir, als global.php in een sub-dir staat moet je die er even vanaf halen.

Acties:
  • 0 Henk 'm!

  • Erhnam
  • Registratie: Januari 2000
  • Laatst online: 11:09

Erhnam

het Hardware-Hondje :]

Ik doe het altijd zo ( weet niet of je dit bedoelt )
Ik hoop dat je er wat aan hebt.

PHP:
1
2
3
4
5
6
7
8
9
10
11
<?

 if ( $voornaam == "" | $achternaam == "" )
  {
  echo "Voornaam en/of Achternaam niet ingevuld...";
  }
else {
  echo "Done";
   }

?>

[ Voor 28% gewijzigd door Erhnam op 17-06-2004 20:08 ]

http://www.xbmcfreak.nl/


Acties:
  • 0 Henk 'm!

  • PierreAronnax
  • Registratie: Maart 2002
  • Niet online
Probeer eens
PHP:
1
echo $HTTP_SERVER_VARS["DOCUMENT_ROOT"];


Als daar het juiste adres in voor komt kun je de volgende regel gebruiken:
PHP:
1
require_once($HTTP_SERVER_VARS['DOCUMENT_ROOT'] . 'admin/dal_mysql.php' );



Dit verschil tussen $_SERVER en $HTTP_SERVER_VARS krijg je als de systeembeheerder in zijn php.ini "register_globals off" ipv. "register_globals on" heeft.

[ Voor 36% gewijzigd door PierreAronnax op 17-06-2004 20:17 ]

Pierre - Motormedia.nl - Motor-Forum.nl - Motorshopper.nl - Motormeuk.nl - Motorstek.nl


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Eärendil schreef op 17 juni 2004 @ 20:01:
[...]


Je kan in global.php ook de voorgedefineerde constante __FILE__ gebruiken, als global.php in je root-dir staat heb je met
PHP:
1
$root = dirname(__FILE__);

al het absolute pad naar je root-dir, als global.php in een sub-dir staat moet je die er even vanaf halen.
Dan moet je wel eerst het pad van global.php weten voordat je 'm kunt includen ;)
Maar die zou je natuurlijk in de include_path kunnen zetten zodat je gewoon "global.php" kunt includen vanuit elke dir

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • RwD
  • Registratie: Oktober 2000
  • Niet online

RwD

kloonikoon

Topicstarter
AARG, dit is echt erg |:(

Ik wil dat ding wel ergens definieren, maar dan moet ik het pad naar de definitie weten :?
Dus dan ben ik dus in aan het vullen waar ik datgene dat ik invul kan halen. namelijk waar de root zit en dat wist ik al anders kon ik het niet eerst invulle 8)7

Is er echt geen fijne '/' optie zoals voor url's in HTML. gewoon /admin/dal_myql.php en ik weet zeker dat hij vanuit de root kijkt :O


Een van de beste antwoorden tot nu toe die ik trouwens gezien heb is deze:
Eärendil schreef op 17 juni 2004 @ 20:01:
Je kan in global.php ook de voorgedefineerde constante __FILE__ gebruiken, als global.php in je root-dir staat heb je met
PHP:
1
$root = dirname(__FILE__);

al het absolute pad naar je root-dir, als global.php in een sub-dir staat moet je die er even vanaf halen.
Maar ja, dan moet ik dus wel weten vanuit het bestand waar ik begin waar ik global moet vinden, en als ik dat weet, dan is een variabele het relatieve pad naar de root laten maken ook geen probleem, en dat gaat ook altijd goed dan.
Alhoewel ik met dit absolute pad wel een paar mogelijkheden zie die anders niet hadden gekunt..

Hoe doen jullie dit trouwens?

offtopic:
Misschien leuk om de html oplossing ( '/' ) voor te stellen voor een nieuwe release van PHP???

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ik snap eigenlijk geen zak van wat nou eigenlijk je probleem is (that is, ik begrijp wat je bedoelt, maar ik zie daar geen probleem :))

Je weet welke file wordt aangeroepen, dus je weet waar die file zich bevindt. Als je dat weet, weet je ook hoe je bij de overige files kunt komen, relatief aan die ene file. Wat is het probleem dan? En bovendien zou je ook nog een include_path in kunnen stellen, zodat als jij
PHP:
1
include ("global.php");
doet, global.php gewoon altijd uit de juiste directory gevist wordt (include & friends zoeken altijd eerst in de dirs die in de include_path vermeld staan).

Dus wat is het probleem nu precies? :) Ik denk dat je af moet stappen van het idee om alle includes aan te spreken via hun absolute pad. Gewoon relatief werken, vanuit elke file. Dat werkt echt het handigst. Of misschien ben je in de veronderstelling dat de includes die door de includes van de originele file worden gedaan ook gezocht worden vanuit de originele directory? Dat is niet zo (wel als '.' in de include_path voorkomt overigens, want dan wordt er ook gezocht in de huidige dir, en dat is toevallig ook de dir waar het originele script staat).

Dus als je een /index.php, een /dir1/file1.php en een /dir1/dir2/file2.php hebt, en je roept vanuit je browser /dir1/file1.php aan, dan kun je met een "../index.php" en "dir2/file2.php" bij de respectievelijke files komen. En stel je zou index.php includen, die op zijn beurt weer file2.php wilt includen, dan zet je in index.php dus een "dir1/dir2/file2.php". En dat werkt ook gewoon als je 'm vanuit /dir1/file1.php geinclude zou hebben

[ Voor 48% gewijzigd door .oisyn op 18-06-2004 00:42 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • slm
  • Registratie: Januari 2003
  • Laatst online: 12-11-2023

slm

De enige situatie die ik tot nog ben tegengekomen waar géén document_root var was gedefinieerd, was op een IIS webserver met PHP.

Als dit zo is, is de enige oplossing PHP als ISAPI module te configureren, gebruik van een global var of gebruik van relatieve paden.

To study and not think is a waste. To think and not study is dangerous.

Pagina: 1