Tuesday 14 May 2019

PHP SFTP library && MSSQL guide

SFTP library: https://github.com/phpseclib/phpseclib
MSSQL - PHP guide:  (After installation, sqlsrv.so is a dynamic driver located in /usr/lib/php/20170718/, read permission need to be grante)
https://www.microsoft.com/en-us/sql-server/developer-get-started/php/ubuntu

In the document

 Step 2.1 Install the PHP Driver for SQL Server
Terminal
sudo pecl install sqlsrv
sudo pecl install pdo_sqlsrv
sudo su
echo extension=pdo_sqlsrv.so >> `php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:\s*||"`/20-pdo_sqlsrv.ini (Correction pdo_sqlsrv.ini must run before sqlsrv.ini)
echo extension=sqlsrv.so >> `php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:\s*||"`/30-sqlsrv.ini 
exit



// Problems might encounter && confustion diagnose

phpsize does not exists:

sudo apt-get install php7.x-dev
https://stackoverflow.com/questions/3108937/how-to-install-and-run-phpize

// What does echo extension=pdo_sqlsrv.so >> `php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:\s*||"`/20-pdo_sqlsrv.ini
echo extension=sqlsrv.so >> `php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:\s*||"`/30-sqlsrv.ini  mean?

It means to create two ini file in /etc/php7.x/cli/conf.d, one called 20-pdo_sqlsrv.ini, 30-sqlsrv.ini, and because of the number, pdo_sqlsrv will run fist. These two files will contain extension=pdo_sqlsrv.so, extension=sqlsrv.so accorndingly, so they will be dynamically loaded to php.ini, every time browser calls php interpreter, and php interpreter loads php.ini file.

20-pdo_sqlsrv.ini must be loaded first

// Installed sql.srv, pdo_sqlsrv extension in the wrong directory, resulting no such file or directory when running php
use whereis php to check if there are two php version installed, and two path specified,
if it is
check /usr/lib/php/ to see your sqlsrv extension is installed in another directory

// if it is then remove
pecl uninstall sqlsrv
pecl uninstall pdo_sqlsrv

// uninstall one php version
apt purge php7.x (a version not used)

then
pecl uninstall sqlsrv
pecl uninstall pdo_sqlsrv
then install again

https://ayesh.me/Ubuntu-PHP-7.3

// Php system extension (not installed by user located in )
/etc/php/php_version/mods-available
https://tecadmin.net/enable-disable-php-modules-ubuntu/

// php_pdo_register_driver in Unknown on line 0 error
check /etc/php7.x/cli/conf.d, to see if there are two ini file, one called 20-pdo_sqlsrv.ini, 30-sqlsrv.ini,
and make sure 20-pdo_sqlsrv.ini is loaded(placed before sqlsrv.ini)
https://github.com/microsoft/msphpsql/issues/736

// sqlsrv already loaded error (PHP Warning: Module 'XXX' already loaded in Unknown on line 0)

Check /etc/php7.x/cli/conf.d to see if there are duplicate files, if not, check ini files to see if there are duplicate lines in each ini file.

execute

echo extension=pdo_sqlsrv.so >> `php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:\s*||"`/20-pdo_sqlsrv.ini (Correction pdo_sqlsrv.ini must run before sqlsrv.ini)
echo extension=sqlsrv.so >> `php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:\s*||"`/30-sqlsrv.ini

multiple times will result
extension =pdo_sqlsrv.so
extension =pdo_sqlsrv.so
extension =pdo_sqlsrv.so

be created multiple times in 20-pdo_sqlsrv.ini
https://github.com/Homebrew/homebrew-php/issues/3896




No comments:

Post a Comment