我的 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
?