¿Cómo establecer un retraso de tiempo de 24 horas en una función en PHP?
-
25-10-2019 - |
Pregunta
Tengo una aplicación web escrita en PHP5.
La aplicación permite a los usuarios registrarse y me gustaría retrasar cuando se enviarán los diversos detalles, como contraseña y enlaces. Me gustaría que el correo electrónico que contenga esta información vaya a 24 h después de que un usuario se haya resistido.
¿Cómo puedo ejecutar la función que enviará el correo electrónico después de que haya pasado 24 horas?
Solución
Dependería de cuán precisas deben ser las '24' horas, pero algo como el siguiente enfoque debería funcionar.
Cree una tabla para mantener los registros de los usuarios o adaptar una tabla existente para mantener un registrationTime
columna. Hacer esta columna nullable DATETIME
Lo usará para mantener el HH: MM del registro de usuarios. La tabla nueva (o modificada) también debe tener los datos relevantes para los correos electrónicos, o un identificador común para los usuarios, lo que permite seleccionar los datos correctos.
Finalmente, configuraría un trabajo cron para consultar la base de datos cada x mins
y seleccione los usuarios que se registraron en y mins
de 24 horas. Dónde x
es la frecuencia que desea que se ejecute el trabajo y y
Sería un cierto grado de tolerancia para cuán cerca de las 24:00 horas había transcurrido.
Para cualquier resultado, construiría y enviaría los correos electrónicos. Finalmente, establecería una bandera para demostrar que el usuario había sido tratado, una buena manera estaría configurando el registrationTime
A NULL para todos los usuarios que han enviado el correo electrónico.
Aquí hay algunos enlaces para ayudarlo:
Compare el tiempo en SQL Server¿Cómo puedo comparar el tiempo en SQL Server?
Presentando Cronhttp://www.sitePoint.com/introducing-cron/
Otros consejos
Configuraría la mesa de la base de datos que maneja su cola de correo electrónico. Esta tabla puede tener una columna que especifica cuando cada fila, correspondiente a un correo electrónico, se colocó en cola. Puede tener un trabajo de Cron en funcionamiento, digamos cada hora más o menos, que verifica si las 24 horas han transcurrido.
email_type | to | data
--------------------------------------------------------------------------
registration | fred@stuff.com | {first_name: "Fred", last_name: "Stuff" }
Esta solución es flexible porque puede tener otros tipos de correos electrónicos que desea retrasarse por diferentes cantidades de tiempo. Puede agregar una columna que indique qué tipo de correo electrónico y su código maneja cada tipo de manera diferente.
Este cronjob correrá cada hora:
0 * * * * php check_mail_queue.php
Puede agregar una columna que indique si se ha enviado un correo electrónico o simplemente eliminar la fila. Además, si va a tener datos personalizados en cada correo electrónico, sea serializa la matriz, el hash, el diccionario, lo que sea, y almacene también en una columna en la tabla.