well, when I saw ur post I got immediately the thought I would bed it has to do with some stuff of $this or self. I did play arround a bit with class creation the last days and yes, with using self parent and $this I did put the HTTPPD in unstable and sometimes it died without beeing able to send any error. well this doesn't help very mutch. I have two point: (1)ur code is ( sorry ) lazy written, invest the brackets !! ur code writing is predestinated for that type of error. shooting variable types arround by pulling out of foreach loops, if's, .... is typical. (2) using static variables are known for type missmatch errors just anything has acces to them even if the containing class is not instantinated. many dirty things can happen unless of corse they are not private. further sugestions: check if you work on ur arrays with functions returning array on success but false on fail or something like that. also a typical source for that type of error are u using magic __set ? I ran into a type change as well with it good luck ralph_deffke@xxxxxxxx "Szczepan Holyszewski" <webmaster@xxxxxxxxxxxxxx> wrote in message news:200908222152.55846.webmaster@xxxxxxxxxxxxxxxxx > > What it looks like to me is that something is causing $foo to be a > > string before the '$foo[] = "bar";' line is encountered. What do you > > get if you put a gettype($foo); just before that line? > > > > > $foo=null; > > > $foo[]="bar"; // <-- $foo simply becomes an array > > NULL. That is the problem. I _did_ put a gettype($foo) before the actual line. > > OK, here are exact four lines of my code: > > $ret=array(); > foreach(self::$_allowed as $r => $a) > if ($a) > $ret[]=$r; > > As you can see, there is not a shred of a chance for $ret to become something > other than empty array between initialization and the last line in the above > snippet which causes the fatal errror. There's no __staticGet in 5.2.9, so > self::$_allowed cannot have side effects. > > Secondly, the above code starts failing after it has executed successfully > dozens of times (and yes, the last line _does_ get executed; in fact self:: > $_allowed contains configuration information that doesn't change at runtime). > > Thirdly... > > > > The problem is not limited to one place in code, and indeed before the > > > fatal caused by append-assignment I get several warnings like > > > "array_diff_key(): Argument #1 is not an array", where the offending > > > argument receives a result of array(). > > > > This would appear to support my suspicion, but try inserting the > > gettype($foo) (or better, var_export($foo);) just before one of the > > lines which triggers the error, and post the results. > > No, I don't think it supports your suspicion. Conversely, it indicates that > once array() returns a strangelet, it starts returning strangelets all over > the place. Initially it only triggers warnings but eventually one of the > returned strangelets is used in a way that triggers a fatal error. > > As per your request: > > //at the beginning of the script: > > $GLOBALS['offending_line_execution_count']=0; > > // /srv/home/[munged]/public_html/scripts/common.php line 161 and on > // instrumented as per your request: > > public static function GetAllowed() { > > if (debug_mode()) echo ++$GLOBALS['offending_line_execution_count']."<br/>"; > $ret=array(); > if (debug_mode()) echo var_export($ret)."<br/>"; > foreach(self::$_allowed as $r => $a) > if ($a) > $ret[]=$r; > > if (self::$_allowEmpty) $ret[]=""; > return $ret; > } > > Output tail: > ----------------------------------------------- > 28 > array ( ) > 29 > array ( ) > 30 > array ( ) > 31 > array ( ) > 32 > array ( ) > > Warning: array_diff_key() [function.array-diff-key]: Argument #1 is not an array > in /srv/home/u80959ue/public_html/v3/scripts/SimpliciText.php on line 350 > > Warning: Invalid argument supplied for foreach() in > /srv/home/u80959ue/public_html/v3/scripts/SimpliciText.php on line 351 > > Warning: array_merge() [function.array-merge]: Argument #2 is not an array in > /srv/home/u80959ue/public_html/v3/scripts/SimpliciText.php on line 357 > > Warning: Invalid argument supplied for foreach() in > /srv/home/u80959ue/public_html/scripts/common.php on line 28 > > Warning: Invalid argument supplied for foreach() in > /srv/home/u80959ue/public_html/scripts/common.php on line 28 > > Warning: Invalid argument supplied for foreach() in > /srv/home/u80959ue/public_html/scripts/common.php on line 28 > 33 > NULL > > Fatal error: [] operator not supported for strings in > /srv/home/u80959ue/public_html/scripts/common.php on line 168 > -------------------------------------------------- > > The warnings come from other uses of array(). > > But wait! There is this invocation of debug_mode() between initialization of > $ret var_export. Let's factor it out to be safe: > > $debugmode=debug_mode(); > if ($debugmode) echo ++$GLOBALS['offending_line_execution_count']."<br/>"; > $ret=array(); > if ($debugmode) echo var_export($ret)."<br/>"; > > And now the output ends with: > > ------------------------------------ > Warning: Invalid argument supplied for foreach() in > /srv/home/u80959ue/public_html/scripts/common.php on line 28 > 33 > > Fatal error: [] operator not supported for strings in > /srv/home/u80959ue/public_html/scripts/common.php on line 169 > ------------------------------------ > > No NULL after 33? What the heck is going on? Does array() now return something > that var_exports to an empty string, or does it destroy local variables? Let's > see: > > if ($debugmode) echo var_export($ret)."<br/>"; else echo "WTF?!?!?<br/>"; > > And the output: > ------------------------------------ > Warning: Invalid argument supplied for foreach() in > /srv/home/u80959ue/public_html/scripts/common.php on line 28 > 33 > WTF?!?!? > > Fatal error: [] operator not supported for strings in > /srv/home/u80959ue/public_html/scripts/common.php on line 169 > --------------------------------------- > > Indeed, the use of array(), once it starts misbehaving, wreaks havoc in the > local scope (possibly including the variable to which its result is assigned). > > > Can you post the code in a .zip file or online somewhere? > > Unfortunately not. > > Szczepan Holyszewski -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php