Skip to content

Instantly share code, notes, and snippets.

@ebta
Last active January 29, 2023 16:59
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ebta/b92ca8ff52c4cffc466a2a8a5e4c067e to your computer and use it in GitHub Desktop.
Save ebta/b92ca8ff52c4cffc466a2a8a5e4c067e to your computer and use it in GitHub Desktop.
Install database driver extension (PosgreSQL, MS SQL, Oracle) di PHP - Ubuntu Server

Proses-proses berikut awalnya (utamanya) dijalankan di Ubuntu 20.04 dengan PHP 7.4, tetapi harusnya bisa diterapkan di versi selainnya.

Install Driver PosgreSQL

  1. Install driver PDO PgSQL, Default akan menginstall sesuai versi php, misalnya berikut ini akan install php7.4-pgsql. Setelah install, biasanya langsung aktif tanpa perlu restart php
sudo apt install php-pgsql

Install Driver SQL Server

Seperti perintah yg ada di halaman Microsoft ODBC driver ikuti petunjuk sesuai dengan OS yang digunakan

sudo su
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -

# Download appropriate package for the OS version
# Choose only ONE of the following, corresponding to your OS version

# Ubuntu 16.04
curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list

# Ubuntu 18.04
curl https://packages.microsoft.com/config/ubuntu/18.04/prod.list > /etc/apt/sources.list.d/mssql-release.list

# Ubuntu 20.04
curl https://packages.microsoft.com/config/ubuntu/20.04/prod.list > /etc/apt/sources.list.d/mssql-release.list

# Ubuntu 22.04
curl https://packages.microsoft.com/config/ubuntu/22.04/prod.list > /etc/apt/sources.list.d/mssql-release.list

exit
sudo apt-get update
sudo ACCEPT_EULA=Y apt-get install msodbcsql17
# optional: for bcp and sqlcmd
sudo ACCEPT_EULA=Y apt-get install mssql-tools
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc
# optional: for unixODBC development headers
sudo apt-get install unixodbc-dev

Compile plugin membutuhkan phpize dan beberapa development tools, install dengan perintah berikut

sudo install php-dev gcc g++ make autoconf libc-dev pkg-config php-pear
sudo pecl channel-update pecl.php.net

# Install driver sqlsvr dari pecl, sesuai versi PHP yg digunakan seperti berikut:
# PHP 7.0
sudo pecl install sqlsrv-5.3.0

# PHP 7.1 ( dapat dicoba juga sqlsrv-5.7.0preview )
sudo pecl install sqlsrv-5.6.1

# PHP > 7.2, termasuk  7.3, 7.4, 8.0, 8.1
sudo pecl install sqlsrv

Jika berhasil compile, tambahkan baris kode extension=sqlsrv.so di php.ini (kalau php-fpm biasanya disini /etc/php/7.4/fpm/php.ini ), selanjutnya reload web server

# reload/restart apache
sudo systemctl reload apache2
# Jika menggunakan PHP-FPM ( Nginx )
sudo service php7.4-fpm reload # Ubuntu
sudo systemctl restart php-fpm # CentOS

Jika ada masalah koneksi dan error sbb

Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : SSL Provider: [error:0A000102:SSL routines::unsupported protocol].
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Client unable to establish connection.

Update file /etc/ssl/openssl.cnf

openssl_conf = default_conf

[default_conf]
ssl_conf = ssl_sect

[ssl_sect]
system_default = system_default_sect

[system_default_sect] 
MinProtocol = TLSv1.0
CipherString = DEFAULT:@SECLEVEL=0

Ubuntu 20.04 bisa mengubah DEFAULT:@SECLEVEL=1

Install Driver Oracle (OCI dan PDO_OCI)

Proses installasi ini merujuk pada langkah Install PDO_OCI PHP 7.2 Ubuntu 18.04

Install Oracle Instant Client and SDK

Download the Oracle Instant Client and SDK from Oracle website (2 file ini: instantclient-basic-linux.x64-12.2.0.1.0.zip and instantclient-sdk-linux.x64-12.2.0.1.0.zip) , atau langsung dari server internal integra9 berikut :

curl -u user:password -O https://integra9.com/tmpx2019/instantclient-basic-linux.x64-12.2.0.1.0.zip
curl -u user:password -O https://integra9.com/tmpx2019/instantclient-sdk-linux.x64-12.2.0.1.0.zip

