Date: 04/04/01
- Next message: svein <email protected>: "[PHP-DEV] PHP 4.0 Bug #10026 Updated: For loop always execute"
- Previous message: Jani Taskinen: "Re: [PHP-DEV] Re: ; arg seperator"
- Next in thread: svein <email protected>: "[PHP-DEV] PHP 4.0 Bug #10026 Updated: For loop always execute"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
ID: 10026
User Update by: svein <email protected>
Old-Status: Feedback
Status: Open
Bug Type: *General Issues
Description: For loop always execute
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 = <email protected>($imap, $sorted_msgs[$msg_no-1], $msg_part[$part_no]->index);
// Encode data
switch($msg_part[$part_no]->encoding) {
case ENCBASE64 : $tmp = <email protected>($tmp); break;
case ENCQUOTEDPRINTABLE : $tmp = <email protected>($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);
Previous Comments:
---------------------------------------------------------------------------
[2001-04-01 13:34:29] sniper <email protected>
As I can not reproduce this with latest CVS please try
the latest snapshot from http://snaps.php.net/
And if happens with it too, create one
short but self-containing script which can be used
to reproduce this anywhere without modifications
and add it into this bug report.
--Jani
---------------------------------------------------------------------------
[2001-03-29 12:57:01] svein <email protected>
When i said ONCE - i didnt mean ONCE :)
It ALWAYS happen in the code referred...
---------------------------------------------------------------------------
[2001-03-29 12:55:32] svein <email protected>
Its not easy reproduceable - i have only seen this happens ONCE - in the specified function. Its NOT a simple for-loop - the for-loop executes INSIDE a recursively called function.
I've also tried this one :
---
$c = count($myarray);
if ($c>0) {
echo "c is greater than 0<br>";
for (...) {
...code
}
}
---
then IF c is 0 the echo statement doesnt execute BUT the for loop executes...
I cant figure out why...
If some of you want it i can mail you the file so you can see the things in perspective.
- Svein
---------------------------------------------------------------------------
[2001-03-29 11:55:23] sniper <email protected>
I can't reproduce this (using code below):
<?php
$c=0;
for($i=0; $i<$c; $i++) {
echo "yesn";
}
?>
Could you try this one?
And note: If the variable passed to count() is not an array,
it will return 1.
--Jani
---------------------------------------------------------------------------
[2001-03-27 11:09:08] svein <email protected>
The code submitted is inside a function that is called recursively and its not exact copy of the code.
I've also tried to change the for loop to a while loop with the same result.
---------------------------------------------------------------------------
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
--
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: php-dev-unsubscribe <email protected>
For additional commands, e-mail: php-dev-help <email protected>
To contact the list administrators, e-mail: php-list-admin <email protected>
- Next message: svein <email protected>: "[PHP-DEV] PHP 4.0 Bug #10026 Updated: For loop always execute"
- Previous message: Jani Taskinen: "Re: [PHP-DEV] Re: ; arg seperator"
- Next in thread: svein <email protected>: "[PHP-DEV] PHP 4.0 Bug #10026 Updated: For loop always execute"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]

