Proses-proses berikut awalnya (utamanya) dijalankan di Ubuntu 20.04 dengan PHP 7.4, tetapi harusnya bisa diterapkan di versi selainnya.
- 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
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
Proses installasi ini merujuk pada langkah Install PDO_OCI PHP 7.2 Ubuntu 18.04
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 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
# 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