php-cliとphp-fpm間のOCI8キャラクタセット動作の教義

php-cliとphp-fpm間のOCI8キャラクタセット動作の教義

私のOracleデータベースは(選択されていません)にありますISO8859-1

私はphp-fpm数日間セグフォルトで苦労しています。それがどこから来たのかを調べるために、ENV次の変数を使用して2つの並列環境を設定しました。

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)、2つのオプションがあります。

  • JsonResponse.phpISO8859-1からUTF-8(醜い)へのエンコーディングの調整
  • クライアント文字セットを次に設定します。UTF8

2番目の解決策が最初のようです。今、教義の構成は次のとおりです。

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

ベストアンサー1

おすすめ記事