php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #64271 imap_search has a bug
Submitted: 2013-02-21 21:11 UTC Modified: 2015-08-29 13:38 UTC
From: rixsta at hotmail dot com Assigned: cmb (profile)
Status: Not a bug Package: IMAP related
PHP Version: Irrelevant OS: Cent OS
Private report: No CVE-ID: None
View Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
If you reported this bug, you can edit this bug over here.
(description)
Block user comment
Status: Assign to:
Package:
Bug Type:
Summary:
From: rixsta at hotmail dot com
New email:
PHP Version: OS:

 

 [2013-02-21 21:11 UTC] rixsta at hotmail dot com
Description:
------------
---
From manual page: http://www.php.net/function.imap-search#refsect1-
function.imap-search-description
---

The following example should highlight this bug clearly:
$newCount = count(imap_search($imap_stream, 'UNSEEN'));

We use the function above to count the number of 'UNSEEN' messages in the 
mailbox folders. It works fine until we have read all messages and in this case 
we would expect the $newCount to be 0. However it remains at 1!  We have been 
able to work around this bug with the following fix/function (see test script)



This returns the count as we would expect.  If you do address this bug we would 
appreciate a quick email and advise on the version of PHP it will be included 
in.

Many thanks.

Test script:
---------------
$newCount = $this->count_unread_email($imap_stream);

  function count_unread_email($imap_stream) {
      $count = 0;
      if (!$imap_stream) {
          echo "Error";
      } else {
          $headers = imap_headers($imap_stream);
          foreach ($headers as $mail) {
              $flags = substr($mail, 0, 4);
              $isunr = (strpos($flags, "U") !== false);
              if ($isunr)
              $count++;
          }
      }
      return $count;
  }

Expected result:
----------------
We expect the function to return 0 when there are no remaining 'UNSEEN' messages, 
not 1.

Actual result:
--------------
We receive a 1 even though there are 0 'UNSEEN' messages remaining in our mailbox 
folder.

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2013-02-24 15:50 UTC] inefedor at gmail dot com
This function returns false if no messages were found. Yeah, it's a bit tricky, but you just need to do:

$items = imap_search($imap_stream, 'UNSEEN');
$newCount = $items === false ? 0 : count($items);
 [2015-08-29 13:38 UTC] cmb@php.net
-Status: Open +Status: Not a bug -Assigned To: +Assigned To: cmb
 [2015-08-29 13:38 UTC] cmb@php.net
> This function returns false if no messages were found.

Indeed. And count(false) === 1.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sat Dec 21 17:01:58 2024 UTC