web-dev-qa-db-fra.com

"Erreur fatale: impossible de redéclarer <fonction>"

J'ai une fonction (c'est exactement ce qui se passe depuis le début de mon fichier):

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

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

    return $salt;
}
...

Et pour une raison quelconque, je continue à avoir l'erreur:

Erreur fatale: Impossible de redéclarer generate_salt () (précédemment déclaré dans /Applications/MAMP/htdocs/question-air/includes/functions.php:5) dans /Applications/MAMP/htdocs/question-air/includes/functions.php à la ligne 13

Je ne peux pas comprendre pourquoi ou comment une telle erreur pourrait se produire. Des idées?

27
fishman

Cette erreur indique que votre fonction est déjà définie. ce qui peut signifier:

  • vous avez la même fonction définie dans deux fichiers
  • ou vous avez la même fonction définie à deux endroits dans le même fichier
  • ou le fichier dans lequel votre fonction est définie est inclus deux fois (il semble donc que la fonction est définie deux fois)

Pour vous aider avec le troisième point, une solution serait d’utiliser include_once au lieu de include lorsque vous incluez votre fichier functions.php - afin qu’il ne puisse pas être inclus plus d’une fois.

60
Pascal MARTIN

Solution 1

Ne déclarez pas la fonction dans une boucle (comme foreach, for, while...)! Déclare devant eux.

Solution 2

Vous devez inclure ce fichier (dans lequel cette fonction existe) une seule fois:
use: include_once("functions.php");
au lieu de: include ("functions.php");

Solution 3

Si rien de ce qui précède ne vous aide, avant la déclaration de fonction, ajoutez une coche pour éviter une nouvelle déclaration:

if (!function_exists('your_function_name'))   {
  function your_function_name()  {
    ........
  }
}
40
T.Todua

Vous incluez probablement le fichier functions.php plusieurs fois.

5
codaddict

vous pouvez d'abord vérifier si le nom de votre fonction n'existe pas ou non avant d'écrire fonctionBy 

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

OU vous pouvez changer le nom de la fonction en un autre nom 

3
ahmed hamdy

Une autre raison possible de cette erreur est que votre fonction a le même nom qu'une autre fonction intégrée PHP. Par exemple,

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');

où la fonction checkdate existe déjà en PHP.

3
Pawel Glowacki

J'ai eu un comportement étrange lorsque mon * .php.bak (qui a été créé automatiquement par notepad) a été inclus dans la compilation. Après avoir supprimé tous les fichiers * .php.bak du dossier, cette erreur a disparu . Cela sera peut-être utile pour quelqu'un.

3
Roman

Dans mon cas, c'était à cause de la fonction dans une autre fonction! une fois que j'ai quitté la fonction, l'erreur a disparu et tout a fonctionné comme prévu. 

Cette réponse explique pourquoi vous ne devriez pas utiliser function dans la fonction.

Cela pourrait aider quelqu'un.

2
Muhammed Aslam C

J'ai eu le même problème. Et finalement c'était un double include. Un inclure dans un fichier nommé X. Et un autre inclure dans un fichier nommé Y. Sachant que dans le fichier Y j'avais include ('X')

0
josemaria

Je n'aime pas function_exists('fun_name') car il faut que le nom de la fonction soit transformé en chaîne. De plus, vous devez le nommer deux fois. Pourrait facilement rompre avec le refactoring.

Déclarez votre fonction en tant qu'expression lambda (je n'ai pas vu cette solution mentionnée):

$generate_salt = function()
{
    ...
};

Et utilisez ainsi:

$salt = $generate_salt();

Ensuite, lors de la ré-exécution dudit code PHP, la fonction remplace simplement la déclaration précédente.

0
Staplerfahrer

Puisque le code que vous avez fourni n'inclut pas explicitement quoi que ce soit, soit il est inclus deux fois, soit (si le script est le point d'entrée du code), un pré-préposition automatique doit être configuré dans le serveur Web config/php.ini. ou bien vous avez une extension vraiment obscure chargée qui définit la fonction.

0
symcbean

Je recommanderais d'utiliser get_included_files - comme Pascal dit, soit vous regardez le mauvais fichier, soit cette fonction est déjà définie dans un fichier qui a été inclus.

require_once est également utile si le fichier que vous tentez d'inclure est essentiel.

0
John Parker

Cette erreur indique que votre fonction est déjà définie. ce qui peut signifier:

  • vous avez la même fonction définie dans deux fichiers
  • ou vous avez la même fonction définie à deux endroits dans le même fichier
  • ou le fichier dans lequel votre fonction est définie est inclus deux fois (il semble donc que la fonction est définie deux fois)

Je pense que votre problème en 3ème position du script, y compris ce fichier plus d'une fois, est résolu.Vous pouvez le résoudre en utilisant require_once au lieu de require ou include_once au lieu de include pour inclure votre fichier functions.php - il ne peut donc pas être inclus plus d’une fois.

0
Ameer Hamza

signifie que vous avez déjà créé une classe du même nom.

Par exemple:

class ExampleReDeclare {}

// some code here

class ExampleReDeclare {}

Ce deuxième ExampleReDeclare renvoie l’erreur.

0
Naitik Shah

ou vous pouvez créer une fonction en boucle

  • tel que 

    for ($ i = 1; $ i <5; $ i ++) { function foo () { echo 'quelque chose'; } }

foo ();
// Il affichera une erreur concernant la redéclaration

0
rut