ID:               20871
 Updated by:       [EMAIL PROTECTED]
 Reported By:      [EMAIL PROTECTED]
-Status:           Open
+Status:           Feedback
 Bug Type:         IMAP related
 Operating System: win2K
 PHP Version:      4.3.0-dev
 New Comment:

Please try using this CVS snapshot:

  http://snaps.php.net/php4-STABLE-latest.tar.gz
 
For Windows:
 
  http://snaps.php.net/win32/php4-win32-STABLE-latest.zip




Previous Comments:
------------------------------------------------------------------------

[2003-01-26 12:34:10] [EMAIL PROTECTED]

Yes. The crash happens with any e-mail. Does not depend on the e-mail
encoding or charset or whatever. It happens, I suppose, in
imap_fetchbody, the function I use to get the raw e-mail headers (the
used to fall into section #0 of the e-mail body, no matter if mail had
any parts). 
As to the script - the PHP-file I use to test the bug is constantly
growing as I add more debug output to find the exact point where the
'crash' occurs.

As to the servers - there are many if them. WinRoute's internal pop3
server (my local), and some other servers on the net (mail.ru,
goals.ru, valuehost.ru) - these are the servers I tried. 

Local testing reports that the mails get transferred to PHP. Even twice
(so if the mailbox occupies 100Kbytes of mail for user, the total
session traffic would be 200K).

Here is the script I use now (still crashiong with fetchbody):

<?
ini_set("display_startup_errors","1");
$f=fopen('log','w+');

$enc[0]="7BIT";
$enc[]="8BIT";
$enc[]="BINARY";
$enc[]="BASE64";
$enc[]="QUOTED-PRINTABLE";
$enc[]="OTHER";

$port="110";

$server="localhost";
$uname="test";
$passw="1234";

//phpinfo();

 function desc_arr($arr,$prefix)
 { 
 global $f;

  foreach($arr as $key=>$value)
   { 
    echo "$prefix [$key] = $value <br>";
    fputs($f, "$prefix [$key] = $value <br>\n");


    if (is_array($value))desc_arr($value, "$prefix [$key]");
    if (is_object($value))desc_obj($value,"$prefix [$key]");
   }
  }

function desc_obj($obj, $prefix)
 { 
  global $f;
  foreach($obj as $key=>$value)
   { 
    echo "$prefix -> $key = $value <br>";
    fputs($f, "$prefix -> $key = $value <br>\n");

    if (is_array($value))desc_arr($value, "$prefix -> $key");
    if (is_object($value))desc_obj($value,"$prefix -> $key");
   }
  }
   

fputs($f, "connecting to $server<br>\n");
echo "connecting to $server<br>";

$mbox = imap_open ("{".$server.":".$port."/pop3}INBOX", "$uname",
"$passw");



echo imap_last_error()."<br>";
fputs($f,imap_last_error()."<br>\n");

echo "Retrieving messages...<br>";
fputs($f, "Retrieving messages...<br>");

$totmsg=imap_num_msg($mbox);

 $check = imap_mailboxmsginfo($mbox);
 
if($check) {
    print "Date: "    . $check->Date    ."<br>\n" ;
    fputs($f, "Date: "    . $check->Date    ."<br>\n" );
    print "Driver: "  . $check->Driver  ."<br>\n" ;
    print "Mailbox: " . $check->Mailbox ."<br>\n" ;
    print "Messages: ". $check->Nmsgs   ."<br>\n" ;
    print "Recent: "  . $check->Recent  ."<br>\n" ;
    print "Unread: "  . $check->Unread  ."<br>\n" ;
    print "Deleted: " . $check->Deleted ."<br>\n" ;
    print "Size: "    . $check->Size    ."<br>\n" ;
} else {
    print "imap_check() failed: ".imap_last_error(). "<br>\n";
    fputs($f,"imap_check() failed: ".imap_last_error(). "<br>\n");
}


