从浏览器调用时,用于查询unixODBC的PHP脚本使用不正确的UTF-8设置,但可以在Linux命令提示符下正常工作

问题描述

我们正在尝试使用PHP与Progress数据库进行接口,以使用PHP插入,检索,更新和删除多种语言的字符串。 这是有效的方法

  1. 我们可以使用unixODBC和isql进行连接,并运行更新脚本来更新具有Unicode字符的字段,并且效果很好。
  2. 从命令行运行PHP脚本,该命令行将运行更新脚本,以使用也可以正常工作的unicode字符更新字段。
  3. 如果我们有一个网络服务器调用与上述2)完全相同的PHP脚本,它将使用表中的值更新表中的记录,该值将是Unicode的额外编码。 unixODBC存在一个已知问题,该问题曾经对unicode值进行双重编码,而我们正在使用的平台版本最初是较旧版本的驱动程序,但有此问题。我们安装了没有问题的较新的unixODBC驱动程序(我相信是2.3.9),现在isql和命令行PHP可以正常工作。 我们怀疑的是,即使我们试图通过将定义添加到LD_LIBRARY_PATH,ODBCINI和ODBCINST中作为httpd的一部分来确保Web服务器仍使用我们为LD_LIBRARY_PATH,ODBCINI和ODBCINST设置的环境变量,该Web服务器仍在使用旧版本的unixODBC。阿帕奇。

我希望这个问题Cannot Connect to informix through ODBC on linux machine上被列为Edit3Solution的解决方案能够为我解决问题,但是我们已经采取了将环境变量添加到httpd但没有骰子的步骤。

In the PHPinfo from a browser,we see:
Apache Environment
Variable    Value
LD_LIBRARY_PATH /usr/lib:/dr01/repository/lib:/qad/progress/dlc11264/lib
ODBCINST    /etc/odbcinst.ini
ODBCINI /etc/odbc.ini

但是我们也看到:

ODBC 
Support enabled
Active Persistent Links 0
Active Links    0
ODBC library    unixODBC
ODBC_INCLUDE    -I/usr/include
ODBC_LFLAGS -L/usr/lib64
ODBC_LIBS   -lodbc

解决此问题,我们尝试将/ usr / lib64目录中odbc相关代码的虚拟路径设置为/ odbc相关文件的/ usr / lib目录中的虚拟路径。

到目前为止,还没有运气。行为是相同的。 Apache服务器是否有可能在调用PHP时忽略了我们在服务器上定义的unixODBC,从而使用了自己的unixODBC?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)