My question has differently been answered in another post, but I just can't make things work with my own code - so here it comes:
I am making a reminder function
, that is supposed to be executed by cron job and send out an reminder email
to remind client about an event.
I will use info from mysql, sort out the events that is going to be reminded based on X number of hours and the reminder time frame (if the cron job runs every 15 minutes, the code must find all event starting in the minutes between each cron job run)
.
All the above works just fine, and I do get the echo "test1";
from test-cron.php . But the email from test-cron-email-reminder.php is not send, and I do not get the echo "test2";
printed out.
I seems like my include in test-cron.php does not work. Why?
If I put it all together in one php file it works fine.
When this is ready, I will make a similar code to send out sms reminder with twilio . That as well works fine, as long as the whole code is in one file.
Both php files are in the same folder.
Here is my code:
TEST-CRON.PHP
<?php
require_once 'Connect_db.php';
require 'configuration.php';
// Get info from SQL
$result = performQuery("SELECT mindful_pbbooking_events.service_id,
mindful_pbbooking_treatments.id,
mindful_pbbooking_events.id, name,
customfields_data,
dtstart, dtend, date_created
FROM mindful_pbbooking_events,
mindful_pbbooking_treatments
WHERE
mindful_pbbooking_events.service_id=mindful_pbbooking_treatments.id;
");
while ($row = mysqli_fetch_array($result)) {
//Split customfields_data and collect the informaton from created array (just making things a little bit more easy to work with)
$dataArray = $row[customfields_data];
$dataArrayDecoded = json_decode($dataArray,TRUE);
$clientFname = $dataArrayDecoded[0][data];
$clientLname = $dataArrayDecoded[1][data];
$clientEmail = $dataArrayDecoded[2][data];
$clientMobile = $dataArrayDecoded[3][data];
$clientGender = $dataArrayDecoded[4][data];
//Collect information from customfields_data (more making things a little bit more easy to work with)
$eventId = $row[mindful_pbbooking_events.id];
$eventStart = $row[dtstart];
$eventDate = date("Y-m-d", strtotime($eventStart));
$eventTime = date("H:i", strtotime($eventStart));
$eventEnd = $row[dtend];
$service = $row[name];
$eventCreated = $row[date_created];
//Time calculation to find out who to send reminder to
$eventtimestring = strtotime("$eventStart");
$nowtimestring = strtotime("now");
$reminderdurationstring = $reminderDuration*60;
$startstring = $nowtimestring + $hours*3600;
$endstring = $startstring + $reminderdurationstring;
while (($startstring <= $eventtimestring) && ($eventtimestring < $endstring)) {
// Just a little test to find out where things goes wrong
echo "test1";
// ****** HERE IT COMES ******
// The test-cron-email-reminder.php is the file with the code I want to include
include 'test-cron-email-reminder.php';
}
}
?>
TEST-CRON-EMAIL-REMINDER-PHP
<?php
require_once 'Connect_db.php';
require 'configuration.php';
// Just a little test to find out where things goes wrong
echo "test2";
$to = "$clientEmail";
$subject = "The reminder mail body";
$message = "
<html>
<head>
<title>The reminder mail title</title>
</head>
<body>
<p>The reminder mail body</p>
</body>
</html>
";
// To send HTML mail, the Content-type header must be set
$headers[] = 'MIME-Version: 1.0';
$headers[] = 'Content-type: text/html; charset=iso-8859-1';
// Additional headers
$headers[] = 'To: $clientFname <$clientEmail>';
$headers[] = 'From: Mindful <mail@mail.com>';
// Mail it
mail($to, $subject, $message, implode("\r\n", $headers));
break;
?>
The problem is in TEST-CRON.PHP -- don't put an include
inside a while
loop, unless you really want to include that file over and over. (You don't)
while (($startstring <= $eventtimestring) && ($eventtimestring < $endstring)) {
// Just a little test to find out where things goes wrong
echo "test1";
...
/// DON'T DO THIS
include 'test-cron-email-reminder.php';
/// DON'T DO THIS
}
Instead, do this. In TEST-CRON.PHP:
<?php
require_once 'Connect_db.php';
require 'configuration.php';
require_once 'TEST-CRON-EMAIL-REMINDER-PHP'
...
while (($startstring <= $eventtimestring) && ($eventtimestring < $endstring)) {
// Just a little test to find out where things goes wrong
echo "test1";
...
doSomething(); // Defined in TEST-CRON-EMAIL-REMINDER-PHP
break;
}
In TEST-CRON-EMAIL-REMINDER-PHP:
<?php
require_once 'Connect_db.php';
require 'configuration.php';
// And wrap all this stuff up in a function that
// you can call from within your while() loop.
func doSomething() {
// Just a little test to find out where things goes wrong
echo "test2";
$to = "$clientEmail";
$subject = "The reminder mail body";
$message = "
<html>
<head>
<title>The reminder mail title</title>
</head>
<body>
<p>The reminder mail body</p>
</body>
</html>
";
// To send HTML mail, the Content-type header must be set
$headers[] = 'MIME-Version: 1.0';
$headers[] = 'Content-type: text/html; charset=iso-8859-1';
// Additional headers
$headers[] = 'To: $clientFname <$clientEmail>';
$headers[] = 'From: Mindful <mail@mail.com>';
// Mail it
mail($to, $subject, $message, implode("\r\n", $headers));
}
?>
require 'configuration.php'; in TEST-CRON-EMAIL-REMINDER-PHP may produce redeclaration error
try require_once 'configuration.php'; to prevent it
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.