Uso $ _SERVER ['DOCUMENT_ROOT']. "/ Lib/sft_required.php"; para incluir el archivo 'sft_required' en un script PHP. Cuando ejecuto este archivo usando el navegador, funciona bien, pero cuando lo ejecuto como un trabajo de trabajo de cron, no funciona. Parece que el archivo no está incluido cuando ejecutamos el script a través de cron.
Respuesta
Suponiendo que está ejecutando el script directamente a través de cron (a diferencia de un servidor web al que accedió una solicitud HTTP activada por un cronjob (por ejemplo, ejecutando cron wget)), por supuesto, no funciona.
No hay servidor, por lo que $_SERVER
no está configurado.
$_SERVER
no se puede esperar que contenga ninguno de los valores normales cuando se ejecuta un script PHP utilizando el intérprete CLI. Ponga la ruta en una variable de entorno o páselo al script como un argumento de línea de comando.
se podría poblar el $ _SERVER [ 'DOCUMENT_ROOT'] en su propia
$_SERVER['DOCUMENT_ROOT'] = dirname(__FILE__);
si el archivo cron se encuentra en la raíz del documento
$_SERVER['DOCUMENT_ROOT'] = dirname(dirname(__FILE__));
si el archivo cron es un directorio por encima del documento raíz
Esta respuesta debe marcarse como aceptada, ya que da una solución práctica a la pregunta del OP ... –
Respondí una pregunta similar here. Como han mencionado las personas, el superglobal $ _SERVER no está definido en situaciones de CLI. En el enlace hay un (hasta ahora) método infalible para obtener la ubicación DOCUMENT_ROOT. Espero que sea útil.
define('DOCROOT', substr(str_replace(pathinfo(__FILE__, PATHINFO_BASENAME), '', __FILE__), 0, -1));
Esto obtendrá los mismos datos que para $_SERVER['DOCUMENT_ROOT']
cronjobs.
¿Por qué? -1 Esto funciona. – alimack
demasiadas cosas para que resulte lo mismo que 'dirname (__FILE __) 'y, no resuelves ... –
Ejemplo 1:
/var/www/site.com/ - DOCUMENT_ROOT;
/var/www/site.com/ cron /script.php - script CRON PHP;
<?php
/** DOCUMENT_ROOT -> /var/www/site.com/ */
$_SERVER['DOCUMENT_ROOT'] = realpath(dirname(__FILE__).'/../');
?>
Ejemplo 2:
/var/www/site.com/ - DOCUMENT_ROOT;
/var/www/site.com/ sub_dir/cron /script.php - script CRON PHP;
<?php
/** DOCUMENT_ROOT -> /var/www/site.com/ */
$_SERVER['DOCUMENT_ROOT'] = realpath(dirname(__FILE__).'/../../');
?>
- 1. equivalente a $ _SERVER ['DOCUMENT_ROOT'] que funcionará cuando cron active la secuencia de comandos?
- 2. Cron Job $ _SERVER issue
- 3. $ _SERVER ["SCRIPT_URI"] no funciona? ¿alternativa?
- 4. Cron trabajo creando archivo vacío cada vez que se ejecuta
- 5. PHP: ¿La ruta requerida no funciona para el trabajo cron?
- 6. El script de My Shell que inicia Rake no se ejecuta correctamente cuando se inicia a través de cron
- 7. ejecuta php script automáticamente
- 8. ¿Cómo se ejecuta exactamente un script PHP?
- 9. ¿hay alguna forma mejor de volver al directorio raíz que no sea $ _SERVER ['DOCUMENT_ROOT']?
- 10. script de shell que no se ejecuta mediante crontab, se ejecuta correctamente manualmente
- 11. Mensajes de eco mientras el script php aún se ejecuta
- 12. script de línea de comandos php no se ejecuta
- 13. ¿Existe $ _SERVER ['HTTP_X_REQUESTED_WITH'] en PHP o no?
- 14. La ruta relativa no funciona en la secuencia de comandos cron PHP
- 15. PHP: archivo de descarga script no funciona en el iPad
- 16. Ejecutar script de Python con cron solo si no se ejecuta
- 17. El trabajo cron no funciona en Whenever gem
- 18. cómo configurar el trabajo cron desde el script php?
- 19. ejecutar script php solo por cron
- 20. ¿Cómo puedo controlar DOCUMENT_ROOT para que funcione en el servidor local y el servidor en vivo?
- 21. postbuild UIAutomation script no se ejecuta en jenkins
- 22. ¿Por qué esta entrada cron se ejecuta dos veces?
- 23. Detección del script shell que se ejecuta en Cygwin
- 24. ¿Cómo puedo depurar un script Launchd que no se ejecuta en el inicio?
- 25. Cómo hacer que el script php ejecute otro script php
- 26. Script PHP para descargar el archivo que no funciona en IE
- 27. PHP: $ _SERVER ['REDIRECT_URL'] frente a $ _SERVER ['REQUEST_URI']
- 28. Asegúrese de que un script PHP se ejecute solo como un trabajo cron?
- 29. ¿Puede PHP detectar si se ejecuta desde un trabajo cron o desde la línea de comandos?
- 30. No se puede ejecutar el script PHP en Tomcat
En realidad, el '$ _SERVER' superglobal está configurado pero contiene diferentes valores. –
"por supuesto"? ¿Por qué el servidor "olvidaría" qué es 'DOCUMENT_ROOT'? No es tan obvio (en realidad, después de algunos años todavía no entiendo por qué DOC_ROOT está en blanco ('REMOTE_ADDR' etc. son más obvios) – Martijn
@Martijn - El servidor no olvidará nada. El PHP no está siendo ejecutado por el servidor web, está siendo ejecutado por cron. – Quentin