1

我的 CRM 中有一个邮箱选项,在邮箱中一切正常,PHP IMAP 函数获取数据需要很长时间,最初每个请求需要 57 秒,我已经记录了每个 IMAP 函数的加载时间日志,有 imap_open() 函数需要 16 秒,之后我只为每个控制器使用一个 imap_open() 函数,如果我使用另一个控制器我需要再次使用 imap_open() 函数,那么它将需要相同的时间,所以我决定了取一个 imap_open() 函数的返回值来存储一个会话值,并在每个 imap 函数中传递返回流参数而不是 imap_open() 函数返回流,它不能正常工作,因为 imap_open() 函数返回值是 'Resource id #61' 如果我将此值传递给 imap 流参数,它将无法检索我的 imap 函数

现在,我需要帮助如何获得 imap_open() 函数的确切流值

<?php  
    $start_time = date('H:i:s');  
    $data['per_page'] = 50; //$this->config->item("per_page");
    $data['start'] =  1;
    $data['default_email'] = $this->input->post('email_id');
    $email_details = $this->Mailbox_model->email_by_id($data['default_email']);

    $imap_host  = $email_details->smtp_host.':993'; // IMAP host address
    $imap_flags = "/imap/ssl/novalidate-cert"; // IMAP Flags
    $imap_user  = $email_details->email_ID; // IMAP username
    $imap_pass  = decryptthis($email_details->password, 'Rajexim2020'); // IMAP password
    $ima_time_1s = date('H:i:s');
    $imap_open_start = date('H:i:s');
    if ($email_details->imap_stream == '') {
      $inbox = @imap_open("{".$imap_host.$imap_flags."}INBOX", $imap_user, $imap_pass)or die('Cannot connect to Gmail: ' . imap_last_error());
      $update_stream_to_db = $this->Mailbox_model->update_stream_to_db($email_details->email_detail_id,$inbox);
    }
    else {
      $inbox = $email_details->imap_stream;
    }



    $imap_open_end = date('H:i:s');
    $data['tot_mail_list_count'] = imap_all_inbox_mail_count($inbox);

?>
4

1 回答 1

1

imap open 函数返回处理资源的句柄。此资源无法显示或可视化,这就是您看到“资源 id #61”的原因。有关资源的更多信息,请参阅https://www.php.net/manual/en/language.types.resource.php 。

为了使传递的 imap 流工作,您需要重新打开流,这可以通过调用 imap_reopen 函数来完成。

有关 imap-reopen 函数的更多信息,请参阅https://www.php.net/manual/en/function.imap-open.php

于 2020-06-03T10:28:02.107 回答