DOCUMENT variable ROOT sur PHP-IIS
-
14-10-2019 - |
Question
Est-ce que la exist variable de $_SERVER["DOCUMENT_ROOT"]
sur IIS en cours d'exécution PHP? Plus tôt je pensais que cette variable est spécifique et Apache sur IIS, vous devez imiter par la manipulation de chaînes de variables SCRIPT_NAME
et SCRIPT_FILENAME
mais je vois maintenant cette variable sur mon installation de PHP sur IIS. Est-il raisonnable de supposer que cette variable sera toujours disponible sur IIS.
La solution
Est-il sûr de supposer racine doc est toujours disponible dans IIS? Non ...
$ _ SERVER [ 'DOCUMENT_ROOT'] est pas toujours disponible sur IIS .. il doit être défini dans le fichier de configuration ...
S'il est configuré sur votre serveur, vous « pouvez » utiliser ... Assurez-vous que votre fichier de configuration ne change pas - sinon vous casser vos scripts ...
Autres conseils
IIS ne définit pas toujours $ _SERVER [ 'DOCUMENT_ROOT']
Comment ça définissez-vous dans un fichier de configuration, de sorte que le reste de votre code fonctionne comme sur des serveurs Apache?
Sortie _SERVER $ pour voir ce qui est donné que vous pourriez être en mesure d'utiliser:
echo "<br>_SERVER:<br><pre>";
print_r($_SERVER);
echo "</pre><br><br>_ENV:<br><pre>";
print_r($_ENV);
echo "</pre><br><br>";
Dans ce cas, la SCRIPT_FILENAME et SCRIPT_NAME sont réglées.
Modifier le code ci-dessous pour utiliser ce qui est donné pour obtenir DOCUMENT_ROOT:
if (!isset($_SERVER['DOCUMENT_ROOT']) || $_SERVER['DOCUMENT_ROOT'] === '') {
$_SERVER['DOCUMENT_ROOT'] = substr($_SERVER['SCRIPT_FILENAME'], 0, -strlen($_SERVER['SCRIPT_NAME']));
putenv('DOCUMENT_ROOT='.$_SERVER['DOCUMENT_ROOT']);
}
Maintenant, vous pouvez utiliser $ _SERVER [ 'DOCUMENT_ROOT'] normalement:
$docroot = getenv("DOCUMENT_ROOT");
include_once "$docroot/folder/yourfile.php";
Je l'ai résolu simplement en faisant référence à ma racine Web, et le définir comme un de mes propres variables.
<?php
echo getcwd();
chdir('/');
echo getcwd();
chdir('/example-web-server');
echo getcwd();
?>
Le code suivant obtient le répertoire de travail actuel de PHP, qui sera le répertoire contenant le fichier que vous utilisez ce sur. chdir('/')
va à la racine où PHP peut fonctionner, dans mon cas C:\
. racine web de mon exemple serveur Web est à C:\example-web-server
, donc vous pouvez référencer en PHP comme ceci:
/example-web-server
.
Une fois que vous avez le chemin pour PHP, vous pouvez le définir comme une variable et l'appeler. Je vais vous donner un exemple d'un include()
de C:\example-web-server\testing\index.php
:
<?php
$webroot = "/example-web-server";
include("{$webroot}/testing/index.php");
?>
Je sais que c'est un vieux fil, mais je ne peux pas être la seule ayant besoin d'une solution pour cela.
est ce que je l'ai fait au-dessus de index.php:
if(!isset($_SERVER["DOCUMENT_ROOT"]))
{
$_SERVER["DOCUMENT_ROOT"]=getcwd();
}