Bug #10026 Updated: For loop always execute
| From: | svein at edbc dot no | Date: | Sun, 17 Jun 2001 17:12:37 +0000 |
| Subject: | Bug #10026 Updated: For loop always execute | ||
| Groups: | php.dev | ||
| Request: | Send a blank email to php-dev+get-56989@lists.php.net to get a copy of this message | ||
ID: 10026
User Update by: svein@edbc.no
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] jmoore@php.net
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 report.
- James
---------------------------------------------------------------------------
[2001-04-04 08:34:26] svein@edbc.no
I'm sorry, but all other script i make work ok. Its just this one that cause the problem.
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] sniper@php.net
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.
--Jani
---------------------------------------------------------------------------
[2001-04-04 06:26:22] svein@edbc.no
The parameter passed to the function i prev. post is the stricture returned from
imag_fetchstructure...
- Svein
---------------------------------------------------------------------------
[2001-04-04 06:24:05] svein@edbc.no
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, $folder;
global $sort_order;
$part_no++;
$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;
break;
};
$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;
break;
};
if (!strcmp($msg_part[$part_no]->subtype, 'HTML')) { // Get background for HTML
message
$tmp = @imap_fetchbody($imap, $sorted_msgs[$msg_no-1], $msg_part[$part_no]->index);
// 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=$tmp2[1];
$bgcolor = 'BGCOLOR="'.preg_replace('/"/', '',
$bgcolor).'"';
} else
$bgcolor='BGCOLOR="#ffffff"';;
// Remove any "
// Background image
if (preg_match('/<BODY.*?BACKGROUND=([^s]+)>/si', $tmp, $tmp2))
$tmp=$tmp2[1];
else
$tmp='';
if (!empty($tmp)) {
$background =
"background="getpart.phtml?1get_type=1&part_id=".rawurlencode(ereg_replace(""",
'', $tmp)).""";
} 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
parseparts($msg_struct);
---------------------------------------------------------------------------
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: http://bugs.php.net/?id=10026