ID:               18590
 Comment by:       mark dot php dot net dot special at emceesoftware dot
                   com
 Reported By:      armageddon at raydan dot de
 Status:           No Feedback
 Bug Type:         Scripting Engine problem
 Operating System: WinXP Pro
 PHP Version:      5.0.0-dev
 New Comment:

PHP 5.2.4 (Build date 30 Aug 2007)

I experience this error while using a technique for dispatching method
calls dynamically.

On receipt of an XML packet, an API method determines the php module
(source file) that needs to be loaded to process the XML file.

Next, the method name is loaded into a variable, and the source file is
included.

Finally, the variable is used to call the method.

I've been successfully testing this approach for some time, and am
confused as to why it has started "now".

Code sample (abbreviated):

$moduleName = ... (extracted from XML structure)
$methodName = ... (derived from another parameter)
$sourceFile = $_SERVER["DOCUMENT_ROOT"].'/path/'.$moduleName.'.php';
include( $sourceFile );
$dynamicMethod = $moduleName.'_'.$methodName;
$dynamicMethod();  // attempt the call

My theory is that this code is being called multiple times with the
same value for $moduleName, causing the include() method to attempt to
load it multiple times.  While this doesn't seem to be an issue when
using the static 'include_once' declaration, it appears to be an issue
when loading dynamically.

When changing the above code to use include_once(), the problem seems
(so far) to have gone away.


Previous Comments:
------------------------------------------------------------------------

[2007-09-03 13:52:58] info at rchu dot nl

update: adding a space to the source results in the same 'cannot
redeclare' error. Only changing the function name resolves the problem
at the fist run. Must be some kind of caching problem I suppose. When
running the script on the command line there is no problem, just when I
request in in my browser. I run the pre-installed apache1.3 on Mac OS X
10.4.10 and used the --with-apache-hooks option on compiling because I
do not have the apache.h source file (since I haven't compiled apache).

------------------------------------------------------------------------

[2007-09-03 13:48:09] info at rchu dot nl

I have sort of the same bug I think.

test.php
<?php

function test() { echo 'test'; }

test();

?>

works fine the first time. Then after a reload it gives an cannot
redeclare test() error. Same error after second reload etc. Modify the
file (add a space or something like that) and it runs OK the first time
but after reload same error.

I have compiled PHP 5.2.4 on Darwin Kernel Version 8.10.2.

------------------------------------------------------------------------

[2004-03-31 09:57:54] christian dot lefebvre at atosorigin dot com

I got it !
Seems that when a function is declared in an included file,
after a top level "return", it's detected as already defined


example with «t1.php» :
<?php
error_log("inc t2");
include("t2.php");

toto();

error_log("re-inc t2");
include("t2.php");

toto();

error_log("end");
?>

and «t2.php» :
<?php
error_log("in t2");

if (defined("_T2_INCLUDED")) {
  error_log("already went there");
  return;
}
define("_T2_INCLUDED", "1");

error_log("still in t2");

function toto() {
  echo "Here am I !!\n";
}

error_log("end of t2");
?>

with cli sapi of php5 RC1 or with today snapshot, here is
the output :
inc t2
in t2
still in t2
end of t2
Here am I !!
re-inc t2

Fatal error: Cannot redeclare toto() (previously declared in
.../t2.php:13) in .../t2.php on line 14

  note that even the "in t2" log is not displayed at
second include.

------------------------------------------------------------------------

[2004-03-31 09:38:46] christian dot lefebvre at atosorigin dot com

I got the same problem with RC1 version under
Linux/apache2filter
  I just tried with snapshot 200403311230 (same config)
and the message disappear but the tested code still crashes.
  As the same code works with php4.3.4, I think this ticket
should be reopened.

  I'll try to make a smaller test case

------------------------------------------------------------------------

[2003-12-04 02:24:54] [EMAIL PROTECTED]

No feedback was provided. The bug is being suspended because
we assume that you are no longer experiencing the problem.
If this is not the case and you are able to provide the
information that was requested earlier, please do so and
change the status of the bug back to "Open". Thank you.



------------------------------------------------------------------------

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
    http://bugs.php.net/18590

-- 
Edit this bug report at http://bugs.php.net/?id=18590&edit=1

  • #18590 [Com]: Fa... mark dot php dot net dot special at emceesoftware dot com
    • #18590 [Com... mark dot php dot net dot special at emceesoftware dot com

Reply via email to