php - 使用 PHP 和 FuelPHP MVC 框架在布尔值上调用成员函数 format()
问题描述
我知道这是一个常见错误,并且很可能已得到解答,但是我遇到的问题是,当执行该函数时,$down_time
当新网站在此行上脱机时,它会将变量返回为 null$diff_in_seconds = $now_time->getTimestamp() - $down_time->getTimestamp();
但是当我运行该函数时再次在我的终端中出现错误。基本上,它在将$down_time
变量更新到数据库之前将其返回为 null,因为首先执行更新查询,所以我对此感到困惑。我非常感谢您的帮助和指导,谢谢。
public static function run()
{
$dept_emails = array(
19 => 'test@email.co.uk'
);
$active_clients = Client::get_active_clients();
foreach ($active_clients as $client) {
$websites = $client->websites;
$services = $client->services;
foreach ($websites as $website) {
$website_url = $website->url;
$website_url_parse = parse_url($website_url);
$new_website_url = "https://" . $website_url;
$website_status = Client::get_website_status($new_website_url);
if(array_key_exists('host', $website_url_parse)) {
$website_url = $website_url_parse['host'];
}
if($website_status == false) {
$new_website_url = "http://" . $website_url;
$website_status = Client::get_website_status($new_website_url);
}
$now = date('Y-m-d H:i:s');
$now_time = DateTime::createFromFormat('Y-m-d H:i:s', $now);
$down_time = DateTime::createFromFormat('Y-m-d H:i:s', $website->down_at);
$result = DB::update('clients_websites')
->set(array(
'last_checked' => $now
))
->where('id', '=', $website->id)
->execute();
if ($website_status) {
// Website is back online, send email
if($website->down_at != null && $website_status == true){
$diff_in_seconds = $now_time->getTimestamp() - $down_time->getTimestamp();
// Website has been down for more than 5 minutes
if($diff_in_seconds >= 300){
Cli::write("Emailing: " . $website->url . " is back online");
$result = DB::update('clients_websites')
->set(array(
'down_at' => null,
'up_at' => date('Y-m-d H:i:s'),
))
->where('id', '=', $website->id)
->execute();
$notify_emails = array();
foreach ($services as $service)
{
$service_id = $service->service_id;
if (in_array($service_id, $dept_emails))
{
$notify_emails[] = $dept_emails[$service_id];
}
}
$message = "Hi " . $website->url . " is back online.";
$email = Model_Mail::send_email($dept_emails, "" . $website->url . " is back online", $message);
}
} else {
// Website is online insert up time in to DB
Cli::write("Online: " . $website->url . " is online");
$result = DB::update('clients_websites')
->set(array(
'down_at' => null,
'up_at' => date('Y-m-d H:i:s'),
))
->where('id', '=', $website->id)
->execute();
}
} else {
// Website is down insert down time in to DB
Cli::write("Offline: " . $website->url . " is offline");
if(is_null($website->down_at)){
$result = DB::update('clients_websites')
->set(array(
'down_at' => date('Y-m-d H:i:s')
))
->where('id', '=', $website->id)
->execute();
$query = DB::select('*')->from('clients_websites')->where('id', '=', $website->id)
->and_where_open()
->where('down_at', 'IS NOT', NULL)
->and_where_close()
->execute();
$down_time = DateTime::createFromFormat('Y-m-d H:i:s', $query['down_at']);
$down_time_email = $down_time->format('d-m-Y H:i:s');
$diff_in_seconds = $now_time->getTimestamp() - $down_time->getTimestamp();
if($diff_in_seconds >= 300){
Cli::write("Emailing: " . $website->url . " is offline");
$notify_emails = array();
foreach ($services as $service)
{
$service_id = $service->service_id;
$active = $service->end_date;
if (in_array($service_id, $dept_emails ) && ($active == null || $active > $now))
{
$notify_emails[] = $dept_emails[$service_id];
}
}
$message = "Hi " . $website->url . " has been down since " . $down_time_email . ".";
$email = Model_Mail::send_email($dept_emails, "" . $website->url . " is down", $message);
$result = DB::update('clients_websites')
->set(array(
'down_email_sent' => date('Y-m-d H:i:s')
))
->where('id', '=', $website->id)
->execute();
}
}
}
}
}
}
解决方案
在网站 foreach 的开头发现了这一点,我定义了一个新变量$time_now = date('Y-m-d H:i:s');
,然后在更新中用于查询 down_at 时间并分配给$down_time
变量。
$result = DB::update('clients_websites')
->set(array(
'down_at' => $time_now
))
->where('id', '=', $website->id)
->execute();
}
$down_time = DateTime::createFromFormat('Y-m-d H:i:s', $time_now);
推荐阅读
- java - 如何使用spring在java应用程序中调试406不可接受的错误
- java - 迁移到 Androidx 后发现重复的类
- html - 在 React 中插入 inputtextfield
- excel - 在 Google Studio 中可视化累积列数据
- html - HTML 脚本文本对齐/边框
- android-jetpack-compose - 在 Jetpack Compose 中导航时记住列表项状态
- javascript - 将 HTML 输出或 span 标签内的数据发送到 Google 表格
- css - 如何更改 sass 输出目录?
- reactjs - 如何关闭 React.js PWA 以应用更新?
- c# - 如何从组合框中永久删除文本选择突出显示?