Je suis en train de faire un site Intranet où des .php sont dans des
sous-répertoires par rapport à l'index.php.
Quand je fais des liens <A...> vers des pages de ces sous-répertoires, elles
s'affichent correctement.
Quand je fais des liens <A...> depuis ces pages vers des pages du répertoire
contenant l'index.php tout fonctionne : /Intranet/MonSite/index.php.
Donc les liens "HTML" fonctionnent bien et considèrent bien "/" comme la
racine de mon serveur Web, comme mentionné dans la variable siteRoot de mon
fichier httpd.conf de Apache.
Par contre mon soucis survient lorsque j'essaye d'accéder à la racine '/'
depuis PHP. Par exemple je voulais lister les répertoires de la racine de
mon serveur Web :
$rep = "/";
$dir = opendir($rep);
while ($f = readdir($dir)) {
if(is_dir($rep.$f) && $f != "." && $f != "..") {
echo $f . '<BR>';
}
}
Et ça me liste le contenu de C:\. Je pensais que le reste du disque dur
(autre que les répertoires contenu dans la racine du seveur Web) ne
pouvaient pas être atteint depuis un script PHP.
De la même manière, toutes mes pages ayant un en-tête commun, elles
commencent par :
<? include("page_header.php") ?>
page_header.php se trouvant dans le même répertoire que index.php.
Mais page_header.php n'est pas trouvé dans les pages des sous-répertoires du
site (normal).
Je voulais donc utiliser :
<? include("/Intranet/MonSite/page_header.php") ?>
mais il me sort :
Warning: main(): Unable to access c:\/Intranet/@doc/page_header.php
Je suis donc obligé de faire :
<? include("../../page_header.php") ?>
ou
<? include("../../../page_header.php") ?>
et ainsi de suis selon le niveau du sous-répertoire.
Je pourrais bien définir une variable $racine avec le chemin de mon site
depuis C:, mais si je déplace mon site ailleurs, il faudra le modifier à
chaque fois...
Quelqu'un saurait-il comment dire à PHP que ma racine est la racine du
serveur Apache et par C:\ ???
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Olivier Miakinen
Par contre mon soucis survient lorsque j'essaye d'accéder à la racine '/' depuis PHP. Par exemple je voulais lister les répertoires de la racine de mon serveur Web : $rep = "/"; $dir = opendir($rep); while ($f = readdir($dir)) { if(is_dir($rep.$f) && $f != "." && $f != "..") { echo $f . '<BR>'; } } Et ça me liste le contenu de C:. Je pensais que le reste du disque dur (autre que les répertoires contenu dans la racine du seveur Web) ne pouvaient pas être atteint depuis un script PHP.
En effet il est possible en PHP d'accéder à des fichiers en dehors du site. C'est d'ailleurs une excellente chose, puisque cela te permet de stocker des fichiers qui ne seront jamais accessibles directement, même au cas improbable où tes protections du style .htaccess tombaient en panne (remplacement d'un .htaccess par un autre par exemple).
Bien sûr, tout ceci n'est valable que si tu n'introduis pas toi-même des failles dans tes programmes PHP. Voir par exemple la page suivante : <http://www.php.net/manual/fr/security.filesystem.php>.
[...] Je voulais donc utiliser : <? include("/Intranet/MonSite/page_header.php") ?> mais il me sort : Warning: main(): Unable to access c:/Intranet/@doc/page_header.php Je suis donc obligé de faire : <? include("../../page_header.php") ?> ou <? include("../../../page_header.php") ?> et ainsi de suis selon le niveau du sous-répertoire.
Donc : <? include($_SERVER["DOCUMENT_ROOT"] . "/page_header.php") ?>
ou : <? include("$_SERVER[DOCUMENT_ROOT]/page_header.php") ?>
Je pourrais bien définir une variable $racine avec le chemin de mon site depuis C:, mais si je déplace mon site ailleurs, il faudra le modifier à chaque fois...
Non, cf. ci-dessus.
Quelqu'un saurait-il comment dire à PHP que ma racine est la racine du serveur Apache et par C: ???
Voir <http://fr.php.net/chroot>.
Donc : <? chroot($_SERVER["DOCUMENT_ROOT"]); include("/page_header.php"); ?>
-- Olivier Miakinen Troll du plus sage chez les conviviaux : le nouveau venu, avec son clan, s'infiltre dans les groupes de nouvelles. (3 c.)
Par contre mon soucis survient lorsque j'essaye d'accéder à la racine '/'
depuis PHP. Par exemple je voulais lister les répertoires de la racine de
mon serveur Web :
$rep = "/";
$dir = opendir($rep);
while ($f = readdir($dir)) {
if(is_dir($rep.$f) && $f != "." && $f != "..") {
echo $f . '<BR>';
}
}
Et ça me liste le contenu de C:. Je pensais que le reste du disque dur
(autre que les répertoires contenu dans la racine du seveur Web) ne
pouvaient pas être atteint depuis un script PHP.
En effet il est possible en PHP d'accéder à des fichiers en dehors du
site. C'est d'ailleurs une excellente chose, puisque cela te permet de
stocker des fichiers qui ne seront jamais accessibles directement, même
au cas improbable où tes protections du style .htaccess tombaient en
panne (remplacement d'un .htaccess par un autre par exemple).
Bien sûr, tout ceci n'est valable que si tu n'introduis pas toi-même des
failles dans tes programmes PHP. Voir par exemple la page suivante :
<http://www.php.net/manual/fr/security.filesystem.php>.
[...]
Je voulais donc utiliser :
<? include("/Intranet/MonSite/page_header.php") ?>
mais il me sort :
Warning: main(): Unable to access c:/Intranet/@doc/page_header.php
Je suis donc obligé de faire :
<? include("../../page_header.php") ?>
ou
<? include("../../../page_header.php") ?>
et ainsi de suis selon le niveau du sous-répertoire.
Donc :
<? include($_SERVER["DOCUMENT_ROOT"] . "/page_header.php") ?>
ou :
<? include("$_SERVER[DOCUMENT_ROOT]/page_header.php") ?>
Je pourrais bien définir une variable $racine avec le chemin de mon site
depuis C:, mais si je déplace mon site ailleurs, il faudra le modifier à
chaque fois...
Non, cf. ci-dessus.
Quelqu'un saurait-il comment dire à PHP que ma racine est la racine du
serveur Apache et par C: ???
Voir <http://fr.php.net/chroot>.
Donc :
<? chroot($_SERVER["DOCUMENT_ROOT"]); include("/page_header.php"); ?>
--
Olivier Miakinen
Troll du plus sage chez les conviviaux : le nouveau venu, avec
son clan, s'infiltre dans les groupes de nouvelles. (3 c.)
Par contre mon soucis survient lorsque j'essaye d'accéder à la racine '/' depuis PHP. Par exemple je voulais lister les répertoires de la racine de mon serveur Web : $rep = "/"; $dir = opendir($rep); while ($f = readdir($dir)) { if(is_dir($rep.$f) && $f != "." && $f != "..") { echo $f . '<BR>'; } } Et ça me liste le contenu de C:. Je pensais que le reste du disque dur (autre que les répertoires contenu dans la racine du seveur Web) ne pouvaient pas être atteint depuis un script PHP.
En effet il est possible en PHP d'accéder à des fichiers en dehors du site. C'est d'ailleurs une excellente chose, puisque cela te permet de stocker des fichiers qui ne seront jamais accessibles directement, même au cas improbable où tes protections du style .htaccess tombaient en panne (remplacement d'un .htaccess par un autre par exemple).
Bien sûr, tout ceci n'est valable que si tu n'introduis pas toi-même des failles dans tes programmes PHP. Voir par exemple la page suivante : <http://www.php.net/manual/fr/security.filesystem.php>.
[...] Je voulais donc utiliser : <? include("/Intranet/MonSite/page_header.php") ?> mais il me sort : Warning: main(): Unable to access c:/Intranet/@doc/page_header.php Je suis donc obligé de faire : <? include("../../page_header.php") ?> ou <? include("../../../page_header.php") ?> et ainsi de suis selon le niveau du sous-répertoire.
Donc : <? include($_SERVER["DOCUMENT_ROOT"] . "/page_header.php") ?>
ou : <? include("$_SERVER[DOCUMENT_ROOT]/page_header.php") ?>
Je pourrais bien définir une variable $racine avec le chemin de mon site depuis C:, mais si je déplace mon site ailleurs, il faudra le modifier à chaque fois...
Non, cf. ci-dessus.
Quelqu'un saurait-il comment dire à PHP que ma racine est la racine du serveur Apache et par C: ???
Voir <http://fr.php.net/chroot>.
Donc : <? chroot($_SERVER["DOCUMENT_ROOT"]); include("/page_header.php"); ?>
-- Olivier Miakinen Troll du plus sage chez les conviviaux : le nouveau venu, avec son clan, s'infiltre dans les groupes de nouvelles. (3 c.)
Dominique Ottello
Olivier Miakinen <om+ écrivait :
Voir <http://fr.php.net/chroot>.
Donc : <? chroot($_SERVER["DOCUMENT_ROOT"]); include("/page_header.php"); ?>
Je n'utilise pas chroot, mais une « fonction maison » pour déterminer à quel niveau d'arborescence le script en exécution se trouve par rapport à la racine du site ; ça fonctionne quel que soit le niveau.
echo "<a href='".$dir."index.php'> <img src='".$dir."images/ancient_home.gif' alt='Accueil'></a>"; -- Aujourd'hui, l'idéal du progrès est remplacé par l'idéal de l'innovation : il ne s'agit pas que ce soit mieux, il s'agit seulement que ce soit nouveau, même si c'est pire qu'avant et cela de toute évidence. Montherlant Technologie aéronautique : http://aviatechno.free.fr
Donc :
<? chroot($_SERVER["DOCUMENT_ROOT"]); include("/page_header.php"); ?>
Je n'utilise pas chroot, mais une « fonction maison » pour déterminer à
quel niveau d'arborescence le script en exécution se trouve par rapport
à la racine du site ; ça fonctionne quel que soit le niveau.
echo "<a href='".$dir."index.php'>
<img src='".$dir."images/ancient_home.gif' alt='Accueil'></a>";
--
Aujourd'hui, l'idéal du progrès est remplacé par l'idéal de l'innovation :
il ne s'agit pas que ce soit mieux, il s'agit seulement que ce soit nouveau,
même si c'est pire qu'avant et cela de toute évidence. Montherlant
Technologie aéronautique : http://aviatechno.free.fr
Donc : <? chroot($_SERVER["DOCUMENT_ROOT"]); include("/page_header.php"); ?>
Je n'utilise pas chroot, mais une « fonction maison » pour déterminer à quel niveau d'arborescence le script en exécution se trouve par rapport à la racine du site ; ça fonctionne quel que soit le niveau.
echo "<a href='".$dir."index.php'> <img src='".$dir."images/ancient_home.gif' alt='Accueil'></a>"; -- Aujourd'hui, l'idéal du progrès est remplacé par l'idéal de l'innovation : il ne s'agit pas que ce soit mieux, il s'agit seulement que ce soit nouveau, même si c'est pire qu'avant et cela de toute évidence. Montherlant Technologie aéronautique : http://aviatechno.free.fr