Hi Mark,

I was doing some php coding the other day and did something simular as,

The following code should echo out the Unique ID's generated by UIDL on the
IMAP/POP Server, but echo's out a sequencial number starting with 1
instead...  It should probably produce ID's like, 3afffb5300000001,
3afffb5300000002, etc. etc.

$mbox   = imap_open ("{your.pop3.host:143}", "username", "password");
$headers        = imap_headers ($mbox);

if ($headers == true) {
        while (list ($key,$val) = each ($headers)) {
                echo imap_uid($mbox, $key);
        }
} else {
        echo "No messages in inbox";
}



Since this was producing a sequencual number ("1,2,3,4,5"), same as the
message number, I though there was a bug in php, so I checked the
ext/imap/php_imap.c and found the following code,

/* {{{ proto int imap_uid(int stream_id, int msg_no)
   Get the unique message id associated with a standard sequential message
number */
PHP_FUNCTION(imap_uid)
{
        zval **streamind, **msgno;
        int ind, ind_type, msgindex;
        pils *imap_le_struct;

        if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &streamind,
&msgno) == FAILURE) {
                ZEND_WRONG_PARAM_COUNT();
        }

        convert_to_long_ex(streamind);
        convert_to_long_ex(msgno);

        ind = Z_LVAL_PP(streamind);

        imap_le_struct = (pils *) zend_list_find(ind, &ind_type);

        if (!imap_le_struct || !IS_STREAM(ind_type)) {
                php_error(E_WARNING, "Unable to find stream pointer");
                RETURN_FALSE;
        }

        msgindex = Z_LVAL_PP(msgno);
        if ((msgindex < 1) || ((unsigned) msgindex >
imap_le_struct->imap_stream->nmsgs)) {
                php_error(E_WARNING, "Bad message number");
                RETURN_FALSE;
        }

        RETURN_LONG(mail_uid(imap_le_struct->imap_stream,
Z_LVAL_PP(msgno)));
}
/* }}} */


When reading this code, it still baffles me that I don't get the correct
UID's, the UIDL produces, I came to the fact that it must be the c-client..

The bug seems to be in src/c-client/mail.h line 1364 ... mail_uid returns an
unsigned long

// Mattias


-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to