PHP7.1 윈도우 지원

Support for long and UTF-8 path

웹 응용 프로그램이 UTF-8을 준수하는 경우 추가 작업이 필요하지 않습니다. I/O에 대한 비 UTF-8 인코딩의 경로에 의존하는 애플리케이션의 경우 명시적 INI 지시문이 설정되어야 합니다. 인코딩 INI 설정 확인은 코어의 순서에 따라 달라집니다.

  • internal_encoding
  • default_charset
  • zend.multibyte

코드 페이지 처리를 위한 여러 기능이 도입되었습니다.

  • sapi_windows_cp_set() to set the default codepage
  • sapi_windows_cp_get() to retrieve the current codepage
  • sapi_windows_cp_is_utf8()
  • sapi_windows_cp_conv() to convert between codepages, using iconv() compatible signature

이러한 함수는 스레드로부터 안전합니다.

콘솔 출력 코드 페이지는 PHP에서 사용되는 인코딩에 따라 조정됩니다. 구체적인 시스템 OEM 코드 페이지에 따라 보이는 출력이 정확하지 않을 수도 있습니다. 예를 들어 기본 cmd.exe 및 OEM 코드 페이지 437이 있는 시스템에서 UTF-8을 사용할 때 코드 페이지 1251, 1252, 1253 및 기타 일부의 출력이 올바르게 표시될 수 있습니다. 동일한 시스템에서 20932와 같은 코드 페이지의 문자는 아마도 올바르게 표시되지 않을 것입니다. 이것은 코드 페이지, 글꼴 호환성 및 사용된 특정 콘솔 프로그램에 대한 특정 시스템 규칙을 나타냅니다. PHP는 php.ini의 인코딩 규칙에 따라 콘솔 코드 페이지를 자동으로 설정합니다. cmd.exe 대신 대체 콘솔을 직접 사용하면 경우에 따라 더 나은 경험을 얻을 수 있습니다.

그럼에도 불구하고 요청 시작 후 런타임 코드 페이지 전환은 CLI에 예기치 않은 부작용을 가져올 수 있습니다. 선호하는 방법은 php.ini입니다. PHP CLI가 콘솔 에뮬레이터에서 사용될 때 유니코드를 지원하지 않는 경우 콘솔 코드 페이지 변경을 피하기 위해 필요할 수 있습니다. 이를 달성하는 가장 좋은 방법은 ANSI 코드 페이지에 해당하도록 기본 또는 내부 인코딩을 설정하는 것입니다. 또 다른 방법은 INI 지시문 output_encoding 및 input_encoding을 필요한 코드 페이지로 설정하는 것입니다. 이 경우 내부 코드 페이지와 I/O 코드 페이지의 차이로 인해 mojibake가 발생할 수 있습니다. 드문 경우지만 PHP가 정상적으로 충돌하면 원래 콘솔 코드 페이지가 복원되지 않을 수 있습니다. 이 경우 chcp 명령을 사용하여 수동으로 복원할 수 있습니다.

DBCS 시스템에 대한 특별 인식 - ini_set()을 사용하는 런타임 시 코드 페이지 전환은 표시 문제를 일으킬 수 있습니다. 비 DBCS 시스템과의 차이점은 확장 문자를 표시하려면 두 개의 콘솔 셀이 필요하다는 것입니다. 어떤 경우에는 글꼴의 상형 문자 집합으로의 문자 매핑만 발생할 수 있으며 실제 글꼴은 변경되지 않습니다. 이것은 DBCS 시스템의 특성이며 표시 문제를 방지하는 가장 간단한 방법은 코드 페이지 변경에 대해 ini_set() 사용을 피하는 것입니다.

스트림에서 UTF-8 지원의 결과로 PHP 스크립트는 더 이상 ASCII 또는 ANSI 파일 이름으로 제한되지 않습니다. 이는 CLI에서 즉시 지원됩니다. 다른 SAPI의 경우 해당 서버에 대한 문서가 유용합니다.

긴 경로 지원은 투명합니다. 260바이트보다 긴 경로에는 자동으로 \\?\ 접두사가 붙습니다. 최대 경로 길이는 2048바이트로 제한됩니다. 경로 세그먼트 제한(기본 이름 길이)은 계속 유지됩니다.

최상의 이식성을 위해 파일 이름, I/O 및 기타 관련 주제를 UTF-8로 처리하는 것이 좋습니다. 또한 콘솔 응용 프로그램의 경우 TrueType 글꼴을 사용하는 것이 좋으며 코드 페이지 변경을 위해 ini_set()을 사용하는 것은 권장하지 않습니다.


readline

readline 확장» WinEditLine 라이브러리를 통해 지원됩니다. 따라서 대화형 CLI 셸도 지원됩니다(php.exe -a).


PHP_FCGI_CHILDREN

이제 PHP_FCGI_CHILDREN이 존중됩니다. 이 환경 변수가 정의되면 첫 번째 php-cgi.exe 프로세스가 지정된 수의 자식을 실행합니다. 이들은 동일한 TCP 소켓을 공유합니다.


ftok()

ftok()에 대한 지원 추가