标签: oci8

使用Oracle,PHP和Oci8处理eacute和其他特殊字符

嗨,我正在尝试将名称存储到Oracle数据库中,并使用PHP和oci8将其获取回来.

但是,如果我é直接插入Oracle数据库并使用oci8来获取它我只是收到一个e

在插入数据库之前,我是否必须将所有特殊字符(包括é)编码为html实体(即:):é或者我错过了什么?

谢谢


更新:3月1日18:40

发现这个功能:http: //www.php.net/manual/en/function.utf8-decode.php#85034

function charset_decode_utf_8($string) {
    if(@!ereg("[\200-\237]",$string) && @!ereg("[\241-\377]",$string)) {
        return $string;
    }
$string = preg_replace("/([\340-\357])([\200-\277])([\200-\277])/e","'&#'.((ord('\\1')-224)*4096 + (ord('\\2')-128)*64 + (ord('\\3')-128)).';'",$string);
$string = preg_replace("/([\300-\337])([\200-\277])/e","'&#'.((ord('\\1')-192)*64+(ord('\\2')-128)).';'",$string);
return $string;
}
Run Code Online (Sandbox Code Playgroud)

似乎工作,虽然不确定它是否是最佳解决方案


更新:3月8日15:45

Oracle的字符集是ISO-8859-1.
在PHP中我添加了:

putenv("NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1");
Run Code Online (Sandbox Code Playgroud)

强制oci8连接使用该字符集.é从PHP中检索使用oci8现在工作了!(因为varchars,但不是CLOBs必须utf8_encode提取它)
所以然后我尝试将数据从PHP保存到Oracle ...它不起作用..从PHP到Oracle的过程中的é某个地方变成了?


更新时间:3月9日14:47

所以越来越近了.添加NLS_LANG变量后,执行带有é工作的直接oci8插入.

问题实际上是在PHP方面.通过使用ExtJs框架,在提交表单时,使用它对其进行编码encodeURIComponent.
因此é被发送%C3%A9,然后重新编码成é.
但它的长度现在是2 (strlen($my_sent_value) = 2)而不是1.如果在PHP中我尝试:$ my_sent_value == …

php oracle oci8 utf-8 character-encoding

5
推荐指数
1
解决办法
9270
查看次数

oci_connect PHP中的空白页面

更新(5/21/2010)成功!

所以在MUCH $ head-> desk()之后,我已经解决了.

记住孩子,要警惕你使用的即时客户端版本,这取决于虚拟化设置!

我一直在安装通用的即时客户端(不知道我们的ESX服务器位于AMD处理器上,而不是英特尔),而且内部工作正常(CentOS安装是32位,因为我们的内部ESXi服务器不是64位).好吧,即使您在位于AMD64上的虚拟化服务器上​​运行32位安装,您安装的即时客户端仍然很重要.

这是我想要检查的最后一件事但是看起来现在一切都运行正常.

我要感谢所有帮助我完成所有可能测试的人,但最终,我没有意识到虚拟化的差异.


更新(2010年5月21日) 当我在内部安装新VM时,我认为这个错误已经逃脱了,但我现在发现了一个缩小的链接.

当我发布这个时,我试图在我们的生产服务器上安装它.经过一周没有进展并且需要重新开发之后,我在我们的内部服务器上配备了一个全新安装的Crap ... CentOS,以及全新安装的即时客户端和oci8.

工作得很完美.

但是,我们只是将VM的精确副本上传到我们的生产服务器,它神奇地不再有效.尝试重新安装一切,无济于事.

所以我唯一可以解决的问题是防火墙问题(虽然我在尝试127.0.0.1时遇到同样的问题)或可能是ESX(我们的生产服务器)服务器问题,但内部服务器正在运行ESXi.

有什么想法吗?

更新(2010年3月8日)我安装了Xdebug并让它跟踪我的代码.这是我得到的输出:

