Pregunta

¿La variable de existir $_SERVER["DOCUMENT_ROOT"] en IIS se ejecuta PHP? Antes he pensado que esta variable es específica Apache y en IIS, hay que emularlo mediante la manipulación de cadenas de variables SCRIPT_NAME y SCRIPT_FILENAME pero ahora veo esta variable en mi instalación de PHP en IIS. ¿Es seguro asumir que esta variable estará siempre disponible en IIS.

¿Fue útil?

Solución

¿Es seguro asumir doc root siempre está disponible en IIS? No se ...

$ _ SERVER [ 'DOCUMENT_ROOT'] no siempre está disponible en IIS .. tiene que ser establecido en el archivo de configuración ...

Si está configurado en su servidor que 'podría' usarlo ... Sólo asegúrese de que su archivo de configuración no cambia - de lo contrario se romperá sus scripts ...

Otros consejos

IIS no siempre establecer $ _SERVER [ 'DOCUMENT_ROOT']

¿Cómo se establece en un archivo de configuración, por lo que el resto de su código funciona como en servidores Apache?

Salida $ _SERVER para ver lo que está dado que es posible que pueda utilizar:

echo "<br>_SERVER:<br><pre>";
print_r($_SERVER);
echo "</pre><br><br>_ENV:<br><pre>";
print_r($_ENV);
echo "</pre><br><br>";

En este caso, la SCRIPT_FILENAME y SCRIPT_NAME están ajustadas.

Modificar el siguiente código para utilizar lo que se da para obtener 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']);
}

Ahora usted puede utilizar $ _SERVER [ 'DOCUMENT_ROOT'] normalmente:

$docroot = getenv("DOCUMENT_ROOT"); 
include_once "$docroot/folder/yourfile.php"; 

Lo resuelto con sólo hacer referencia a mi web raíz, y se establece como una de mis propias variables.

<?php
echo getcwd();
chdir('/');
echo getcwd();
chdir('/example-web-server');
echo getcwd();
?>

El código siguiente obtiene el directorio de trabajo actual de PHP, que será el directorio que contiene el archivo que se está ejecutando en este. chdir('/') va a la raíz de donde PHP puede operar, en mi caso C:\. raíz de la web Mi ejemplo de servidor web está en C:\example-web-server, por lo que se puede hacer referencia a ella en PHP como esto: /example-web-server.

Una vez que tenga el camino para PHP, podría configurar como una variable y lo llaman. Voy a utilizar un ejemplo de un include() de C:\example-web-server\testing\index.php:

<?php
$webroot = "/example-web-server";
include("{$webroot}/testing/index.php");
?>

Sé que esto es un hilo viejo, pero no puede ser el único que necesitan una solución para esto.

Esto es lo que hice en la parte superior de index.php:

if(!isset($_SERVER["DOCUMENT_ROOT"]))
{
    $_SERVER["DOCUMENT_ROOT"]=getcwd();
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top