왜 이런 일이 발생합니까?
시간이 지남에 따라 PHP는 보안에 중점을 둔 언어가되었습니다. 기본적으로 꺼져 있던 설정은 이제 기본적으로 켜져 있습니다. 이것의 완벽한 예 E_STRICT
는 PHP 5.4.0부터 기본적으로 켜져 있습니다.
또한 PHP 문서에 따르면 E_NOTICE
php.ini 에서는 기본적 으로 비활성화되어 있습니다. PHP 문서 는 디버깅을 위해 켜는 것이 좋습니다 . 그러나 우분투 리포지토리와 BitNami의 Windows 스택에서 PHP를 다운로드하면 다른 것이 보입니다.
; Common Values:
; E_ALL (Show all errors, warnings and notices including coding standards.)
; E_ALL & ~E_NOTICE (Show all errors, except for notices)
; E_ALL & ~E_NOTICE & ~E_STRICT (Show all errors, except for notices and coding standards warnings.)
; E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR (Show only errors)
; Default Value: E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
; Development Value: E_ALL
; Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT
; http://php.net/error-reporting
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
공지 사항 error_reporting
실제로 기본적으로 생산 값으로 설정하지 기본적으로 "기본"값으로 설정합니다. 이것은 다소 혼란스럽고 php.ini 외부에서 문서화되지 않았으므로 다른 배포판에서 이것을 검증 하지 않았습니다 .
그러나 귀하의 질문에 대답하기 위해이 오류는 이전에 팝업되지 않았을 때 나타납니다.
PHP를 설치했고 새로운 기본 설정이 다소 문서화되어 있지 않지만 제외하지는 않습니다 E_NOTICE
.
E_NOTICE
정의되지 않은 변수 및 정의되지 않은 인덱스와 같은 경고는 실제로 코드를 더 깨끗하고 안전하게 만드는 데 도움이됩니다. 몇 년 전, E_NOTICE
활성화 상태를 유지 하면 변수를 선언해야한다고 말할 수 있습니다 . 그것은 C를 배우기가 훨씬 쉬워졌고 변수를 선언하지 않았기 때문에 귀찮은 것보다 컸습니다.
IT에 대해 무엇을 할 수 있습니까?
E_NOTICE
"기본값"을 복사 E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
하고 등호 로그인 후 현재 주석 처리되지 않은 값으로 바꾸어 끄십시오 error_reporting =
. CGI 또는 FPM을 사용하는 경우 Apache 또는 PHP를 다시 시작하십시오. "옳은"php.ini를 편집하고 있는지 확인하십시오. PHP-FPM을 실행하는 경우 Apache, fpm 또는 php-fpm, PHP-CGI를 실행하는 경우 cgi 등을 사용하여 PHP를 실행하는 경우 올바른 방법은 Apache입니다. 권장되는 방법은 아니지만 레거시 코드가있는 경우 편집하기가 매우 어려우면 최선의 방법 일 수 있습니다.
E_NOTICE
파일 또는 폴더 레벨을 끄십시오 . 레거시 코드가 있지만 "올바른"방식으로 작업을 수행하려는 경우이 방법이 더 좋습니다. 이를 위해서는 Apache2, Nginx 또는 선택한 서버가 무엇이든 상담해야합니다. Apache에서는 php_value
내부를 사용 <Directory>
합니다.
깔끔하게 코드를 다시 작성하십시오. 당신은 프로덕션 환경으로 이동하는 동안이 작업을 수행해야하거나, 당신의 오류를보고 사람을 하시겠습니까 오류의 표시를 해제하고, 만하지 않으면 로그인 (참조하여 오류 display_errors
및 log_errors
php.ini 파일과 서버 설정) .
옵션 3을 확장하려면이 방법이 이상적입니다. 이 길을 갈 수 있다면해야합니다. 처음에이 경로를 사용하지 않는 경우 개발 환경에서 코드를 테스트하여이 경로를 이동하는 것이 좋습니다. 당신이 그것에있는 동안 , 미래에 무엇이 잘못 될 수 있는지 제거 ~E_STRICT
하고 ~E_DEPRECATED
보십시오. 익숙하지 않은 오류가 많이 있지만 앞으로 PHP를 업그레이드해야 할 때 불쾌한 문제가 발생하는 것을 막을 수 있습니다.
오류는 무엇을 의미합니까?
Undefined variable: my_variable_name
-사용하기 전에 변수를 정의하지 않았을 때 발생합니다. PHP 스크립트가 실행될 때 내부적으로는 null 값을 가정합니다. 그러나 어떤 시나리오에서 변수를 정의하기 전에 확인해야합니까? 궁극적으로 이것은 "느슨한 코드"에 대한 논쟁입니다. 개발자는 변수가 정의 될 수있는 범위 내에서 변수가 높은 것으로 정의 된 오픈 소스 프로젝트를 볼 때이를 좋아한다고 말할 수 있습니다. 앞으로 어떤 변수가 나타날지 쉽게 알 수 있으며 코드를 쉽게 읽고 배울 수 있습니다.
function foo()
{
$my_variable_name = '';
//....
if ($my_variable_name) {
// perform some logic
}
}
Undefined index: my_index
-배열의 값에 액세스하려고하는데 존재하지 않는 경우에 발생합니다. 이 오류를 방지하려면 조건부 검사를 수행하십시오.
// verbose way - generally better
if (isset($my_array['my_index'])) {
echo "My index value is: " . $my_array['my_index'];
}
// non-verbose ternary example - I use this sometimes for small rules.
$my_index_val = isset($my_array['my_index'])?$my_array['my_index']:'(undefined)';
echo "My index value is: " . $my_index_val;
또 다른 옵션은 함수 맨 위에 빈 배열을 선언하는 것입니다. 항상 가능하지는 않습니다.
$my_array = array(
'my_index' => ''
);
//...
$my_array['my_index'] = 'new string';
(추가 팁)
- 이 문제와 다른 문제가 발생했을 때 NetBeans IDE (무료)를 사용 하여 많은 경고와 통지를 받았습니다. 그들 중 일부는 매우 유용한 팁을 제공합니다. 이것은 요구 사항이 아니며 대규모 프로젝트를 제외하고는 더 이상 IDE를 사용하지 않습니다. 나는 요즘 더 많은
vim
사람입니다 :).