작은숲:위키노트/PHP 5.6/하위 호환성이 없는 변경 사항

큰숲백과, 나무를 보지 말고 큰 숲을 보라.

이 글은 http://php.net/manual/en/migration56.incompatible.php의 내용을 번역한 것입니다.

원문의 저작권은 the PHP Documentation Group에게 있으며, 이 글의 라이선스는 원문의 라이선스(Creative Commons Attribution 3.0 License)를 따릅니다.

대부분의 기존 PHP 5 코드는 제대로 동작하겠지만, PHP 5.6에서는 다음과 같은 하위 호환성이 없는 변경 사항이 있다.

배열 리터럴을 사용하여 배열의 키 덧쓰기 금지

이전 버전에서는 클래스 속성(property)으로 선언된 배열에서 명시적인 키와 암묵적인 키가 혼재하는 경우, 명시적으로 지정한 키와 암묵적인 키가 중복되면 그냥 덧쓰여진다. 하지만 PHP 5.6부터는 이런 경우 덧쓰지 않는다.

<?php
class C {
    const ONE = 1;
    public $array = [
        self::ONE => 'foo',
        'bar',
        'quux',
    ];
}var_dump((new C)->array);
?>

PHP 5.5 이하에서는 출력값이 아래와 같다.

array(2) {
  [0]=>
  string(3) "bar"
  [1]=>
  string(4) "quux"
}

하지만 PHP 5.6에서는 아래와 같이 출력된다.

array(3) {
  [1]=>
  string(3) "foo"
  [2]=>
  string(3) "bar"
  [3]=>
  string(4) "quux"
}

json_decode() 함수의 엄격한 적용

이제 json_decode() 함수는 true, false, null와 같은 JSON 리터럴에 대해 모두 소문자만 받아들인다. 이는 JSON의 사양에 근거하는 것이다. 이외의 경우에는 json_last_error() 함수에 에러가 설정된다. 이전 버전의 json_decode() 함수는 대문자나 대소문자가 섞인 경우에도 받아들였다. 이 문제는 부적합한 형식의 JSON을 json_decode() 함수에 전달하는 경우에만 발생한다. 적합한 형식의 JSON은 별문제 없이 그대로 처리된다.

SSL/TLS를 사용하는 경우 스트림 래퍼가 피어 인증서와 호스트 이름을 자동으로 검증

암호화된 모든 클라이언트 스트림에서 피어 검증이 자동으로 적용된다. 일반적으로 OpenSSL의 기본 CA 번들로 피어 증명서를 검증한다. OpenSSL가 잘 알려진 CA 번들을 사용하도록 설정되어 있기 때문에, 올바른 SSL 증명서를 가진 서버와 통신한다면 크게 신경 쓰지 않아도 된다. 전역 설정에서 openssl.cafile 또는 openssl.capath 지시자를 설정해 기본 CA 번들을 덧쓸 수도 있다. 아니면 콘텍스트 옵션(context options) cafile이나 capath를 사용하면 요청 단위로 변경할 수 있다. 권장하지는 않지만, 콘텍스트 옵션 verify_peerFALSE로 설정하면 피어 인증서 검증을 하지 않을 수도 있다. 그리고 콘텍스트 옵션 verify_peer_nameFALSE로 하면 피어 이름 검증을 하지 않는다.

GMP 리소스가 객체로 변경

GMP 리소스가 객체가 되었다. GMP 확장 기능에서 구현되어 있는 API가 변경되지는 않았으며 기존 코드를 손보지 않아도 그대로 동작한다. 그러나 is_resource() 함수를 써서 리소스인지를 명시적으로 검사하는 경우에는 주의해야 한다.

Mcrypt 함수에서 유효한 키와 IV 필요

mcrypt_encrypt(), mcrypt_decrypt(), mcrypt_cbc(), mcrypt_cfb(), mcrypt_ecb(), mcrypt_generic(), mcrypt_ofb() 함수들은 더 이상 부적합한 크기의 키와 IV을 받아들이지 않는다. IV가 필요한 블록 암호화 모드에서 IV가 지정되지 않은 경우에도 오류가 발생한다.

cURL에서 파일 업로드

@file 구문을 사용해 파일을 업로드 하기 위해서는 CURLOPT_SAFE_UPLOADFALSE로 설정해야 한다. @file 구문 대신 CURLFile 클래스를 쓰는 것이 좋다.

이 작은숲 문서의 출처는 위키노트의 위키노트/PHP 5.6/하위 호환성이 없는 변경 사항 문서입니다.