ID: 10026
User Update by: [EMAIL PROTECTED]
Old-Status: Closed
Status: Open
Bug Type: Scripting Engine problem
Operating system: RH Linux 6.1
PHP Version: 4.0.4pl1
Description: For loop always execute

I have solved the problem in another way. BUT; The value of $c *IS* 0 when entering 
for loop and the stange behavior of the for-loop explained above happens. I think it 
maybe is other part of the code BEFORE this function who make som "crash" in the 
system so this happen. I've never seen this before neither after so i dont know what 
more to say :)
But for sure it was a strange behavior of PHP in this code. We are two persons coding 
this system and we both spent a lot of time trying to find out what happens (with echo 
and other debug code) but we could'nt find out.
We had to drop the for-loop because it didnt work as it should.

Previous Comments:

[2001-06-17 05:06:32] [EMAIL PROTECTED]
I have spent twenty mins trying to recreate this, before you start your for loop 
please check the value of $c (echo it out etc) and make sure its what you expected. I 
very much doubt this is a bug, if the value of $c is indeed 0 then please reopen this 

- James


[2001-04-04 08:34:26] [EMAIL PROTECTED]
I'm sorry, but all other script i make work ok. Its just this one that cause the 

I dont know how to make another script for you as i cant reproduce the error in any 5 
line of code.

- Svein


[2001-04-04 08:28:35] [EMAIL PROTECTED]
I asked for 'self-containing' script. ie. one that doesn't
need anything outside but works as is. This example script
you added is useless and can not be used to reproduce anything. Please create a SHORT 
(max 5 lines) script that doesn't work.



[2001-04-04 06:26:22] [EMAIL PROTECTED]
The parameter passed to the function i prev. post is the stricture returned from 

- Svein


[2001-04-04 06:24:05] [EMAIL PROTECTED]
I post the function that cause the problem.
Its the for-loop int the wery bottom of the function that cause my problem. If you can 
see any wrong logic in the code please let me know :)

I have solved this problem in another way in my current code. 
The code below have worked for a long time, but stopped working and caused described 
problem after installing - i think php4.0.4 or 4.0.4pl1

Even if i surrond the for-loop with this :

echo "<br>First : $c";
if ($c!=0) {
  echo "<br>Second : $c";
  for (..) {
    echo "<br>Inside for-loop...";

the first echo output 0 but the second echo output another value like 1 or 2.
The strange thing is that if the FIRST echo output 0 the SECOND echo doesnt execute 
**BUT** the for-loop execute!

  // Parse the parts of message and get info on each
  function parseparts($ref, $ofs='') {
    global $part_no, $msg_part, $imap, $sorted_msgs, $msg_no, $bgcolor, $background, 
    global $sort_order;
    $msg_part[$part_no] = $ref;
    $msg_part[$part_no]->index = $ofs;

    $ac = count($ref->dparameters);
    for ($i=0; $i<$ac; $i++)
                if (eregi($ref->dparameters[$i]->attribute, 'filename')) {
                        $msg_part[$part_no]->filename = $ref->dparameters[$i]->value;
    $ac = count($ref->parameters);
    for ($i=0; $i<$ac; $i++)
      if (eregi($ref->parameters[$i]->attribute, 'name')) {
          $msg_part[$part_no]->name = $ref->parameters[$i]->value;
    if (!strcmp($msg_part[$part_no]->subtype, 'HTML')) { // Get background for HTML 
      $tmp = @imap_fetchbody($imap, $sorted_msgs[$msg_no-1], 
      // Encode data
      switch($msg_part[$part_no]->encoding) {
        case ENCBASE64  : $tmp = @imap_base64($tmp); break;
        case ENCQUOTEDPRINTABLE : $tmp = @imap_qprint($tmp); break;

      // Background color
      if (preg_match('/<BODY.*?BGCOLOR=([^s]+)>/si', $tmp, $tmp2)) {
        $bgcolor = 'BGCOLOR="'.preg_replace('/"/', '', $bgcolor).'"';
      } else
      // Remove any "

      // Background image
      if (preg_match('/<BODY.*?BACKGROUND=([^s]+)>/si', $tmp, $tmp2)) 

      if (!empty($tmp)) {
        $background = 
"background="getpart.phtml?1get_type=1&part_id=".rawurlencode(ereg_replace(""", '', 
      } else $background = '';

    $c = count($ref->parts);
    for ($p=0; $p<$c; $p++) {
      if (empty($ofs)) $of = ''.($p+1); else $of = $ofs.'.'.($p+1);
      parseparts($ref->parts[$p], $of);
  // Get info on each parts



The remainder of the comments for this report are too long.  To view the rest of the 
comments, please view the bug report online.

Full Bug description available at:

PHP Development Mailing List <>
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