TRACE START [2010-03-08 17:53:05]
    0.2090     327864   -> {main}() /data/aims3/http/octest.php:0
    0.2091     327988     -> ini_set(string(14), string(1)) /data/aims3/http/octest.php:3
    0.2093     327920     -> error_reporting(long) /data/aims3/http/octest.php:4
    0.2094     328048     -> oci_connect(string(8), string(8), string(25)) /data/aims3/http/octest.php:6
Run Code Online (Sandbox Code Playgroud)

跟踪在此时停止.

我已经在本地服务器上以相同的方式安装了一切,它工作正常.说我完全失败就会轻描淡写.


*注意:我运行了make test并且在每次测试时都返回了FAIL.我从来没有在我的工作机器上运行它,看它是否报告相同的错误.知道为什么make test会报告FAIL但是make不会报告任何错误吗?

我已经安装了没有报告错误的Oracle Instantclient以及OCI8 PECL软件包而且不知所措.每当我尝试使用oci_connect打开连接时,它都会暂停我的整个PHP脚本.

例:

<?php
ini_set ("display_errors", "1");
error_reporting(E_ALL);
echo "before";
$conn = oci_connect("username", "password", "host");
echo "after";
?>
Run Code Online (Sandbox Code Playgroud)

返回一个完整的空白页面.加载模块(在phpinfo中看到),所有安装都没有错误.

我完全失去了.

CentOS:5.4

Apache:2.2.3

PHP:5.3.1

InstantClient:11.2

oci8:1.4.1

有什么想法吗? …

php oracle pecl oci8

5
推荐指数
1
解决办法
8301
查看次数

如何将OCI8安装到现有的PHP?

根据这个(从PECL安装OCI8,自动化),我所要做的就是输入pecl oci8 install.

但这只会让我反复出现以下错误.

No releases available for package pecl.php.net/oci8.

另一个网站建议我试试pear install pecl/oci8.发生同样的错误.

我该怎么做才能解决这个问题?

php linux oci8

5
推荐指数
1
解决办法
9440
查看次数

如何在xampp 5.6.3中启用oci?

通过XAMPP启动Apache服务器时遇到一些问题。我已经安装了XAMPP版本5.6.3。

当我从xampp控制面板启动Apache服务器时,将显示一条错误消息,如下所示:

图1

单击“确定”按钮后,将显示另一个对话框,如下所示:

图2

事情是我想使用OCI代替mysql。因此,我已注释掉mysql扩展名,并在php.ini文件中未注释OCI扩展名。

图3

php_oci8_12c.dll文件在XAMPP的PHP扩展(EXT)文件夹中唯一可用的文件。因此,如上图所示,该行包含在php.ini中。

从那时起,我得到这个错误。

我也安装了即时客户端12.1,但没有运气。我还尝试从Instantclient_12_1复制OCI.dll并将其粘贴到c:/ xampp / php和c:/ xampp / apache / bin中。该错误仍然存​​在。

需要帮忙..

更新:我删除了环境变量PATH中的其他Oracle路径,仅保留了InstantClient路径。现在我收到此错误。

图4

php xampp dll oci8

5
推荐指数
1
解决办法
2万
查看次数

php-oci8编码问题

