>  기사  >  백엔드 개발  >  PHP 연결 오라클이 깨졌을 때 문제를 해결하는 방법

PHP 연결 오라클이 깨졌을 때 문제를 해결하는 방법

藏色散人
藏色散人원래의
2021-10-27 10:43:293101검색

Oracle에 대한 PHP 연결의 잘못된 코드에 대한 해결 방법: 1. 환경 변수 설정 2. Oracle의 문자 집합 가져오기 3. "iconv('GBK','utf-8',$vo["USERNAME"]) ;" 인코딩을 변환하는 방법을 사용하면 됩니다.

PHP 연결 오라클이 깨졌을 때 문제를 해결하는 방법

이 기사의 운영 환경: Windows 7 시스템, PHP 버전 7.1, DELL G3 컴퓨터

PHP 연결 oracle 왜곡 문제를 해결하는 방법은 무엇입니까?

Oracle에 대한 PHP 연결 및 잘못된 문제 참고 사항

1. Oracle에 대한 PHP 연결

1단계. Oracle Instant Client 코어 DLL 추출

OTN의 Instant Client 페이지에서 Windows용 Instant Client Basic(11g)을 다운로드합니다. ) 패키지. 이 압축 파일의 크기는 약 48MB입니다. 하위 디렉터리(예: c:instantclient11_2)를 만들고 zip 파일에서 다음 라이브러리를 apachebin 디렉터리로 복사합니다.

oraociei11.dll 
orannzsbb11.dll 
oci.dll

이 세 파일의 총 크기는 약 126MB입니다.
이전 버전의 PHP에 대해 "oracle" 확장을 사용하려면(php.ini에서 "extension=php_oracle.dll"을 사용하여 활성화됨) oci.dll 대신 ociw32.dll을 복사하세요.

2단계: 환경 변수를 편집하고 c:instantclient11_2를 PATH에 추가합니다(시스템 환경 변수는 다른 Oracle 디렉터리 앞에 있습니다).

예를 들어, Win7에서는 "컴퓨터"를 클릭하고 -> "속성"을 마우스 오른쪽 버튼으로 클릭하고 -> "고급 시스템 설정" -> "고급" -> "환경 변수"를 클릭하여 시스템 변수 목록에서 PATH를 편집합니다. .
tnsnames.ora 파일을 사용하여 Oracle Net 서비스 이름을 정의하는 경우 tnsnames.ora를 c:instantclient11_2에 복사하고 사용자 환경 변수 TNS_ADMIN을 c:instantclient11_2로 설정합니다.

3단계: php의 oci8 확장을 엽니다. php.ini를 편집하고 OCI8 확장을 엽니다. 즉, 주석 기호 ';'를 제거합니다. 확장=php_oci8.dll

Apache를 다시 시작합니다. 서버를 다시 시작합니다(서버를 다시 시작해야 합니다. 그렇지 않으면 환경 변수가 적용되지 않습니다)

다시 시작한 후 phpinfo()를 통해 다음 내용이 표시되면 구성에 성공한 것입니다.

oci8

OCI8 지원 enabled
Version 1.4.7
Revision $Id: bf2eaf558b050b6d2e6d098bed6345af7e842ea4 $
활성 영구 연결 0
활성 연결 0
Oracle 실행 -time 클라이언트 라이브러리 버전 11.2.0.3.0
Oracle 인스턴트 클라이언트 버전 11.2
임시 Lob 지원 enabled
컬렉션 지원 enabled
지시문 로컬 값 마스터 값
oci8.connection_class no value no
oci8.default_prefetch 100 100
oci8.events Off Off
oci8 .max_pertant -1 -1
oci8.old_oci_close_semantics Off Off
oci8. persist_timeout -1 -1
oci8.ping_interval 60 60
oci8.privileged_connect Off Off
oci8.statement_cache_size 20 2 0

 2. PHP Oracle 中文乱码问题

通常缺省配置连接Oracle在处理中文时都会遇到乱码问题,其实绝大部分人都知道在客户端连接Oracle服务端前首先要在客户端正确的设置服务端的字符集信息,通过PLSQL运行“select * from V$NLS_PARAMETERS;” 即可获取oracle的字符集,变量NLS_CHARACTERSET对应的就是我们需要的字符集,比如我这里就是“WE8ISO8859P1”

设置字符集的方法如下:

   方法一: 连接前设置环境变量            

putenv("NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1");
$conn=oci_new_connect($config['username'], $config['password'],$config['database']);

方法二:连接时设置环境变量

 $conn=oci_new_connect($config['username'], $config['password'],$config['database'],'we8iso8859p1');

    但是很快你会发现通过上述设置读取的中文数据在不设置编码的情况下可以正常显示,而一旦在页面(假如页面的字符集为UTF8)中使用则仍为乱码,

 并且即便做转换 从 we8iso8859p1 -> utf-8  依旧为乱码。

     其实仔细研究后发现oci8 以数据库编码WE8ISO8859P1获取数据后 自动转换为操作系统缺省的编码格式,假如我使用的操作系统缺省编码为GBK,则实际上通过OCI8读取后,字符的编码即为GBK, 因此在页面使用的时候编码转换应该为  从 GBK -> utf-8 :

 echo iconv('GBK','utf-8',$vo["USERNAME"]);

推荐学习:《PHP视频教程

위 내용은 PHP 연결 오라클이 깨졌을 때 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.