2010-02-19 13 views
5

Estoy usando $_SERVER['DOCUMENT_ROOT'] para mis rutas de inclusión, para que los archivos se den cuenta de dónde se están ejecutando (es decir, si están en vivo o en etapas) y funciona bien, a excepción de los scripts que ejecuta cron en los que tengo que codificar el camino.

¿Hay alguna otra variable que pueda usar que pueda funcionar tanto desde el cron como desde el navegador?

Respuesta

10

Al ejecutar su script PHP a través de cron, supongo que se ejecuta en el contexto de la CLI en lugar del servidor web. En el caso de ejecutar PHP desde la CLI, $ _SERVER ['DOCUMENT_ROOT'] no se llena correctamente. Se puede utilizar el siguiente código para evitar este:

if ($_SERVER['DOCUMENT_ROOT'] == "") 
    $_SERVER['DOCUMENT_ROOT'] = dirname(__FILE__); 
+1

Si el script se ejecuta desde subcarpetas, devolverá las subcarpetas. –

5

A continuación se le dará el directorio que el script se encuentra en:

realpath(dirname(__FILE__)); 

Esto funciona tanto para las solicitudes web y scripts de cron.

+0

usando realpath me ayudó cuando trabajaba en un sistema de Windows, gracias. – CrandellWS

3

Lo mejor que puede hacer es definir su propia constante a la que pueda hacer referencia desde cualquier otro lugar de su aplicación. Por ejemplo, puede poner algo como esto en Midirectorio/public_html/index.php:

define('APPLICATION_PATH', realpath(dirname(__FILE__).'/..')); 

esto le dará una referencia constante de vuelta a Midirectorio/index.php independientemente del lugar donde se le llama o se incluye a partir. La definición de su propia constante no solo le permite llamar a su aplicación desde cron o a través del navegador como desee, sino que también le permitirá cambiar su estructura de almacenamiento de manera mucho más amplia con cambios mínimos para rastrear. Zend Framework utiliza esto en gran medida con su proceso de arranque Zend_Application, y Google para "PHP APPLICATION_PATH" le proporcionará una variedad de referencias adicionales.

0

puede utilizar chdir() función, si se ejecuta un script a través de cron:

chdir(dirname(__FILE__)); //avoid conflict with "cron path" and app base path (if script runs via 'Cron') 

trabajo en Windows, por lo use "nnCron", pero tiene que funcionar en Linux también.

Cuestiones relacionadas