I have a script (let's call it a.php3) that brings in another script b.php3
with the include or require call.

In script b.php3 there is an include or require call to bring in script
c.php3.

Script a.php3 after making one and only one include (the include is not
repeated anywhere in a.php3) then calls a function x which is defined in
script b.php3.

The first time the function is called it executes without any problems. The
second time in which it is called, in exactly the same way, with the same
parameters, it errors with the message
Can't redeclare already declared function in c.php3 at line <the last line
of the first function declaration in c.php3>

The function is not actually named in the error message. This is the code
block in c.php3 which the error occurs:

<top of file>
<?php

 function getDirNames($sourceDir,$includeBase)
 {
  global $pathList;

  function findAllDirsInDir($sourceDir)
  {
   global $pathList;
   $dirHandle=opendir($sourceDir);
   while (($subDir=readdir($dirHandle))!=false)
   {
    if (is_dir($sourceDir."/".$subDir))
    {
     if ($subDir != "." && $subDir != "..")
     {
      $dirList[] = $sourceDir."/".$subDir;
      $pathList[] = $sourceDir."/".$subDir;
     }
    }
   }
   closedir($dirHandle);
   return $dirList;
  }; <<error occurs here>>

  function buildDirList($sourceDir,$recurse)
  {
   $subDirList=findAllDirsInDir($sourceDir);
   if (count($subDirList) != 0)
    $recurse=true;
   else
    $recurse=false;
   for($i=0; $i<count($subDirList);$i++)
   {
    $currentSubDir=$subDirList[$i];
    if ($recurse==true)
     buildDirList($currentSubDir,$recurse);
   }
  }

  buildDirList($sourceDir,true);
  if ($includeBase == TRUE)
   $pathList[] = $sourceDir;
  return $pathList;
 }

There are no multiple calls to include or require:

* a.php3 which is the script that calls the function several times to output
data, contains only one call to include() that is not inside any kind of
loop. It is called once just before the first function call.

*b.php3 which is the script that is included by a.php3. It includes c.php3
ONCE ONLY, NOT IN A LOOP.

*c.php3 which is the script in which the error is occurring.

Debugging b.php3 shows that the error message is thrown when execution
reaches the line in which the function from c.php3 is called. Therefore I
surmise that the error message is ambiguous.

Reply via email to