php-cli 和 php-fpm 之间的 Doctrine OCI8 字符集行为

php-cli 和 php-fpm 之间的 Doctrine 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.php编码从 ISO8859-1 到 UTF-8(丑陋)
  • 将客户端字符集设置为UTF8

第二个解决方案似乎是第一个,现在的学说配置是:

charset: UTF8
  • php-cli现在按预期工作,一切都很棒!
  • php-fpm失败并出现 Oracle 相关错误:

[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

相关内容