Подтвердить что ты не робот

"Неустранимая ошибка: невозможно обновить <function>"

У меня есть функция (это именно то, как она появляется, из верхней части моего файла):

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

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

    return $salt;
}
...

И по какой-то причине я продолжаю получать ошибку:

Неустранимая ошибка: невозможно обновить generate_salt() (ранее объявленный в /Applications/MAMP/htdocs/question -air/includes/functions.php:5) в /Applications/MAMP/htdocs/question -air/includes/functions.php в строке 13

Я не могу понять, почему и как может произойти такая ошибка. Любые идеи?

4b9b3361

Ответ 1

В этих ошибках указано, что ваша функция уже определена; что может означать:

  • у вас есть одна и та же функция, определенная в двух файлах
  • или у вас есть одна и та же функция, определенная в двух местах в одном файле
  • или файл, в котором определена ваша функция, включается два раза (так, кажется, функция определена два раза)

Чтобы помочь с третьей точкой, решением было бы использовать include_once вместо include при включении вашего файла functions.php - поэтому его нельзя включить более одного раза.

Ответ 2

Решение 1

Не объявляйте функцию внутри цикла (например, foreach, for, while...)! Объявите перед ними.

Решение 2

Вы должны включить этот файл (где эта функция существует) только один раз:
использовать: include_once("functions.php");
вместо: include ("functions.php");

Решение 3

Если ничего из вышеперечисленного не помогает, перед объявлением функции добавьте проверку, чтобы избежать повторного объявления:

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

Ответ 3

Вы, вероятно, включаете файл functions.php более одного раза.

Ответ 4

вы можете проверить сначала, если имя вашей функции не существует или нет, прежде чем вы напишете функцию По

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

ИЛИ вы можете изменить имя функции на другое имя

Ответ 5

У меня было странное поведение, когда мой *.php.bak(который автоматически был создан блокнотом) был включен в компиляцию. После того как я удалил все *.php.bak из папки, эта ошибка исчезла. Возможно, это будет полезно для кого-то.

Ответ 6

Другой возможной причиной получения этой ошибки является то, что ваша функция имеет то же имя, что и другая встроенная функция PHP. Например,

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

где функция checkdate уже существует в PHP.

Ответ 7

В моем случае это было из-за функции внутри другой функции! как только я переместил функцию, ошибка исчезла, и все сработало, как ожидалось.

Этот ответ объясняет, почему вы не должны использовать функцию внутри функции.

Это может помочь кому-то.

Ответ 8

Я бы рекомендовал использовать get_included_files, поскольку Паскаль говорит, что вы либо как-то смотрели на неправильный файл, либо эта функция уже определена в файле, который был включен.

require_once также полезен, если файл, который вы пытаетесь включить, имеет важное значение.

Ответ 9

Так как код, который вы предоставили, явно не содержит ничего, либо он дважды закрывается, либо (если script является точкой входа для кода), на веб-сервере должна быть установлена ​​автоматическая добавка config/php.ini или, альтернативно, у вас есть действительно неясное расширение, которое определяет функцию.

Ответ 10

У меня была та же проблема. И, наконец, это было двойное включение. Один из них относится к файлу с именем X. И еще один - в файле с именем Y. Зная, что в файле Y у меня есть ( "X" )

Ответ 11

или вы можете создать функцию в цикле

  • например

    для ($ я = 1; $i < 5; $i ++) { функция foo() { эхо "что-то"; } }

Foo();
// Будет отображаться ошибка, связанная с повторной декларацией

Ответ 12

означает, что вы уже создали класс с тем же именем.

Пример:

class ExampleReDeclare {}

// some code here

class ExampleReDeclare {}

Этот второй примерReDeclare выдает ошибку.

Ответ 13

В этих ошибках указано, что ваша функция уже определена; что может означать:

  • у вас есть одна и та же функция, определенная в двух файлах
  • или у вас есть одна и та же функция, определенная в двух местах в одном файле
  • или файл, в котором определена ваша функция, включается два раза (так, кажется, функция определена два раза)

Я думаю, что ваша проблема на третьей позиции script, включая этот файл, более одного раза. Таким образом, вы можете решить ее, используя require_once вместо require или include_once вместо include для включения вашего файла functions.php - поэтому он не может быть включен более одного раза.

Ответ 14

Мне не нравятся function_exists('fun_name') потому что оно основано на превращении имени функции в строку, плюс, вы должны назвать его дважды. Может легко порвать с рефакторингом.

Объявите вашу функцию как лямбда-выражение (я не видел упомянутое решение):

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

И использовать таким образом:

$salt = $generate_salt();

Затем при повторном выполнении указанного кода PHP функция просто перезаписывает предыдущее объявление.