2010-12-10 11 views
5

Sé cómo ejecutar un script con un cron, pero lo que necesito es poder ejecutar el script solo por un cron.ejecutar script php solo por cron

¡Gracias!

+0

puede ser más específico? ¿Quieres ocultar tu script php de la web y solo usarlo a través de cron? –

+2

posible duplicado de [PHP y cron: problemas de seguridad] (http://stackoverflow.com/questions/4387569/php-cron-security-issues) – ajreal

+0

Consulte la respuesta a la pregunta que se elegirá como un duplicado. –

Respuesta

3

Como se explica en este hilo duplicado:

PHP & cron: security issues

Debe mantener este archivo fuera de public_html.

A veces, sin embargo, esto no es posible. Mi mente fue al Moodle, donde existe una característica similar. Esto es lo que ellos hacen.

De cron.php:

... 

/// The current directory in PHP version 4.3.0 and above isn't necessarily the 
/// directory of the script when run from the command line. The require_once() 
/// would fail, so we'll have to chdir() 

    if (!isset($_SERVER['REMOTE_ADDR']) && isset($_SERVER['argv'][0])) { 
     chdir(dirname($_SERVER['argv'][0])); 
    } 

... 

/// check if execution allowed 
    if (isset($_SERVER['REMOTE_ADDR'])) { // if the script is accessed via the web. 
     if (!empty($CFG->cronclionly)) { 
      // This script can only be run via the cli. 
      print_error('cronerrorclionly', 'admin'); 
      exit; 
     } 
     // This script is being called via the web, so check the password if there is one. 
     if (!empty($CFG->cronremotepassword)) { 
      $pass = optional_param('password', '', PARAM_RAW); 
      if($pass != $CFG->cronremotepassword) { 
       // wrong password. 
       print_error('cronerrorpassword', 'admin'); 
       exit; 
      } 
     } 
    } 

... 
+0

Voy a intentar esto, thx :) – nirvanist

+2

+1, si no quieres que se acceda a algo a través de Internet, * no lo pongas en el maldito internet *. Manténgalo fuera de la raíz del documento. –

+3

Como se mencionó, esto no siempre es posible. Es agradable dar una conferencia sobre eso, pero la próxima vez considere las imposibilidades. – Sweepster

-2

Intente otorgar permisos de ejecución solo para el usuario de cron daemon, quizás con eso obtenga lo que desea.

¡Recuerdos!

0

Debe mantener esta secuencia de comandos fuera de la carpeta pública. Además, establezca los permisos adecuados para que los usuarios públicos no puedan ejecutar el script. Ponga el siguiente fragmento de código en la parte superior de su script.

if(php_sapi_name() !== 'cli'){ 
    die('Can only be executed via CLI'); 
} 

Tenga en cuenta que debe utilizar la ruta completa al ejecutable de PHP cuando configure su tarea cron. Ej:/usr/local/bin/php (ruta de acceso puede ser difieren de esto)

0

favor añadir esta secuencia de comandos en la parte superior de su archivo PHP:

$isCLI = (php_sapi_name() == 'cli'); 
if(!$isCLI) 
    die("Sorry! Cannot run in a browser! This script is set to run via cron job"); 

y luego, si intenta ejecutar el archivo PHP a través del navegador, no puede ejecutarlo. Este mensaje de error se mostrará. Pero al mismo tiempo, se puede ejecutar a través de un trabajo cron.

Cuestiones relacionadas