已提出类似的问题,但常规解决方案对我不起作用。也许我错过了一些东西。我快要失去理智了:(((

\n\n

从标题中你可以明白,我有一个oracle数据库,其中包含非ascii内容。我想使用oci8用php查询/显示它。

\n\n

首先数据库是ISO8859P9,即查询

\n\n
select parameter, value from v$nls_parameters where parameter in (\'NLS_CHARACTERSET\', \'NLS_LANGUAGE\', \'NLS_TERRITORY\')\n
Run Code Online (Sandbox Code Playgroud)\n\n

回报

\n\n
NLS_LANGUAGE        AMERICAN\nNLS_TERRITORY       AMERICA\nNLS_CHARACTERSER    WE8ISO8859P9\n
Run Code Online (Sandbox Code Playgroud)\n\n

所以我相应地设置了 NLS_LANG 变量,即 getenv("NLS_LANG") 返回“AMERICAN_AMERICA.WE8ISO8859P9”。

\n\n

我插入AddDefaultCharset ISO-8859-9到 /etc/apache2/conf.d/charset 文件,并且我总是包含<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-9">在 php 文件的 html 内容的 head 部分中。因此,当我通过 firebug 检查时,我看到响应的“Content-Type”标头是“text/html; charset=ISO-8859-9”。

\n\n

最后,我在 /etc/php5/apache2/php.ini 文件中有一行default_charset = "ISO-8859-9",在输出 phpinfo() 的核心部分中,我看到 default_charset 是 ISO-8859-9。

\n\n

在完成所有这些内容之后,当我检索其中包含字符的字符串\xc4\xb0并回显它时,它显示为 \'?\'。那就是问题所在!!!当我查询时select dump(nameofthatstring, 16)...,我看到它的字节值为DD,即根据8859-9正确。

\n\n

我不确定它是否相关,但是,我会给出最后的细节:当我 …

php oracle apache2 oci8 character-encoding

4
推荐指数
1
解决办法
1万
查看次数

在Alpinelinux下编译PHP OCI8扩展

我正在尝试编译PHP OCI8扩展并在Alpinelinux下运行它。但似乎扩展对musl libc中定义glibc但缺少的符号有一些依赖性。

我可以使用任何已编译的PHP OCI8扩展名吗?或者,是否有任何变通办法可以使oci8扩展和oracle Instant Client与alpinelinux一起使用。

提前致谢!

php oracle oci8 alpine-linux

4
推荐指数
1
解决办法
2012
查看次数

PHP启动:无法加载动态库'C:\ xampp\php\ext\php_oci8_12c.dll' - 找不到指定的过程

我们在PHP中连接oracle服务器面临一个大问题我做了什么

  • 第1集:

    安装Windows 7 32位

  • 第2步 :

    安装XAMPP 32(包括:Apache 2.4.29,PHP 7.1.11,phpMyAdmin 4.7.4,OpenSSL 1.0.2,XAMPP控制面板3.2.2)

  • 步 :

    Instant Client Package - 基本:运行OCI,OCCI和JDBC-OCI应用程序所需的所有文件下载instantclient-basic-nt-12.2.0.1.0.zip并使用instantclient_12_2名称将其解压缩到c驱动器

  • 第5步:

    在路径"c:\ instantclient_12_2"中设置环境

  • 第6步:

    编辑php.ini文件并从前面启用extension = php_oci8_12c.dll(通过删除分号)

  • 第7步:

    重启我的apache服务器,之后我检查phpinfo()它没有显示任何oci8模块

然后我检查我的错误日志,我看到了这一点

[30-Nov-2017 13:42:43 UTC] PHP Warning:  PHP Startup: Unable to load dynamic library 'C:\xampp\php\ext\php_oci8_12c.dll' - The specified procedure could not be found.
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我解决这个问题,

在此先感谢,对不起我的英语.

php apache oracle oci8 oracle11g

3
推荐指数
1
解决办法
1万
查看次数

如何为xampp安装oracle即时客户端

我安装了XAMPP for Windows 1.7.3.

我正在使用Zend Framework,需要使用pdo_oci8扩展.我已启用扩展 - 但现在得到错误,它无法找到oci.dll文件.

我从oracle下载了instantclient_11_2 zip文件.拉开拉链.它包含一堆dll文件.

如何在Windows上安装它?我是否需要运行cmd提示符或将其移至xampp下的特定文件夹?

php oracle-call-interface oci8

2
推荐指数
1
解决办法
2万
查看次数

PHP oci8无法通过pecl安装:“严重错误:oci8_dtrace_gen.h”

我试图将我的fedora 25网络服务器-php连接到Oracle数据库。

为此,我需要pecl安装oci8。

但是我得到这个错误:

/bin/sh /var/tmp/pear-build-roottqYEC6/oci8-2.1.4/libtool --mode=compile cc  -I. -I/var/tmp/oci8 -DPHP_ATOM_INC -I/var/tmp/pear-build-roottqYEC6/oci8-2.1.4/include -I/var/tmp/pear-build-roottqYEC6/oci8-2.1.4/main -I/var/tmp/oci8 -I/usr/include/php -I/usr/include/php/main -I/usr/include/php/TSRM -I/usr/include/php/Zend -I/usr/include/php/ext -I/usr/include/php/ext/date/lib -I/usr/include/oracle/12.1/client64  -DHAVE_CONFIG_H  -g -O2   -c /var/tmp/oci8/oci8.c -o oci8.lo
libtool: compile:  cc -I. -I/var/tmp/oci8 -DPHP_ATOM_INC -I/var/tmp/pear-build-roottqYEC6/oci8-2.1.4/include -I/var/tmp/pear-build-roottqYEC6/oci8-2.1.4/main -I/var/tmp/oci8 -I/usr/include/php -I/usr/include/php/main -I/usr/include/php/TSRM -I/usr/include/php/Zend -I/usr/include/php/ext -I/usr/include/php/ext/date/lib -I/usr/include/oracle/12.1/client64 -DHAVE_CONFIG_H -g -O2 -c /var/tmp/oci8/oci8.c  -fPIC -DPIC -o .libs/oci8.o
In file included from /var/tmp/oci8/oci8.c:49:0:
/var/tmp/oci8/php_oci8_int.h:46:29: fatal error: oci8_dtrace_gen.h: No such file or directory
 #include "oci8_dtrace_gen.h"
                             ^
compilation terminated.
Makefile:196: recipe for target 'oci8.lo' failed
make: *** …
Run Code Online (Sandbox Code Playgroud)

php lamp pdo oci8 fedora-25

2
推荐指数
2
解决办法
7836
查看次数

无法加载动态库'oci8.so'(PHP 7.2)

自从PHP 7.1更新到PHP 7.2后,我无法安装oci8.我有这个错误:

root @ 3ab6027c8d95:/ var/www #php -v

PHP警告:PHP启动:无法加载动态库'oci8.so'(试过:/usr/local/lib/php/extensions/no-debug-non-zts-20170718/oci8.so(libmql1.so:无法打开)共享对象文件:没有这样的文件或目录),/ usr/local/lib/php/extensions/no-debug-non-zts-1701/170/////-debug-non-zts-20170718/oci8.so.so:无法打开共享对象文件:没有这样的文件或目录))在第0行的Unknown中

PHP 7.2.0(cli)(内置:2017年12月12日05:52:58)(NTS)版权所有(c)1997-2017 PHP Group Zend Engine v3.2.0,版权所有(c)1998-2017 Zend Technologies with Zend OPcache Zend Technologies的v7.2.0,版权所有(c)1999-2017

我正在使用Docker环境,我为此创建了一个github repo,如果我使用PHP的7.1版本(shenron/docker-php-fpm:7.2),它就可以工作.

我不明白为什么脚本试图启动这个文件:/usr/local/lib/php/extensions/no-debug-non-zts-20170718/oci8.so.so.

就我而言,有两种可能性; 或者驱动程序不兼容,或者pecl今天不能安装oci8.

有没有人有同样的问题?

谢谢您的帮助.

php oci8 docker

2
推荐指数
2
解决办法
2万
查看次数

ActiveRecord oracle_enhanced适配器无法加载ruby-oci8库

成功安装ruby-0ci8 gem和oracle_enhanced适配器gem后,当我尝试启动rails项目服务器时出现以下错误:

=> Booting WEBrick
=> Rails 3.0.3 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
Exiting
/Library/Ruby/Gems/1.8/gems/activerecord-oracle_enhanced-adapter-1.3.2/lib/active_record/connection_adapters/oracle_enhanced_oci_connection.rb:7: 
ERROR: ActiveRecord oracle_enhanced adapter could not load ruby-oci8 library. 
Please install ruby-oci8 gem. (LoadError)
Run Code Online (Sandbox Code Playgroud)

enhanded adapter和ruby-oci8 gem都出现在我的gem列表中.两者都存在于我的Gemfile中.为什么适配器找不到oci8库?

关于我正在运行的设置的一些规范:

  • Mac雪豹(10.6.8)
  • Ruby 1.8.7(2009-06-12 patchlevel 174)[i686-darwin10.8.0]
  • Rails 3.0.3
  • ruby-oci8(2.0.4)[宝石]
  • activerecord-oracle_enhanced-adapter(1.3.2)[gem]

我看过这篇文章:Rails 3.0.3 - Oracle_enhanced不起作用.但它没有帮助.其他人遇到这个?

==============================

回答

我明白了.最后,我在/ usr/local/oracle/instantclient_10_2 /中有一个不正确的文件结构,我已经为我的oracle即时客户端存储了文件.这就是造成所有问题的原因.基本上我在第一个目录中嵌套了第二个instantclient_10_2目录,并且我的.bash_profile查找了第一个目录,而不是它下面的目录.

oracle ruby-on-rails oci8

1
推荐指数
1
解决办法
5863
查看次数

如何在PHP中使用OCI8执行存储过程

有人可以帮助我如何通过PHP调用oracle中的存储过程?我有存储过程的示例

CREATE OR REPLACE PROCEDURE view_institution(
       c_dbuser OUT SYS_REFCURSOR)
IS
BEGIN
  OPEN c_dbuser FOR
  SELECT * FROM institution;
END;
Run Code Online (Sandbox Code Playgroud)

上面名为view_instituion的存储过程用于显示表机构上的所有记录.有人可以教我在php中调用上面的存储过程.我是新玩的存储过程

谢谢

php oracle stored-procedures oci8

0
推荐指数
1
解决办法
1万
查看次数

错误:oci.h:没有这样的文件或目录

我正在尝试在oracle 11和php5.3下的Centos 5.11中安装oci8-1.4.9,但是当我使用时遇到错误

pecl install oci8-1.4.9
Run Code Online (Sandbox Code Playgroud)

错误

 config.status: creating config.h
running: make
/bin/sh /var/tmp/pear-build-root/oci8-1.4.9/libtool --mode=compile gcc  -I. -I/tmp/tmp9GRxQr/oci8-1.4.9 -DPHP_ATOM_INC -I/var/tmp/pear-build-root/oci8-1.4.9/include -I/var/tmp/pear-build-root/oci8-1.4.9/main -I/tmp/tmp9GRxQr/oci8-1.4.9 -I/usr/include/php -I/usr/include/php/main -I/usr/include/php/TSRM -I/usr/include/php/Zend -I/usr/include/php/ext  -DHAVE_CONFIG_H  -g -O2   -c /tmp/tmp9GRxQr/oci8-1.4.9/oci8.c -o oci8.lo
mkdir .libs
 gcc -I. -I/tmp/tmp9GRxQr/oci8-1.4.9 -DPHP_ATOM_INC -I/var/tmp/pear-build-root/oci8-1.4.9/include -I/var/tmp/pear-build-root/oci8-1.4.9/main -I/tmp/tmp9GRxQr/oci8-1.4.9 -I/usr/include/php -I/usr/include/php/main -I/usr/include/php/TSRM -I/usr/include/php/Zend -I/usr/include/php/ext -DHAVE_CONFIG_H -g -O2 -c /tmp/tmp9GRxQr/oci8-1.4.9/oci8.c  -fPIC -DPIC -o .libs/oci8.o
In file included from /tmp/tmp9GRxQr/oci8-1.4.9/oci8.c:58:
/tmp/tmp9GRxQr/oci8-1.4.9/php_oci8_int.h:56:17: error: oci.h: No such file or directory
In file included from /tmp/tmp9GRxQr/oci8-1.4.9/oci8.c:58:
/tmp/tmp9GRxQr/oci8-1.4.9/php_oci8_int.h:113: error: expected specifier-qualifier-list before …
Run Code Online (Sandbox Code Playgroud)

php oracle pecl oci8

0
推荐指数
1
解决办法
3454
查看次数