วิธีตั้งค่า PHP ให้ใช้งาน Database ของ Oracle โดยใช้ OCI8 [สำหรับ Mac OSX]
ก่อนอื่นสิ่งที่ต้องติดตั้งก่อนลง PHP OCI8 install
- Xcode Command Line Tools
- PEAR และ PECL
- BREW
ขั้นตอนการติดตั้ง oci8 osx
- ดาวน์โหลด SQL Oracle 3 Packages เพื่อเตรียมนำมาติดตั้งจาก Download Oracle Instant Client
หมายเหตุ ตรวจดูระบบปฏิบัติการ 32 bit หรือ 64 bit ก่อนดาวน์โหลดไฟล์ ส่วนใหญ่เครื่อง Mac หลังปี 2007 จะเป็น 64 บิต
ดาวน์โหลดดังนี้Instant Client Package - Basic: All files required to run OCI, OCCI, and JDBC-OCI applications
instantclient-basic-macos.x64-12.1.0.2.0.zip (63,590,812 bytes)
Instant Client Package - SQL*Plus: Additional libraries and executable for running SQL*Plus with Instant Client
instantclient-sqlplus-macos.x64-12.1.0.2.0.zip (871,809 bytes)
Instant Client Package - SDK: Additional header files and an example makefile for developing Oracle applications with Instant Client
instantclient-sdk-macos.x64-12.1.0.2.0.zip (664,112 bytes) - สร้างโฟลเดอร์ /opt/oracle/instantclient_12_1/ สำหรับ unzip ไฟล์ที่ดาวน์โหลดมา โดยใช้คำสั่งผ่าน Terminal หรือสร้างโฟลเดอร์ขึ้นเองก็ได้
คำสั่งสร้างโฟลเดอร์
sudo mkdir /opt
sudo mkdir /opt/oracleสำหรับ unzip ไฟล์ไปยังโฟลเดอร์ โดยใช้ Terminal ให้พิมพ์คำสั่งข้างล่าง ใน Directory ที่เก็บไฟล์ที่ดาวน์โหลดมา ตัวอย่างการเข้ายัง Directory ที่เก็บไฟล์ที่ดาวน์โหลดมา cd ~/Downloads/
sudo unzip -d /opt/oracle/ instantclient-basic-macos.x64-12.1.0.2.0.zip
sudo unzip -d /opt/oracle/ instantclient-sdk-macos.x64-12.1.0.2.0.zip
sudo unzip -d /opt/oracle/ instantclient-sqlplus-macos.x64-12.1.0.2.0.zip - แก้ไขไฟล์ .bash_profile ที่ Home Directory
คำสั่ง nano สำหรับเปิดไฟล์เพื่อแก้ไข
sudo nano ~/.bash_profile
เพิ่มโค้ดในไฟล์ .bash_profile ตามนี้
export ORACLE_HOME=/opt/oracle/instantclient_12_1
export DYLD_LIBRARY_PATH=/opt/oracle/instantclient_12_1
export PATH=$PATH:$DYLD_LIBRARY_PATH
export SQL_PATH=$ORACLE_HOME
export PATH=$PATH:$ORACLE_HOME
export NLS_LANG= “ENGLISH_UNITED KINGDOM.UTF8”กด ctrl + x เพื่อออกจากการแก้ไขไฟล์ ตอบ yes เพื่อทำการบันทึก
เมื่อบันทึกสำเร็จให้พิมพ์คำสั่ง
source ~/.bash_profile
- ทำการเชื่อมโยง Lib
ไปยัง directory /opt/oracle/instantclient_12_1/
cd /opt/oracle/instantclient_12_1/
เพิ่มคำสั่ง
ln -sf libclntsh.dylib.12.1 libclntsh.dylib
ln -sf libocci.dylib.12.1 libocci.dylib - เริ่มทำการติดตั้ง OCI8
ติดตั้ง autoconf
brew install autoconf
ถ้าเคยติดตั้ง OCI8 แล้ว ให้ Uninstall ก่อน แล้วค่อยติดตั้งใหม่อีกครั้ง
sudo pecl uninstall oci8
Install OCI8
sudo pecl install oci8
หรือ (-f คือการ rebuild)
sudo pecl install -f oci8
PECL จะถามที่อยู่ของ ORACLE_HOME
Please provide the path to the ORACLE_HOME directory. Use 'instantclient,/path/to/instant/client/lib' if you're compiling with Oracle Instant Client [autodetect] :
ให้พิมพ์ directory ที่ unzip Oracle Instant Client
instantclient,/opt/oracle/instantclient_12_1
ถ้าติดตั้งเสร็จสมบูรณ์จะแสดง
Build process completed successfully
Installing '/usr/lib/php/extensions/no-debug-non-zts-XXXXxxXX/oci8.so'
install ok: channel://pecl.php.net/oci8-X.X.X
configuration option "php_ini" is not set to php.ini location
You should add "extension=oci8.so" to php.ini - แก้ไขไฟล์ Apache org.apache.httpd.plist
cd /System/Library/LaunchDaemons
sudo nano org.apache.httpd.plistเพิ่มโค้ดในไฟล์ org.apache.httpd.plist ตามโค้ดที่ไฮไลท์
<dict>
<key>XPC_SERVICES_UNAVAILABLE</key>
<string>1</string>
<key>DYLD_LIBRARY_PATH</key>
<string>/opt/oracle/instantclient_12_1</string>
</dict> - แก้ไขไฟล์ php.ini
ถ้ายังไม่เคยแก้ไขไฟล์ php.ini ในสร้างไฟล์ php.ini โดย copy ไฟล์จาก default php.ini
cd /etc
sudo cp php.ini.default php.iniเพิ่ม extension=oci8.so ใน /ect/php.ini โดยให้เพิ่มหลังจากคำ Dynamic Extensions เมื่อเพิ่มเสร็จสิ้นให้ทำการบันทึกแล้ว restart apache โดยใช้คำสั่ง
sudo apachectl restart
- ตรวจสอบสถานะ OCI8
โดยใช้คำสั่ง
php --ri oci8
ถ้าทำการติดตั้งอย่างสมบูรณ์จะแสดงผลดังนี้
OCI8 Support => enabled
OCI8 DTrace Support => disabled
OCI8 Version => 2.0.8
Revision => $Id: f04114d4d62cffes4cdc2ed3b7f22f9c2c3a5016 $
Oracle Run-time Client Library Version => 12.1.0.2.0
Oracle Compile-time Instant Client Version => 12.1
Directive => Local Value => Master Value
oci8.max_persistent => -1 => -1
oci8.persistent_timeout => -1 => -1
oci8.ping_interval => 60 => 60
oci8.privileged_connect => Off => Off
oci8.statement_cache_size => 20 => 20
oci8.default_prefetch => 100 => 100
oci8.old_oci_close_semantics => Off => Off
oci8.connection_class => no value => no value
oci8.events => Off => Off