Heim > Backend-Entwicklung > PHP-Problem > So lösen Sie das verstümmelte Problem der PHP-Verbindung zu Oracle

So lösen Sie das verstümmelte Problem der PHP-Verbindung zu Oracle

藏色散人
Freigeben: 2023-03-13 14:18:02
Original
3223 Leute haben es durchsucht

Lösung für den verstümmelten Code in der PHP-Verbindung zu Oracle: 1. Umgebungsvariablen festlegen; 2. Oracle-Zeichensatz abrufen; ;" Verwenden Sie einfach die Methode, um die Kodierung zu konvertieren.

So lösen Sie das verstümmelte Problem der PHP-Verbindung zu Oracle

Die Betriebsumgebung dieses Artikels: Windows 7-System, PHP-Version 7.1, DELL G3-Computer

Wie löse ich das Problem der verstümmelten Oracle-Verbindung mit PHP?

PHP-Verbindung zu Oracle und verstümmelte Problemnotizen

1. PHP-Verbindung zu Oracle

Schritt 1. Extrahieren Sie die Oracle Instant Client-Kern-DLL

Laden Sie Instant Client Basic für Windows (11g) von der Instant Client-Seite von OTN herunter ) Paket. Die Größe dieser komprimierten Datei beträgt ca. 48 MB. Erstellen Sie ein Unterverzeichnis (z. B. c:instantclient11_2) und kopieren Sie die folgenden Bibliotheken aus der ZIP-Datei in das Apachebin-Verzeichnis:

oraociei11.dll 
orannzsbb11.dll 
oci.dll
Nach dem Login kopieren

Die Gesamtgröße dieser drei Dateien beträgt ungefähr 126 MB.
Um die Erweiterung „oracle“ für ältere Versionen von PHP zu verwenden (aktiviert mit „extension=php_oracle.dll“ in php.ini), kopieren Sie ociw32.dll anstelle von oci.dll.

Schritt 2: Bearbeiten Sie die Umgebungsvariablen und fügen Sie c:instantclient11_2 zu PATH hinzu (die Systemumgebungsvariablen liegen vor anderen Oracle-Verzeichnissen).

Klicken Sie beispielsweise unter Win7 auf „Computer“ -> Rechtsklick auf „Eigenschaften“ -> „Erweiterte Systemeinstellungen“ -> „Erweitert“ -> „Umgebungsvariablen“ und bearbeiten Sie PATH in der Systemvariablenliste .
Wenn die Datei tnsnames.ora zum Definieren von Oracle Net-Dienstnamen verwendet wird, kopieren Sie tnsnames.ora nach c:instantclient11_2 und setzen Sie die Benutzerumgebungsvariable TNS_ADMIN auf c:instantclient11_2.

Schritt 3: Öffnen Sie die oci8-Erweiterung von PHP. Bearbeiten Sie php.ini und öffnen Sie die OCI8-Erweiterung, das heißt, entfernen Sie das Kommentarsymbol „;“: extension=php_oci8.dll

Starten Sie Apache neu. Starten Sie den Server neu (der Server muss neu gestartet werden, sonst werden die Umgebungsvariablen nicht wirksam)

Wenn Sie nach dem Neustart den folgenden Inhalt über phpinfo() sehen, ist die Konfiguration erfolgreich:

oci8

OCI8-Unterstützung aktiviert
Version 1.4.7
Revision$Id: bf2eaf558b050b6d2e6d098bed6345af7e842ea4 $
Aktive dauerhafte Verbindungen0
Aktive Verbindungen0
Oracle Run -time Client-Bibliotheksversion11.2.0.3.0
Oracle Instant Client-Version11.2
Temporäre Lob-Unterstützungaktiviert
Sammlungsunterstützungaktiviert
-1 60Off20
DirektiveLokaler WertHauptwert
oci8.connection_classkein Wertkein Wert
oci8.default_prefetch100 100
oci8.events Aus: Aus _timeout-1
oci8.ping_interval60
oci8.privileged_connectOff
oci8.statement_cache_size20

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']);
Nach dem Login kopieren

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

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

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

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

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

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

推荐学习:《PHP视频教程

Das obige ist der detaillierte Inhalt vonSo lösen Sie das verstümmelte Problem der PHP-Verbindung zu Oracle. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage