2009-12-23 10 views
23

que tienen una función (esto es exactamente lo que parece, desde la parte superior de mi archivo):"Fatal error: No se puede redeclare <function>"

<?php 
//dirname(getcwd()); 
function generate_salt() 
{ 
    $salt = ''; 

    for($i = 0; $i < 19; $i++) 
    { 
     $salt .= chr(rand(35, 126)); 
    } 

    return $salt; 
} 
... 

Y por alguna razón, me siguen dando el error:

Fatal error: Cannot redeclare generate_salt() (previously declared in /Applications/MAMP/htdocs/question-air/includes/functions.php:5) in /Applications/MAMP/htdocs/question-air/includes/functions.php on line 13

No puedo entender por qué o cómo podría ocurrir un error de este tipo. ¿Algunas ideas?

Respuesta

48

Este error dice que su función ya está definida; lo que puede significar:

  • que tienen la misma función se define en dos archivos
  • o si tiene la misma función definida en dos lugares en el mismo archivo
  • o el archivo en el que se define la función se incluye dos veces (así, parece que la función se define dos veces)

para ayudar con el tercer punto, una solución sería utilizar include_once en lugar de include cuando se incluye el archivo de functions.php - por lo que no se puede incluir más que en ce.

+0

pero ni la línea 5 ni la línea 13 declaran ninguna función ... – fishman

+2

Hu; Supongo que los números de línea que se indican no son "precisos"; ; o, solo como precaución: ¿está seguro de que está buscando el archivo "correcto"? –

+0

Este es el único archivo que tiene una función generate_salt(). – fishman

5

Probablemente esté incluyendo el archivo functions.php más de una vez.

0

Recomendaría usar get_included_files - ya que Pascal dice que está buscando el archivo incorrecto de alguna manera o que esta función ya está definida en un archivo que se ha incluido.

require_once también es útil si el archivo que está intentando incluir es esencial.

0

Dado que el código que ha proporcionado no incluye explícitamente cualquier cosa, ya sea que se está incldued dos veces, o (si el guión es el punto de entrada para el código) que debe haber una auto-anteponer establecido en la configuración del servidor web/php.ini o alternativamente tienes una extensión realmente oscura cargada que define la función.

0

Tuve el mismo problema. Y finalmente fue una doble inclusión. Uno incluyen en un archivo llamado X. Y otro incluyen en un archivo llamado Y. Sabiendo que en el expediente había YI include ('X')

34

Solución 1

dont declarar función dentro de un bucle (como foreach, for , while, etc.). Declarar ante ellos.

Solución 2

Debe incluir archivo de función-contenida solamente una vez:
uso:               include_once("functions.php");
en lugar de:   include ("functions.php");

Solución 3

Si ninguno de los anteriores ayuda, antes declaración de la función, compruebe si ya existe:

if (!function_exists('your_function_name')) { 
    function your_function_name() { 
    ........ 
    } 
} 
3

se puede comprobar primero si el nombre de su función ISN `t existe o no antes de escribir la función Por

if (!function_exists('generate_salt')) 
{ 
    function generate_salt() 
    { 
    ........ 
    } 
} 

O puede cambiar el nombre de función a otro nombre

3

Tenía comportamiento extraño cuando mi * .php.bak (que fue creado automáticamente por el bloc de notas) se incluyó en la compilación. Después de eliminar todo * .php.bak de la carpeta, este error desapareció. Quizás esto sea útil para alguien.

0

o puede crear función en bucle

  • como

    for ($ i = 1; $ i < 5; $ i ++) { función foo() { eco 'alguna cosa'; } }

foo();
// Aparecerá un error con respecto a la redeclaración

0

significa que ya ha creado una clase con el mismo nombre.

Por ejemplo:

class ExampleReDeclare {} 

// some code here 

class ExampleReDeclare {} 

Esa segunda ExampleReDeclare tirar el error.

0

Este error dice que su función ya está definida; lo que puede significar:

  • que tienen la misma función se define en dos archivos
  • o si tiene la misma función definida en dos lugares en el mismo archivo
  • o el archivo en el que se define la función se incluye dos veces (por lo que parece que la función se define dos veces)

Creo que su problema se enfrenta en la posición 3 del script que incluye este archivo más de una vez.Por lo tanto, puede resolverlo utilizando require_once en lugar de require o include_once en lugar de include para incluir su archivo functions.php, por lo que no se puede incluir más de una vez.

0

¡En mi caso fue por la función dentro de otra función! una vez que me mudé de la función, el error desapareció y todo funcionó como se esperaba.

This answer explica por qué no debe usar la función dentro de la función.

Esto podría ayudar a alguien.

+0

¿Qué hay de malo en incluir una función dentro de una función? – BSUK

2

Otra razón posible para obtener ese error es que su función tiene el mismo nombre que otra función incorporada de PHP. Por ejemplo,

function checkdate($date){ 
    $now=strtotime(date('Y-m-d H:i:s')); 
    $tenYearsAgo=strtotime("-10 years", $now); 
    $dateToCheck=strtotime($date); 
    return ($tenYearsAgo > $dateToCheck) ? false : true; 
} 
echo checkdate('2016-05-12'); 

donde la función checkdate ya existe en PHP.

Cuestiones relacionadas