2011-04-07 3 views
0

난이 오류가 글로벌 변수를 등록하는 스크립트는 아마도 PHP 4.2.3까지 존재 세션 부작용에 의존합니다. register_globals가 활성화되어 있지 않으면 세션 확장에서 전역 변수를 데이터 소스로 간주하지 않습니다. session.bug_compat_42 또는 session.bug_compat_warn을 각각 0으로 설정하는 Unknown으로 설정하여이 기능과이 경고를 비활성화 할 수 있습니다.어떻게 PHP 세션

이에 따르면 전역 변수를 활성화 (등록)해야합니까? 어떻게해야합니까? 오류가 처음 발생하는 이유는 무엇입니까?

답변

5

PHP 문서의 VERY 상단에서 session_start()를 호출합니까?

PHP 매뉴얼에 따르면 session_register() 함수는 PHP 5.3.0부터 사용되지 않으므로 사용하지 않는 것이 좋습니다.

대신

$ _SESSION [ '개'] = "우와"같은 일을 할;

하지만 문서의 다른 내용보다 먼저 session_start()를 호출해야합니다!

+0

의 시작에서

사용 session_start() 네, 모든 스크립트의 상단에, 내가 바로 코드의 첫 번째 행으로 맨 위에으로 session_start()를 가지고있다. – dave

+0

스크립트의 변수 중 SESSION 변수 중 하나와 동일한 이름을 공유합니까? – Jonathan

+0

그래서 일단 사용자가 홈페이지에 접속하면 session_start()를 호출해야합니까? 양식 데이터를 입력하지 않은 경우에도 사용할 수 있습니까? – dave

-1

레지스터 전역 변수는 _POST/_GET/_SESSION의 변수가 자신의 이름으로 전역 범위로 정의되도록하는 방법이었습니다. _SESSION에서 오는 변수의 사용법을 본 적이 없거나 사용하지 못했습니다. 그러나 해결책은 같습니다. PHP는 파일 경로 & 라인을 발표해야합니다. 따라서이 비추천 기능을 사용하지 않으려면 코드를 리펙토링하면됩니다.

+0

이 문제를 이해하고 어떤 방식 으로든 해결하는 데 도움이되지 않았습니다 ... – dave

+0

@Dave - Jonathan이 실제로 당신의 솔루션에 더 가깝습니다. 모든 session_register 호출을 없애고 session_register ("someVar")를 _SESSION [ 'someVar'] = $ someVar;로 바꿉니다. – David

+0

네, 그에게 포인트를 주었고 아래로 말했습니다. 문제는 세션 배열 인덱스를 초기화되지 않은 변수로 설정했기 때문입니다. – dave

-1

글로벌 변수는 더 이상 고려 정상적인 사용합니다. 모든 종류의 관리 문제, 메모리 할당 문제가 발생할 수 있습니다. PHP의 일반적인 관행은 대신 Session 변수를 사용하는 것입니다 ($ _SESSION [ "variable_name"]). 당신이 정말로 당신의 마음을 글로브에 설정했다면, 당신은 php.ini에서 그것들을 가능하게 할 수 있습니다.

0

PHP 지시문에서 register_globals를 활성화 한 후. PHP

$barney = "you can try this"; 
session_register("barney"); 

// Use of $_SESSION is preferred, as of PHP 4.1.0 
$_SESSION["hotel"] = "Starling"; 

// The old way was to use $HTTP_SESSION_VARS 
$HTTP_SESSION_VARS["email"] = "[email protected]";