当前位置: 首页 > 知识库问答 >
问题:

致命错误:允许的内存大小134217728字节已用尽(尝试分配32字节)[重复]

吴胜涝
2023-03-14

可能重复:
php中允许的内存大小为33554432字节(尝试分配43148176字节)

我在执行代码时遇到以下错误。

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 32 bytes)

尝试了ini_集('memory_limit','128M') 也可以,但不起作用。我的php.ini文件中的内存限制是128MB。请帮忙。

我正在添加代码。我是php新手,请帮助我解决这个问题。

<?php
require_once 'lib/swift_required.php';
$hostname = '{imap.abc.com:993/imap/ssl}INBOX';
$username = 'username';
$password = 'password';

$connection = imap_open($hostname,$username,$password) or die('Cannot connect to Tiriyo: ' . imap_last_error());
    ini_set('memory_limit', '256M');


function Message_Parse($id)

{

global $connection;

    if (is_resource($connection))
    {
        $result = array
        (
            'text' => null,
            'html' => null,
            'attachments' => array(),
        );


                $structure = imap_fetchstructure($connection, $id, FT_UID);
        //print_r($structure);
//array_key_exists — Checks if the given key or index exists in the array
        if (is_array($structure) && array_key_exists('parts', $structure))
        {
            foreach ($structure->parts as $key => $part)
            {
                if (($part->type >= 2) || (($part->ifdisposition == 1) && ($part->disposition == 'ATTACHMENT')))
                {
                    $filename = null;

                    if ($part->ifparameters == 1)
                    {
                        $total_parameters = count($part->parameters);

                        for ($i = 0; $i < $total_parameters; $i++)
                        {
                            if (($part->parameters[$i]->attribute == 'NAME') || ($part->parameters[$i]->attribute == 'FILENAME'))
                            {
                                $filename = $part->parameters[$i]->value;

                                break;
                            }
                        }

                        if (is_null($filename))
                        {
                            if ($part->ifdparameters == 1)
                            {
                                $total_dparameters = count($part->dparameters);

                                for ($i = 0; $i < $total_dparameters; $i++)
                                {
                                    if (($part->dparameters[$i]->attribute == 'NAME') || ($part->dparameters[$i]->attribute == 'FILENAME'))
                                    {
                                        $filename = $part->dparameters[$i]->value;

                                        break;
                                    }
                                }
                            }
                        }
                    }

                    $result['attachments'][] = array
                    (
                        'filename' => $filename,
                        'content' => str_replace(array("\r", "\n"), '', trim(imap_fetchbody($connection, $id, ($key + 1), FT_UID))),
                    );
                }

                else
                {
                    if ($part->subtype == 'PLAIN')
                    {
                        $result['text'] = imap_fetchbody($connection, $id, ($key + 1), FT_UID);
                    }

                    else if ($part->subtype == 'HTML')
                    {
                        $result['html'] = imap_fetchbody($connection, $id, ($key + 1), FT_UID);
                    }

                    else
                    {
                        foreach ($part->parts as $alternative_key => $alternative_part)
                        {
                            if ($alternative_part->subtype == 'PLAIN')
                            {
                                echo '<h2>' . $alternative_part->subtype . ' ' . $alternative_part->encoding . '</h2>';

                                $result['text'] = imap_fetchbody($connection, $id, ($key + 1) . '.' . ($alternative_key + 1), FT_UID);
                            }

                            else if ($alternative_part->subtype == 'HTML')
                            {
                                echo '<h2>' . $alternative_part->subtype . ' ' . $alternative_part->encoding . '</h2>';

                                $result['html'] = imap_fetchbody($connection, $id, ($key + 1) . '.' . ($alternative_key + 1), FT_UID);
                            }
                        }
                    }
                }
            }
        }

        else
        {
            $result['text'] = imap_body($connection, $id, FT_UID);
        }

        $result['text'] = imap_qprint($result['text']);
        $result['html'] = imap_qprint(imap_8bit($result['html']));

        return $result;
        //echo $result;
    }

    return false;
}
 $emails = imap_search($connection,'ALL');
rsort($emails);

 foreach($emails as $email_number) {

$result = Message_Parse($email_number);
//print_r($structure);
   // echo $result['text'];
    //echo $result['html'];
    //echo $result['attachments'];

// Create the Transport
$transport = Swift_MailTransport::newInstance();
// Create the Mailer using your created Transport
$mailer = Swift_Mailer::newInstance($transport);

// Create a message
$message = Swift_Message::newInstance('Bismillahhirrahmanirraheem')
  ->setFrom(array('as@aaa.com' => 'jf faz'))
  ->setTo(array('acc@aa.com'))
  ->setBody($result['text'], 'Here is the message itself');

$result1 = $mailer->send($message);


?>

共有2个答案

贡英华
2023-03-14

128M==134217728,你看到的数字。

内存限制正常工作。当它说它试图分配32个字节时,这是失败前最后一次操作请求的数量。

您是否正在构建任何大型数组或读取大型文本文件?如果是这样,记得释放你不再需要的任何内存,或者将任务分解成更小的步骤。

薛云瀚
2023-03-14

试一试ini_set('memory_limit','256M')

134217728字节=128 MB

或者重写代码以减少内存消耗。

 类似资料: