如何解决php putenv() 返回不一致的值
我有一个连接到 Oracle 数据库的 PHP,我需要设置 NLS_LANG
变量。在我的 PHP 中,我将其设置为:
putenv("NLS_LANG=American_America.UTF8");
$oracle = $this->load->database('oracle',TRUE);
//do some query after this
但是返回的值不一致。一次回来
array(1) { [0]=> object(stdClass)#17 (1) { ["USERENV('LANG')"]=> string(2) "US" } } //this is correct
几次刷新后它返回
array(1) { [0]=> object(stdClass)#17 (1) { ["USERENV('LANG')"]=> string(2) "GB" } } //this is from my PC language setting
我用来检查 LANG
的查询是:
SELECT userenv('LANG') FROM DUAL;
有什么办法可以在不改变我的电脑语言的情况下让它工作吗?
我的配置是:
- PHP 7.4 (XAMPP)
- OCI8 2.2.0
- 赢 7
- CodeIgniter 3.1.11
注意:我也尝试过使用 $_ENV
但结果也不一致。
解决方法
该变量应该在 PHP 启动之前设置。来自OCI8 documentation:
在启动 Web 服务器之前,OCI8 通常需要几个 Oracle 环境变量(见下文)来定位库、指向配置文件并设置一些基本属性,例如 Oracle 库使用的字符集。必须在任何 PHP 进程启动之前设置变量。
这是因为在流程开始后设置它们会导致只有专家才能预测的行为。
为了退缩,您可能想使用 AL32UTF8,这是 Oracle 对 UTF 8 的名称。然后,从 oci_connect()
手册页,您可以将字符集作为参数传递 - 建议这样做:>
传递这个参数可以减少连接所用的时间。
除非您需要覆盖国家和地区组件,否则您可以让它们默认。
如果您确实需要设置 NLS_LANG,请在某些 Windows 系统环境设置中执行此操作,以便在 Apache 启动时,它具有可用的值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。