微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php putenv() 返回不一致的值

如何解决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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?