【问题标题】:Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 132120600 bytes)致命错误:允许的内存大小为 268435456 字节已用尽(尝试分配 132120600 字节)
【发布时间】:2020-07-13 07:19:04
【问题描述】:

我不确定我哪里出错了,我不知道该怎么做,如果有人可以提供帮助,那将非常有帮助。

我得到的错误如下所示:

致命错误:第 43 行的 D:\wamp\www\testing\calendar.php 中允许的内存大小为 268435456 字节已用尽(试图分配 132120600 字节) - https://.......com/cb71e74783b362ec2a55752c60dcbd32

程序的代码是:

<?php
ini_set('memory_limit', '256M');
function build_calendar($month,$year){

    $daysOfWeek = array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');
    $firstDayOfMonth = mktime(0,0,0,$month,1,$year);
    $numberDays = date('t'.$firstDayOfMonth);
    $dateComponents = getdate($firstDayOfMonth);
    $monthName = $dateComponents['month'];
    $dayOfWeek = $dateComponents['wday'];

    $dateToday = date('Y-m-d');

    $calendar = "<table class='table table-bordered'>";
    $calendar.= "<center><h2>$monthName $year</h2></center>";

    $calendar.="<tr>";

    foreach($daysOfWeek as $day){
        $calendar.="<th class='header'>$day</th>";
    }

    $calendar.= "</tr><tr>";

    if($dayOfWeek > 0){
        for($k=0;$k<$dayOfWeek;$k++){
            $calendar.="<td></td>";
        }
    }

    $currentDay = 1;
    $month = str_pad($month, 2, '0', STR_PAD_LEFT);

    while($currentDay <= $numberDays){

        if($dayOfWeek == 7){
            $dayOfWeek = 0;
            $calendar.="</tr><tr>";
        }

        $currentDayRel = str_pad($month, 2, '0', STR_PAD_LEFT);
        $date = "$year-$month-$currentDayRel";
        $calendar.= "<td><h4>$currentDay</h4>";
        $calendar.="</td>";
        $currentDay++;
        $dayOfWeek++;
    }
    if($dayOfWeek != 7){
        $remainingDays = 7 - $dayOfWeek;
        for($i=0;$i<$remainingDays;$i++){
            $calendar.= "<td></td>";
        }
    }

    $calendar.="</tr>";
    $calendar.="</table>";

    echo $calendar;


}
?>

<html>
<head>
    <meta name="viewport" content="width=device,inital-scale=1.0">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css">
    </head>
<body>
    <div class="container">
        <div class="row">
            <div class="col-md-12">
                <?php
                $dateComponents = getdate();
                $month = $dateComponents['mon'];
                $year = $dateComponents['year'];
                echo build_calendar($month, $year)
                ?>
            </div>
        </div>
    </div>
    </body>
</html>

错误消息中列出的第 43 行是由代码组成的行:$calendar.= "&lt;td&gt;&lt;h4&gt;$currentDay&lt;/h4&gt;";

【问题讨论】:

  • 似乎是无限循环。在 while($currentDay &lt;= $numberDays){ 之前检查 $numberDays 的值

标签: php


【解决方案1】:

在脚本的开头,您在 date() 上使用点而不是逗号:

$numberDays = date('t'.$firstDayOfMonth);

虽然它实际上应该是:

$numberDays = date('t', $firstDayOfMonth);

这会导致第 34 行的 while 循环无限发生。

【讨论】:

    猜你喜欢
    • 2020-04-10
    • 2014-03-07
    • 2014-02-07
    • 2014-09-27
    • 2020-09-06
    • 2019-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多