PHP 无限循环
Infinite loop on while PHP
首先,我不是程序员(只是略懂PHP)。
我制作了一个带有事件列表的网站,每个月事件的 select 字段过滤 Ajax 加载。
该代码完美运行了大约 3 个月。但是 5 天前突然停止工作并开始生成无限循环。
我调试了代码,发现 "while" 循环是问题所在。
我试图理解为什么这在一段时间内工作得很好,然后就不行了。 (无限循环使服务器崩溃)。
这个函数只给出下个月的第一天。一切正常。
function first_day_next_month($month, $year){
$month = str_replace("0", "", $month);
if ($month == 12){
return ($year+1)."0101";
}else{
return $year.str_pad($month+1, 2, "0", STR_PAD_LEFT )."01";
}
}
这个,为 select 字段生成 "options":
function ddown(){
$start = strtotime("10 December 2017");
$end = strtotime("+3 months");
$current = $start;
$meses = array(
"Jan" => "enero",
"Feb" => "febrero",
"Mar" => "marzo",
"Apr" => "abril",
"May" => "mayo",
"Jun" => "junio",
"Jul" => "julio",
"Aug" => "agosto",
"Sep" => "septiembre",
"Oct" => "octubre",
"Nov" => "noviembre",
"Dec" => "diciembre"
);
$o = "";
$selected = "";
$cls = " class=\"gray-out\"";
while ($current < $end){
if(date("m", $current) == date("m", strtotime("today")) AND date("Y", $current) == date("Y", strtotime("today"))){
$selected = " selected=\"selected\"";
$cls = "";
}else{
$selected = "";
}
$current = strtotime(first_day_next_month( date("m", $current), date("Y", $current) ));
}
return $o;
}
我发现这段代码现在正在生成无限循环:
while ($current < $end){
if(date("m", $current) == date("m", strtotime("today")) AND date("Y", $current) == date("Y", strtotime("today"))){
$selected = " selected=\"selected\"";
$cls = "";
}else{
$selected = "";
}
$current = strtotime(first_day_next_month( date("m", $current), date("Y", $current) ));
}
$current 变量暂时没有更新。据我了解,这应该是从 2017 年 12 月 10 日到今天+3 个月,并输出这些日期之间每个月的 "option"。
关于如何解决这个问题有什么建议吗?
(对不起我的英语)。
谢谢!
在你的 first_day_next_month 函数中你有:
$month = str_replace("0", "", $month);
这会将 10 替换为 1,这将在每年 10 月恢复到 1 月。
首先,我不是程序员(只是略懂PHP)。 我制作了一个带有事件列表的网站,每个月事件的 select 字段过滤 Ajax 加载。
该代码完美运行了大约 3 个月。但是 5 天前突然停止工作并开始生成无限循环。
我调试了代码,发现 "while" 循环是问题所在。 我试图理解为什么这在一段时间内工作得很好,然后就不行了。 (无限循环使服务器崩溃)。
这个函数只给出下个月的第一天。一切正常。
function first_day_next_month($month, $year){
$month = str_replace("0", "", $month);
if ($month == 12){
return ($year+1)."0101";
}else{
return $year.str_pad($month+1, 2, "0", STR_PAD_LEFT )."01";
}
}
这个,为 select 字段生成 "options":
function ddown(){
$start = strtotime("10 December 2017");
$end = strtotime("+3 months");
$current = $start;
$meses = array(
"Jan" => "enero",
"Feb" => "febrero",
"Mar" => "marzo",
"Apr" => "abril",
"May" => "mayo",
"Jun" => "junio",
"Jul" => "julio",
"Aug" => "agosto",
"Sep" => "septiembre",
"Oct" => "octubre",
"Nov" => "noviembre",
"Dec" => "diciembre"
);
$o = "";
$selected = "";
$cls = " class=\"gray-out\"";
while ($current < $end){
if(date("m", $current) == date("m", strtotime("today")) AND date("Y", $current) == date("Y", strtotime("today"))){
$selected = " selected=\"selected\"";
$cls = "";
}else{
$selected = "";
}
$current = strtotime(first_day_next_month( date("m", $current), date("Y", $current) ));
}
return $o;
}
我发现这段代码现在正在生成无限循环:
while ($current < $end){
if(date("m", $current) == date("m", strtotime("today")) AND date("Y", $current) == date("Y", strtotime("today"))){
$selected = " selected=\"selected\"";
$cls = "";
}else{
$selected = "";
}
$current = strtotime(first_day_next_month( date("m", $current), date("Y", $current) ));
}
$current 变量暂时没有更新。据我了解,这应该是从 2017 年 12 月 10 日到今天+3 个月,并输出这些日期之间每个月的 "option"。
关于如何解决这个问题有什么建议吗?
(对不起我的英语)。
谢谢!
在你的 first_day_next_month 函数中你有:
$month = str_replace("0", "", $month);
这会将 10 替换为 1,这将在每年 10 月恢复到 1 月。