打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Eros Live ? Use PassEnv to Pass Environment V...

今天在迁移服务器的时候遇到一个很诡异的问题,原来一切正常的程序在新的服务器上中文乱码。

一段 ruby 写的 cgi script 通过 DBI 访问 oracle 数据库, 将查询得到的记录输出到页面。数据库编码是 gbk, 需要通过 Iconv.conv('utf-8', 'gbk', str) 将字符串转换成 utf-8 输出。oracle 相关的环境变量已经设置好。

export LANG=zh_CN.UTF-8
export NLS_LANG=American_America.zhs16cgb231280
export ORACLE_HOME=/home/oracle/oracle/product/10.2.0/client_1
export LD_LIBRARY_PATH=/home/oracle/oracle/product/10.2.0/client_1/lib:$LD_LIBRARY_PATH

在 shell 里执行该 cgi script 中文能够正常显示,但是通过 apache (非root, oracle用户)执行却出现乱码,而且在 apache 下中文都变成了问号。

初步判断是数据库中的字符在目标字符集下没有对应的代码,通常情况就是 iso-8859-1, 那么估计是设置的 oracle 客户端字符集环境变量没有被带到 apache 执行环境中。在网上 google 到如下:

see http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/mod_env.html#passenv

PassEnv 指令

说明
传送shell中的环境变量

语法
PassEnv env-variable [env-variable] ...

作用域
server config, virtual host, directory, .htaccess

覆盖项
FileInfo

状态
基本(B)

模块
mod_env

从调用httpd进程所在的shell中,指定一个或者更多个环境变量,传送到CGI脚本和SSI页面。例如:

示例

PassEnv LD_LIBRARY_PATH

SetEnv 指令

说明
设置环境变量

语法
SetEnv env-variable value

作用域
server config, virtual host, directory, .htaccess

覆盖项
FileInfo

状态
基本(B)

模块
mod_env

设置一个环境变量,该变量将会传送到CGI脚本和SSI页面。例如:

示例

SetEnv SPECIAL_PATH /foo/bin

这样在 $APACHE_HOME/conf/httpd.conf 中加入

PassEnv ORACLE_HOME
PassEnv LD_LIBRARY_PATH
PassEnv LANG
PassEnv NLS_LANG


SetEnv LANG zh_CN.UTF-8
SetEnv NLS_LANG American_America.zhs16cgb231280
SetEnv ORACLE_HOME /home/oracle/oracle/product/10.2.0/client_1
SetEnv LD_LIBRARY_PATH /home/oracle/oracle/product/10.2.0/client_1/lib:$LD_LIBRARY_PATH

问题都得到了解决

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
linux环境变量设置方法总结(PATH/LD
云计算学习路线教程大纲课件:关于HTTP Server
ORACLE profile编辑
oracle RMAN 备份恢复总结
TUXEDO学习总结(1) - 360度杀毒的日志 - 网易博客
不安装oracle client客户端通过plsql developer连接oracle(navicat for oracle )
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服