2009-04-14 5 views
0

나는 쿠키의 영향을 미치는 코드를 변경하지 않았 지금은 다음 얻을 : 정의되지 않은 상수 COOKIE_LOGIN의PHP : "정의되지 않은 상수 COOKIE_LOGIN 사용"이 문제를 해결하려면 어떻게해야합니까?

사용 - 가정 'COOKIE_LOGIN'

//Destroy Cookie 
if (isset($_COOKIE[COOKIE_LOGIN]) && !empty($_COOKIE[COOKIE_LOGIN])) 
    setcookie(COOKIE_LOGIN,$objUserSerialized,time() - 86400); 

잘 모르겠어요 내가 무엇부터 시작해야 할 지 모르기 때문에 실제로 이것을 변경해야 할 필요가 있으므로 문제를 추적 할 수 없습니다.

감사합니다.

+0

참고 사항 [이 오류 메시지의 원인에 대한 정식 답장 시도] (http://stackoverflow.com/questions/2941169/what-does-the-php-error-message-notice-use-of- undefined-constant-mean/8025500 # 8025500). –

답변

8

당신은 따옴표로 배열 키를 둘러싸고해야합니다

if (isset($_COOKIE['COOKIE_LOGIN']) && !empty($_COOKIE['COOKIE_LOGIN'])) 
    setcookie('COOKIE_LOGIN',$objUserSerialized,time() - 86400); 

PHP 문자열에 알 수없는 리터럴을 변환하고 경고를 발생합니다. php.ini에는 아마도 경고를 표시하지 않는 수준의 오류가 있었지만 다른 사람이 경고를 표시하거나 업데이트했을 수 있습니다. 두 경우 모두,이 경우에는 PHP의 동작에 대해 advantange를 사용하는 것은 나쁜 습관입니다.

자세한 내용은 the php documentation 체크 아웃 :

항상 문자열 리터럴 배열 인덱스 주위에 따옴표를 사용합니다. 예를 들어 $ foo [ 'bar']는 정확하지만 $ foo [bar]는 정확하지 않습니다.

이것은 잘못되었지만 작동합니다. 그 이유는이 코드에는 문자열 ('bar'- 따옴표가 있음)이 아닌 정의되지 않은 상수 (bar)가 있기 때문입니다. PHP는 나중에 불행하게도 그러한 코드에 대해 같은 이름을 갖는 상수를 정의 할 수 있습니다. 그것은 PHP가 자동적으로 노출 된 문자열 (알려진 기호와 일치하지 않는 인용되지 않은 문자열)을 노출 된 문자열을 포함하는 문자열로 자동 변환하기 때문에 작동합니다. 예를 들어 bar라는 정의 된 상수가 없다면 PHP는 'bar'문자열을 대신 사용합니다. COOKIE_LOGIN 사용자가 정의한 것을 실제 상수가 아닌

1

당신은 오류없이 $_COOKIE[COOKIE_LOGIN] 말할 수 없다, 예를 들면 :

$ary[example] = 5; 
echo $ary[example]; 
:

define("COOKIE_LOGIN", 5); 

어떤 사람들은 같은 코드를 작성합니다 습관이

"예"(문자열로)가 배열 키라고 가정합니다. PHP는 과거에 오류보고를 사용하지 않으면이 동작을 허용했습니다. 그래도 틀렸어. COOKIE_LOGIN을 상수로 명시 적으로 정의한 경우가 아니면 $_COOKIE["COOKIE_LOGIN"]을 사용해야합니다.

관련 문제