php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #35117 $_SERVER auto-global not in global scope in included file
Submitted: 2005-11-05 19:39 UTC Modified: 2005-11-05 20:00 UTC
From: ramsey@php.net Assigned:
Status: Not a bug Package: *General Issues
PHP Version: 5.1.0RC4 OS: Debian sarge
Private report: No CVE-ID: None
 [2005-11-05 19:39 UTC] ramsey@php.net
Description:
------------
I noticed the following error after moving a Web site's code to a machine running PHP 5.1RC4:

PHP Notice:  Undefined variable: _SERVER in /data/home/ramsey/public_html/file.inc on line 2

This didn't make any sense, however for two reasons: 1) I'm able to use $_SERVER in other scripts, and 2) this variable should be an auto-global. The difference with this script, though, is that it is an .inc file that is included and executed within a parent script.

If I place "global $_SERVER;" at the top of the included file, then it has access to the $_SERVER auto-global array--on the first load of the page only. Each subsequent load of the page again produces the PHP Notice above.

I haven't tested this with other auto-globals, so I don't know whether they have the same problems.

I created two simple test scripts to reproduce this (shown in the "reproduce code" section). 

I noticed that the first time I loaded the page, it showed the $_SERVER array just fine, but on each subsequent load, it generates the undefined variable notice given above.

Everytime I make a change (any change) to the page and load it, the array shows up on the first load only. With this in mind, I realized that the problem was probably not with the auto-global array but with APC, which I also have installed (using "pecl install apc" and accepting the default configuration values). When I comment out the APC extension line in php.ini, the $_SERVER array shows up perfectly on each load of the page.

Reproduce code:
---------------
test.php:
<?php
include_once 'file.inc';
?>

file.inc:
<?php
print_r($_SERVER);
?>

Expected result:
----------------
I should see the print_r() output of the $_SERVER auto-global array each time the page loads.

Actual result:
--------------
A PHP notice that occurs each time the page loads (but I noticed that the expected result occurred the first time the page loaded):

PHP Notice:  Undefined variable: _SERVER in /data/home/ramsey/public_html/file.inc on line 2

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2005-11-05 19:58 UTC] sniper@php.net
Ah, I didn't notice the mention about APC. This is not PHP bug  but bug in APC then. Report this to correct place. (pecl.php.net)

 [2005-11-05 20:00 UTC] ramsey@php.net
Got it... reporting to the correct place.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sat Dec 21 15:01:29 2024 UTC