if ($totmsg>0) {echo "some messages found<br>";fputs($f,"some messages
found<br>\n");}
if ($totmsg>0) echo "some messages found<br>";
if ($totmsg>0) echo "some messages found line 3<br>";
$headers=imap_search($mbox, "FROM @", 0);//


if (is_array($headers))
 {echo "Total messages found: ".count($headers)."/$totmsg<br>";
  fputs($f,"Total messages found: ".count($headers)."/$totmsg<br>\n");
  desc_arr($headers, "headers");

  }

    while (list ($key,$val) = each ($headers)) {
     
        
        unset($hdr);
        $hdr=imap_headerinfo($mbox, ($val));
        desc_obj($hdr, "HDR:");
        
        echo "Plaintext is:<br><code>".nl2br(imap_body($mbox,
($val)))."</code><br>";
        fputs($f,"Plaintext is:<br><code>".nl2br(imap_body($mbox,
($val)))."</code><br>\n");
        
        
        
        echo "<hr>...Fetching structure<br>";
        fputs($f,"<hr>...Fetching structure<br>\n");


        unset($struc);
        $struc=imap_fetchstructure($mbox,($val));

        echo "struc assigned<br>";
        fputs($f, "struc assigned\n");

        desc_obj($struc, "structure");
   

   if (isset($struc->parts))    //There are some parts
    { 
     echo "<b>there are ".count($struc->parts)." parts in the
message</b><br>";
     fputs($f, "<b>there are ".count($struc->parts)." parts in the
message</b><br>\n");


      foreach($struc->parts as $num=>$part)
       { 
        echo "foreach struc-parts started<br>";
        fputs($f, "foreach struc-parts started<br>\n");

        echo "Part $num<br>";
        fputs ($f, "Part $num<br>\n");

        if ($part->subtype=='PLAIN')
        {
          echo "part subtype=PLAIN<br>";
          fputs($f, "part subtype=PLAIN<br>\n");

         $msg=imap_fetchbody($mbox,$key, $num); // ***CRASH *** //



         echo "The text is ".nl2br($msg)." <br>";
         fputs($f,"The text is ".nl2br($msg)." <br>\n");
        }
        $filename="";
        if ($part->ifdisposition==1)
         {
          echo "Part $num has disposition $part->disposition<br>";
          fputs($f, "Part $num has disposition
$part->disposition<br>\n");

          if ($part->ifdparameters==1)
           {
            echo "there are Dparameters for it<br>";
            fputs($f, "there are Dparameters for it<br>\n");

            foreach ($part->dparameters as $dpname=>$dpval)
             {
              if ($dpval->attribute=="FILENAME"){
              echo "Filename is ".($filename=$dpval->value)."<br>";
              fputs($f, "Filename is
".($filename=$dpval->value)."<br>\n");
              }
             }
           }
         }

       }
   
    }
    else
    {
     echo "<b>Seems this message has the only
part</b>:<br><code>".imap_body($mbox, ($val))."</code><br>";
     fputs($f, "<b>Seems this message has the only
part</b>:<br><code>".imap_body($mbox, ($val))."</code><br>\n");
    }

    echo "<hr>Body:<br>".imap_body($mbox, ($val))."<br><hr>";
    fputs($f, "<hr>Body:<br>".imap_body($mbox, ($val))."<br><hr>\n");

    echo "Part0 if exists:<br>";
    fputs($f, "Part0 if exists:<br>\n");
    echo "Key: $key, val: $val<br>";
    $alerts=imap_alerts();
    if(is_array($alerts))echo "Here we have
alerts:<br>".desc_arr($alerts," ALRT:");
    echo "Alerts:".$alerts;

    echo "lalala".imap_fetchheader($mbox,$key+1);
//    fputs($f, "\nlalala".imap_fetchbody($mbox,$key, 0)); //commented
out because of crash
 }

imap_close($mbox);

?>

------------------------------------------------------------------------

[2003-01-18 01:11:18] [EMAIL PROTECTED]

Does the crash happen with any email you're trying to get?
And please add short example script here too and information
about the imap/pop3 server you're connecting to.
(Version, etc.)



------------------------------------------------------------------------

[2002-12-23 09:03:21] [EMAIL PROTECTED]

imap_fetchbody() fails. 

I had to add some code to the script to make it write all it's output
to some file on disk (i simply cloned "echo" with "fputs").

Now it seems that the imap_fetchbody() function makes apache restart
(and PHP - to crash). Sorry for previous mishinting.

------------------------------------------------------------------------

[2002-12-19 16:37:35] [EMAIL PROTECTED]

Sorry for bothering. Any good news on the subject?

------------------------------------------------------------------------

[2002-12-11 05:48:21] [EMAIL PROTECTED]

<?
$port="110";
$server="localhost";
$uname="test";
$passw="1234";

phpinfo(); //to start the output

$mbox = imap_open ("{".$server.":".$port."/pop3}INBOX", "$uname",
"$passw");
echo imap_last_error()."<br>";

$totmsg=imap_num_msg($mbox); //still works
if ($totmsg>0) echo "some messages found<br>";

$headers=imap_search($mbox, "FROM @", 0);//fails
$headers=imap_headers($mbox);//fails

//any of above would 'crash'.


if (is_array($headers))echo "Total messages found:
".count($headers)."/$totmsg<br>";
?>

------------------------------------------------------------------------

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
    http://bugs.php.net/20871

-- 
Edit this bug report at http://bugs.php.net/?id=20871&edit=1

Reply via email to