source

"치명적 오류: 다시 선언할 수 없음"

nicesource 2023. 7. 28. 22:10
반응형

"치명적 오류: 다시 선언할 수 없음"

다음과 같은 기능이 있습니다(파일 맨 위에서 볼 때 정확히 이와 같습니다).

<?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) in /Applications/MAMP/htdocs/question-air/includes/functions.13행의 php

저는 왜 또는 어떻게 그런 오류가 발생할 수 있는지 알 수 없습니다.아이디어 있어요?

이 오류는 함수가 이미 정의되었음을 나타냅니다. 이는 다음을 의미할 수 있습니다.

  • 두 개의 파일에 정의된 동일한 기능이 있습니다.
  • 또는 동일한 파일의 두 위치에 정의된 동일한 기능이 있는 경우
  • 또는 함수가 정의된 파일이 두 번 포함되어 있습니다(따라서 함수가 두 번 정의된 것 같습니다).

세 번째 요점을 돕기 위해, 솔루션은 다음을 포함할 때 대신 사용하는 것입니다.functions.php파일 - 두 번 이상 포함할 수 없습니다.

솔루션 1

:foreach,for,while하시오...)! 그들앞선언니다합에다니▁...선합언앞!에..▁them▁before▁declare.

솔루션 2

해당 파일(해당 함수가 존재하는 위치)은 한 번만 포함해야 합니다.
다음대신:include ("functions.php");
:include_once("functions.php");

솔루션 3

위의 어느 것도 도움이 되지 않으면 함수 선언 전에 다시 선언하지 않도록 확인란을 추가합니다.

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

함수를 선언하기 전에 먼저 함수 이름의 존재 여부를 확인할 수 있습니다.

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

또는 함수 이름을 다른 이름으로 변경할 수 있습니다.

파일 기능을 포함하고 있을 수 있습니다.php는 두 번 이상.

제 경우에는 다른 함수 내부의 기능 때문이었습니다!제가 기능을 제거하자 오류가 사라졌고 모든 것이 예상대로 작동했습니다.

이 답변은 함수 내부에서 함수를 사용하면 안 되는 이유를 설명합니다.

누군가에게 도움이 될 수도 있습니다.

제 *.php.bak(노트북으로 자동 생성됨)이 컴파일에 포함되었을 때 이상한 행동을 했습니다.폴더에서 *.php.bak을 모두 제거한 후 이 오류가 사라졌습니다.아마도 이것은 누군가에게 도움이 될 것입니다.

이 오류가 발생하는 또 다른 가능한 이유는 당신의 함수가 다른 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에 이미 있습니다.

많은 분들께 도움이 될 수 있는 저의 2센트 경험을 추가하고 싶습니다.

루프 내부에 함수를 선언하는 경우(각각의 기간에 대해) 이 오류 메시지가 표시됩니다.

싫다습을 좋아하지 않습니다.function_exists('fun_name')함수 이름이 문자열로 변환되는 것에 의존하기 때문에, 추가로 이름을 두 번 지정해야 합니다.리팩토링으로 쉽게 부서질 수 있습니다.

함수를 람다 식으로 선언합니다(이 솔루션은 언급되지 않았습니다).

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

다음과 같이 사용합니다.

$salt = $generate_salt();

그런 다음, 해당 PHP 코드를 다시 실행할 때, 함수는 단순히 이전 선언을 덮어씁니다.

를 사용하는 것이 좋습니다.get_included_filesPascal에 따르면 잘못된 파일을 보거나 이미 포함된 파일에 이 기능이 정의되어 있습니다.

require_once포함하려는 파일이 필수인 경우에도 유용합니다.

저도 같은 문제가 있었습니다.그리고 마침내 더블 인크루드가 되었습니다.하나는 X라는 이름의 파일에 포함됩니다.그리고 Y라는 이름의 파일에 포함되어 있습니다.Y 파일에 포함('X')했다는 것을 알고 있습니다.

제공한 코드에 명시적으로 포함된 것이 없기 때문에 두 번 포함되거나(스크립트가 코드의 진입점인 경우) 웹 서버 config / php.ini에 자동 접두사가 설정되어 있어야 합니다. 그렇지 않으면 함수를 정의하는 정말 모호한 확장자가 로드됩니다.

같은 이름의 클래스를 이미 생성했음을 의미합니다.

예:

class ExampleReDeclare {}

// some code here

class ExampleReDeclare {}

두 번째 ExampleReDeclare는 오류를 던집니다.

Wordpress 테마 문제가 있는 경우 wp_options 테이블에서 테마 이름을 변경했지만 스타일시트의 이름을 변경하지 않았기 때문일 수 있습니다.저는 이것 때문에 고생했습니다.

최근에 같은 파일에서 정의 전에 함수를 호출하는 팝업이 떴는데 변수에 반환 값이 할당되지 않았습니다.할당할 반환 값에 대한 변수를 추가하면 오류가 사라집니다.

PRO 버전을 실행하려면 Lite 버전을 비활성화해야 합니다.

이 오류는 함수가 이미 정의되었음을 나타냅니다. 이는 다음을 의미할 수 있습니다.

  • 두 개의 파일에 정의된 동일한 기능이 있습니다.
  • 또는 동일한 파일의 두 위치에 정의된 동일한 기능이 있는 경우
  • 또는 함수가 정의된 파일이 두 번 포함되어 있습니다(따라서 함수가 두 번 정의된 것 같습니다).

당신의 3번째 문제는 이 파일을 포함한 스크립트를 두 번 이상 배치하는 것 같습니다.그래서, 당신은 그것을 대신 사용하여 해결할 수 있습니다.include_once대신에include당신을 포함하여functions.php파일 - 두 번 이상 포함할 수 없습니다.

또는 루프에서 함수를 만들 수 없습니다.

  • 예를 들어

    ipxi=1; $i<5; $i++) {function foofoo{echo 'something'; } }

푸슈;
//재신고 관련 오류가 표시됩니다.

언급URL : https://stackoverflow.com/questions/1953857/fatal-error-cannot-redeclare-function

반응형