Red de conocimiento informático - Problemas con los teléfonos móviles - Cómo implementar tareas de ejecución en segundo plano en thinkphp

Cómo implementar tareas de ejecución en segundo plano en thinkphp

Dos métodos para que ThinkPHP implemente la ejecución de tareas programadas

1. Método 1: v3.2.1

① ThinkPHP/Library/Behavior/CronRunBehavior.class. php

Lo primero que hay que decir aquí es que hay un error en el archivo oficial para ejecutar tareas automáticamente. Estoy usando la versión v3.2.1. Puedes intentar ver si se puede corregir. versiones posteriores.

[php] vista simple

/**? * =============== ========================? * Creado por: Weibang Technology? * Autor: ZhiHua_W? 11:12 am? * Proyecto: ¿ThinkPHP implementa la ejecución programada de tareas? * Poder: ¿Automatizar tareas? * =======================================? */ ?

comportamiento del espacio de nombres;

clase CronRunBehavior ?

{ ?

ejecución de función pública(&$params)?

{ ?

if (C('CRON_CONFIG_ON')){ ?

$this->checkTime() ?

}?

} ??

función privada checkTime() ?

{ ?

if (F('CRON_CONFIG')){ ?

$ crons = F('CRON_CONFIG'); ?

} else if (C('CRON_CONFIG')){ ?

$crons = C('CRON_CONFIG'); p>

}?

if (!empty($crons) && is_array($crons)) { ?

$actualización = false ?

$log = array(); ?

foreach ($crons as $key => $cron) { ?

if (empty($cron[2]) || $ _SERVER['REQUEST_TIME'] > $cron[2]) { ?

G('cronStart'); ?

R($cron[0]); >

G('cronEnd'); ?

$_useTime = G('cronStart', 'cronEnd', 6 ?

$cron[2] = $); _SERVER['REQUEST_TIME'] + $cron[1] ?

$crons[$key] = $cron;

$log[] = 'Cron:' $. clave .Runat ' . fecha('Y-m-d H:i:s') ' Usar ' $_useTime .' . "\r\n"; /p>

}?

} ??

if ($update) { ?

\Think\Log::write(implode(' ', $log)); ?

F('CRON_CONFIG', $crons ?

}?

} ??

<); p> } ??

} ??

Este código tiene el error solucionado, puedes copiarlo en el archivo " ThinkPHP/Library/Behavior/CronRunBehavior.class.php "

Guardar en .

②.tgs.php

Cree un nuevo archivo tags.php en la carpeta Application/Common/Conf para la configuración de etiquetas.

[php] vista simple

return array( ?

//'Elemento de configuración' = >' Valor de configuración' ?

'app_begin' =>array('Behavior\CronRunBehavior'), ?

); ?

③. p>

Configure la ejecución automática en el archivo config.php en la carpeta Application/Common/Conf.

[php] vista simple

return array( ?

/* Configuración de ejecución automática*/ ?

'CRON_CONFIG_ON' => true, // ¿Quieres habilitar la operación automática?

'CRON_CONFIG' => array( ?

'Probar la ejecución de tareas programadas' => array('Home/Index/crons', '5', ''), // Ruta (mismo formato que R), intervalo en segundos (0 significa ejecutar siempre), ¿hora de inicio especificada?

), ?

); ?

④、IndexController.class.php

en Aplicación/Inicio/Controlador/IndexController.class php. archivo para realizar tareas programadas.

[php] vista simple

/**? * =============== ======================== * Creado por Weibang Technology.

* Autor: ZhiHua_W? * Fecha: 22/9/2016 0005? * Hora: 11:20 am? * Proyecto: ¿ThinkPHP implementa tareas de ejecución programadas? * Energía: ¿Controlador del método de ejecución automatizada de tareas? * ======================================= ? */ ?

espacio de nombres Inicio\Controlador ?

usar Think\Controller

clase IndexController extiende Controlador ?

{ ?

/*?

índice de función pública(){ ?

$this->show('

:)

¡Bienvenido a ThinkPHP!

','utf-8');?

}?

*/ ?

Índice de función pública() ?

{ ?

$contenido = file_get_contents("test.txt"); ?

// ¿Imprime el contenido cada vez que se accede a esta ruta para ver la diferencia en el contenido?

var_dump($contents); /p>

salir;

$this->assign("contenido", $contenido ?

$this->display(); >

}?

// ¿Método de ejecución programado?

función pública crons() ?

{ ?

// ¿Escribir en el archivo?

file_put_contents("test.txt", date("Y-m-d H:i:s") ."¡Ejecutar tarea programada!"."\r\n
", FILE_APPEND ?

}?

} ??

?De esta manera, la tarea de ejecución programada que escribimos accederá a la URL de cualquier proyecto cada 5 segundos y luego verificará el archivo test.txt en el directorio raíz para comprender los cambios en el contenido.

Nota: Cuando cambia el intervalo, encontrará que no tiene efecto. Es por eso que necesita eliminar el archivo de caché en la carpeta Runtime/Data. El caché de intervalo se almacena en CRON_CONFIG. archivo .php.

?Dirección de descarga de archivos de proyecto puro:/detail/zhihua_w/9637267 Bienvenido a descargar y corregir.

2. Método dos: v3.2.2

Este método no es muy diferente del método uno.

①、tags.php

Cree un nuevo archivo tags.php en el directorio /Application/Common/Conf. (Esto es lo mismo que el método 1)

[php] ver plano

return array( ?

// 'Elemento de configuración' = >'Valor de configuración' ?

'app_begin' =>array('Behavior\CronRunBehavior'), ?

); p> ②. crons.php

Cree un nuevo archivo crons.php en el directorio /Application/Common/Conf. (Esto es diferente del método 1, preste atención a la distinción).

[php] vista simple

return array( ?

//miplan es lo que planeamos ejecutar regularmente Archivo de método, 2 es el intervalo, nextruntime es el siguiente tiempo de ejecución.

// ¿Este archivo se encuentra en el directorio /Application/Cron/?

'cron' => array ('myplan', 2, nextruntime), ?

); ?

③ myplan.php

Crea un archivo en /Application/Common. / directorio Nueva carpeta Cron y cree un nuevo archivo myplan.php en ella.

[php] ver plano

echo date("Y-m-d H:i:s").". ¡Ejecutar tareas programadas!" ."\r\n
"; ?

En este punto podemos acceder a la url del proyecto, y luego veremos que se ha generado el archivo ~crons.php en la Aplicación/ Directorio Runtime/, con el siguiente contenido:

[php] vista simple

matriz de retorno (?

'cron' => ?

matriz ( ?

0 => 'miplan', ?

1 => 60, ?

2 => 1398160322, ?

), ?

? ? > ?

¡Entonces podrás observar los resultados!