From: marcus3v at hotmail dot com Operating system: Windows 9x/XP PHP version: 5.2.0 PHP Bug Type: Unknown/Other Function Bug description: ActivePHP - Variable Scope Bug
Description: ------------ Dear Sirs, It seems that there is a serious Variable Scope bug when PHP ( v5.2 ) Scripts are executed in the ActivePHP Environment. The problem is as follows: # 1 -- when a Variable is declared in Global Scope Statements without explicit use of the "$GLOBALS" Array, it not really becomes Global and can't be seen within Functions through the "global" Keyword nor "$GLOBALS"; # 2 -- conversely, a Variable declared with explicit use of "$GLOBALS" in Global Scope Statements can be seen within Functions, but isn't visible for the own Global Scope Statements ( it's required use of "$GLOBALS"... This also occurs when the declaration is done within a Function -- through "$GLOBALS" ). I have employed a "php5activescript.dll" version 5.2.0.0 ( 53.314bytes. It's that one distributed with the "pecl-5.2.0-Win32.zip" package ) on Windows 9x and XP. # Obs.: since this is a PECL issue, it should be posted on the PECL Bug Tracking System. It was also posted there... I have posted here because it appears that this extension ( ActivePHP ) have been a little "abandoned": on "pecl.php.net", the link to the latest package is broken; the only actual source for the compiled DLL is "pecl4win.php.net"... Thus, by the way of the uncertainty, I have posted here ( maybe you have some direct and special contact with the extension's developer... ). Reproduce code: --------------- function varsGlbTest() { global $varGlb0, $varGlb1; /*######*/ $WScript->Echo("varsGlbTest() -- varGlb0= '".$varGlb0."'"); /*######*/ $WScript->Echo("varsGlbTest() -- \$GLOBALS['varGlb0']= '".$GLOBALS["varGlb0"]."'"); /*######*/ $WScript->Echo("varsGlbTest() -- varGlb1= '".$varGlb1."'"); $GLOBALS["varGlb2"]="[varGlb2]"; global $varGlb2; /*######*/ $WScript->Echo("varsGlbTest() -- varGlb2= '".$varGlb2."'"); } $varGlb0="[varGlb0]"; $GLOBALS["varGlb1"]="[varGlb1]"; /*######*/ $WScript->Echo("[global] -- varGlb0= '".$varGlb0."'"); /*######*/ $WScript->Echo("[global] -- varGlb1= '".$varGlb1."'"); /*######*/ $WScript->Echo("[global] -- \$GLOBALS['varGlb1']= '".$GLOBALS["varGlb1"]."'"); varsGlbTest(); /*######*/ $WScript->Echo("[global] -- varGlb2= '".$varGlb2."'"); /*######*/ $WScript->Echo("[global] -- \$GLOBALS['varGlb2']= '".$GLOBALS["varGlb2"]."'"); Expected result: ---------------- The output should be the following: # [global] -- varGlb0= '[varGlb0]' # [global] -- varGlb1= '[varGlb1]' # [global] -- $GLOBALS['varGlb1']= '[varGlb1]' # varsGlbTest() -- varGlb0= '[varGlb0]' # varsGlbTest() -- $GLOBALS['varGlb0']= '[varGlb0]' # varsGlbTest() -- varGlb1= '[varGlb1]' # varsGlbTest() -- varGlb2= '[varGlb2]' # [global] -- varGlb2= '[varGlb2]' # [global] -- $GLOBALS['varGlb2']= '[varGlb2]' Actual result: -------------- The observed output is the following: # [global] -- varGlb0= '[varGlb0]' # [global] -- varGlb1= '' ( "varGlb1" is NULL ( it was not yet assigned ) ) # [global] -- $GLOBALS['varGlb1']= '[varGlb1]' ( ?!... ) # varsGlbTest() -- varGlb0= '' ( "varGlb0" is NULL ( has been it assigned to NULL?... ) ) # varsGlbTest() -- $GLOBALS['varGlb0']= '' ( [idem] ) # varsGlbTest() -- varGlb1= '[varGlb1]' # varsGlbTest() -- varGlb2= '[varGlb2]' # [global] -- varGlb2= '' ( "varGlb2" is NULL ( it was not yet assigned ) ) # [global] -- $GLOBALS['varGlb2']= '[varGlb2]' ( ?!... ) -- Edit bug report at http://bugs.php.net/?id=39597&edit=1 -- Try a CVS snapshot (PHP 4.4): http://bugs.php.net/fix.php?id=39597&r=trysnapshot44 Try a CVS snapshot (PHP 5.2): http://bugs.php.net/fix.php?id=39597&r=trysnapshot52 Try a CVS snapshot (PHP 6.0): http://bugs.php.net/fix.php?id=39597&r=trysnapshot60 Fixed in CVS: http://bugs.php.net/fix.php?id=39597&r=fixedcvs Fixed in release: http://bugs.php.net/fix.php?id=39597&r=alreadyfixed Need backtrace: http://bugs.php.net/fix.php?id=39597&r=needtrace Need Reproduce Script: http://bugs.php.net/fix.php?id=39597&r=needscript Try newer version: http://bugs.php.net/fix.php?id=39597&r=oldversion Not developer issue: http://bugs.php.net/fix.php?id=39597&r=support Expected behavior: http://bugs.php.net/fix.php?id=39597&r=notwrong Not enough info: http://bugs.php.net/fix.php?id=39597&r=notenoughinfo Submitted twice: http://bugs.php.net/fix.php?id=39597&r=submittedtwice register_globals: http://bugs.php.net/fix.php?id=39597&r=globals PHP 3 support discontinued: http://bugs.php.net/fix.php?id=39597&r=php3 Daylight Savings: http://bugs.php.net/fix.php?id=39597&r=dst IIS Stability: http://bugs.php.net/fix.php?id=39597&r=isapi Install GNU Sed: http://bugs.php.net/fix.php?id=39597&r=gnused Floating point limitations: http://bugs.php.net/fix.php?id=39597&r=float No Zend Extensions: http://bugs.php.net/fix.php?id=39597&r=nozend MySQL Configuration Error: http://bugs.php.net/fix.php?id=39597&r=mysqlcfg