我的CRM中有一个邮箱选项,在邮箱中一切都很好,PHP IMAP函数获取数据需要很多时间,最初每个请求需要57秒,我已经记录了每个IMAP函数的加载时间日志,其中imap_open()函数需要16秒,之后我对每个控制器只使用一个imap_open()函数,如果我使用另一个控制器,我需要再次使用imap_open()函数,那么它将需要同样的时间。所以我决定用imap_open()函数的返回值来存储一个会话值,并在每个imap函数中传递返回流参数,而不是imap_open()函数的返回流,但这并不能很好地工作,因为imap_open()函数的返回值是'资源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);
?>
imap打开函数返回一个资源的句柄。这个资源不能被显示或可视化,这就是为什么你看到'资源id #61'。请看 https:/www.php.netmanualenlanguage.types.resource.php 获取更多关于资源的信息。
为了让传来的imap流工作,你需要重新打开该流,这可以通过调用imap_reopen函数来完成。
请看 https:/www.php.netmanualenfunction.imap-open.php 了解更多关于imap-reopen功能的信息。