Create a new folder /opt/oracle to store Oracle Instant Client zip files on your server. Move/copy the Instant Clients files to this directory, and extract ( you may need install unzip sudo apt install unzip )

sudo mkdir /opt/oracle
sudo unzip instantclient-basic-linux.x64-12.2.0.1.0.zip
sudo unzip instantclient-sdk-linux.x64-12.2.0.1.0.zip

Next, we need to create a symlink to Instant Client files.

sudo ln -s /opt/oracle/instantclient_12_2/libclntsh.so.12.1 /opt/oracle/instantclient_12_2/libclntsh.so
sudo ln -s /opt/oracle/instantclient_12_2/libocci.so.12.1 /opt/oracle/instantclient_12_2/libocci.so

Tambahkan directory ini ke ldconfig

echo "/opt/oracle/instantclient_12_2" | sudo tee -a /etc/ld.so.conf.d/oracle-instantclient
# Tambahkan juga di file berikut (tambahan ketika tidak jalan di web server)
echo "/opt/oracle-instantclient-12-2" | sudo tee -a /etc/ld.so.conf.d/x86_64-linux-gnu.conf
sudo ldconfig

Install OCI Driver

Install Additional Packages

sudo apt install php-dev php-pear build-essential libaio1
sudo pecl install oci8

# Ketika ditanya lokasi oracle, masukkan: instantclient,/opt/oracle/instantclient_12_2

Jika berhasil tinggal tambahkan extension sesuai php dan web server yg digunakan

echo "extension=oci8.so" | sudo tee -a /etc/php/7.4/fpm/php.ini
echo "extension=oci8.so" | sudo tee -a /etc/php/7.4/cli/php.ini
echo "extension=oci8.so" | sudo tee -a /etc/php/7.4/apache2/php.ini

Tambahkan ke environment variable, jika tidak jalan, edit path dalam tanda petik dua langsung di file environment

# Jika menggunakan Apache Web Server
echo "export LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2" | sudo tee -a /etc/apache2/envvars
echo "export ORACLE_HOME=/opt/oracle/instantclient_12_2" | sudo tee -a /etc/apache2/envvars

echo "LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2" | sudo tee -a /etc/environment

atau tambahkan baris berikut langsung di file /etc/environment

LD_LIBRARY_PATH="/opt/oracle/instantclient_12_2"
ORACLE_HOME="/opt/oracle/instantclient_12_2"

Restart aplikasi (biasanya membutuhkan reboot server agar path terdeteksi php)

sudo service php7.4-fpm restart
# atau
sudo systemctl restart php7.4-fpm

Install driver/extension PDO_OCI PHP

# download php source code 
wget https://www.php.net/distributions/php-7.4.10.tar.gz
# extract 
tar -xzf php-7.4.10.tar.gz
# Go to directory PHP
cd /php-7.4.10/ext/pdo_oci

# Run in order
phpize
# Use --with-pdo-oci=instantclient,prefix,version 
# prefix = location instantclient, ex: /opt/oracle/instantclient
./configure --with-pdo-oci=instantclient,/opt/oracle/instantclient_12_2,12.2
make
sudo make install  

# If this is not runtime php directory, copy ti extension dir
# cp modules/pdo_oci.so /php-7.4.10/ext/pdo_oci/modules

# Optional if extension not automatically added
echo "extension=pdo_oci.so" | sudo tee -a /etc/php.d/pdo_oci.ini  

# OR 
# Add create add "extension=pdo_oci.so" inside ( without double quote )
# /etc/php/7.4/mods-available/pdo_oci.ini
# create symlink
sudo ln -s /etc/php/7.2/mods-available/pdo_oci.ini ./20-pdo_oci.ini

# restart apache/httpd/nginx
sudo service httpd|nginx restart
sudo systemctl restart httpd|nginx

# php-fpm
sudo systemctl restart php7.4-fpm.service

Cek melalui echo phpinfo(); jika sudah ada oci, pdo_oci berarti sudah berhasil. Jika tidak, cek bagian environment, jika masih belum tampil /opt/oracle/instantclient_12_2 di bagian ORACLE_HOME atau LD_LIBRARY_PATH, berarti path oracle belum terdeteksi php-fpm

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment