php-cli와 php-fpm 간의 OCI8 문자 집합 동작 교리

php-cli와 php-fpm 간의 OCI8 문자 집합 동작 교리

내 Oracle 데이터베이스는 (선택되지 않음)에 있습니다 ISO8859-1.

나는 php-fpm며칠 동안 세그폴트로 어려움을 겪고 있습니다. 그것이 어디서 왔는지 알아보기 위해 ENV다음 변수를 사용하여 두 개의 병렬 환경을 설정했습니다.

NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P15

PHP 버전: 5.6.12

PHP-CLI

개발 서버는 다음과 같이 시작됩니다.

php -S localhost:8081 web/app_dev.php

PHP-FPM

풀 구성 발췌:

[www]
env[NLS_LANG] = AMERICAN_AMERICA.WE8ISO8859P15
listen = 127.0.0.1:9000

교의

charset: null

이제 JSON특수 문자가 포함된 API를 요청합니다.

  • php-cli json_encode오류 가 있습니다 Malformed UTF-8 characters, possibly incorrectly encoded(유효한 오류인 것 같습니다. 데이터가 utf8이 아닙니다).
  • 모든 것이 php-fpm잘 작동하지만 특수 문자가 대체( é로 변경 e)됩니다. 이유는 무엇입니까?

php-cli보다 안정적인 것으로 보이는 이 문제를 해결하려고 시도하면 (임의의 502 오류가 많이 발생함 php-fpm) 두 가지 옵션이 있습니다.

  • JsonResponse.phpISO8859-1에서 UTF-8(추악함)로 인코딩 조정
  • 클라이언트 문자 집합을 다음으로 설정합니다.UTF8

두 번째 해결책이 첫 번째인 것 같습니다. 이제 교리 구성은 다음과 같습니다.

charset: UTF8
  • php-cli이제 예상대로 작동하므로 모든 것이 훌륭합니다!
  • php-fpmOracle 관련 오류로 인해 실패합니다.

[2015-08-25 13:56:54] php.DEBUG: oci_connect(): OCIEnvNlsCreate()가 실패했습니다. 시스템에 문제가 있습니다. LD_LIBRARY_PATH에 Oracle Instant Client 라이브러리용 디렉토리가 포함되어 있는지 확인하십시오.

[2015-08-25 13:56:54] php.DEBUG: oci_connect(): ORA-12715 오류에 대한 텍스트를 검색하는 중 오류가 발생했습니다.

ORA-12715는 "지정된 문자 세트가 유효하지 않습니다"입니다. LD_LIBRARY_PATH여기서는 문제가 되지 않습니다.

여기서 무슨 문제가 있습니까? php-fpm이 오류가 맞나요? php-cli와 사이에서 동일한 동작을 얻으려면 이 문제를 어떻게 해결해야 합니까 php-fpm?

관련 정보