Bug #17720 Updated: "Cannot redeclare function_name previously declared in ..." is bogus
| From: | phpbugs at soupisgoodfood dot network | Date: | Mon, 24 Jun 2002 01:11:14 +0000 |
| Subject: | Bug #17720 Updated: "Cannot redeclare function_name previously declared in ..." is bogus | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-11859@lists.php.net to get a copy of this message | ||
ID: 17720
Updated by: phpbugs@soupisgoodfood.network
Reported By: bdgridly@mailbolt.com
Status: Critical
Bug Type: Scripting Engine problem
Operating System: Win2k and Apache
PHP Version: 4.2.1
New Comment:
I'm also experiencing this problem.
I have tried to rearange things thinking it was my code
(I'm a newbie).
All scripts for this particular site have one include()
with functions decalred inside. Some have 2 includes with
functions declared. They all work fine.
For some reason, one script with 2 includes for functions
is giving this error (it's template is different). I still
can't figure out what's causing it.
But what's even stranger is, if I re-arrange one include
(put it at the top, which shouldn't cause any problems) my
browser gives me a "Attempt to load URL:foobar failed"
error instead of PHP giving me the "Cannot redeclare..."
error. PHP and Apatche carry on just fine on other pages
after this happens (IE, it isn't crashing anything).
If anyone finds out more about this, I'd really appeciate
it if you could contact my ASAP (don't forget to change the
.network to .net on my address). Thanks.
Justin.
Previous Comments:
------------------------------------------------------------------------
[2002-06-12 10:31:56] bdgridly@mailbolt.com
>include_once() is the problem here. It should propably
>not include the current script run.
Yes, the "include_once("main.php")" is causing the problem
because it confuses the interpreter into thinking SystemTest() is
declared twice. If I remove the "include_once("main.php")", it will
work. But this is a workaround.
What happens if test1() is also called from test2.php? How is test1()
going to load NewTest() in main.php if there
is no include for main.php?
I am pretty sure this worked in PHP 4.06 because it stopped working
yesterday when I installed PHP 4.2.1. The only way I see of correcting
it is to go back to 4.06. :(
------------------------------------------------------------------------
[2002-06-12 09:18:29] sniper@php.net
include_once() is the problem here. It should propably
not include the current script run..
------------------------------------------------------------------------
[2002-06-11 21:48:42] bdgridly@mailbolt.com
It is possible in PHP 4.2.1 to confuse the interpreter into thinking a
function had been previously declared when in
fact it is the same function. I'm sure this used to work in PHP 4.01. I
installed 4.2.1 today and now it complains.
Sample test program:
File: MAIN.PHP
<?PHP
include_once("test1.php");
function SystemTest() //<<-- Error: SystemTest() previously declared
in Main.Php at line 4
{
Test1();
}
function NewTest()
{
echo "New Test";
}
SystemTest();
?>
File: Test1.PHP
<?PHP
include_once("main.php");
function test1()
{
echo "This is Test1()<BR>";
NewTest();
}
?>
If you run Main.PHP, it will generate an error because it thinks
SystemTest was previously declared and it gives
as the line number of the "other" definition as the line # where the
error occurred. So it is really pointing to itself.
In this simple example I could get rid of the
"include_once("main.php")" and it will start to work. But what if Test1
is also called from test2.php. Then SystemTest() it won't find
NewTest() that is in Main.Php.
Can this be fixed? TIA
Brent (e-mail me if you can with an explanation if it is operator
error<g>)
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=17720&edit=1