Microsoft SQL Server용 PHP 드라이버 설치

Microsoft SQL Server용 PHP 드라이버 설치

저는 Centos 7에서 웹 서버 nginx, php 7.1 fpm 및 laravel을 사용하고 있습니다. SQL Server를 설치하고 싶습니다.Linux 공식 설치 튜토리얼하지만 이 명령이 혼란스럽습니다.

echo extension=pdo_sqlsrv.so >> `php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:\s*||"`/pdo_sqlsrv.ini

echo extension=sqlsrv.so >> `php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:\s*||"`/sqlsrv.ini

정확히 무엇을 의미하나요? 나는 그것을 이해 extension=sqlsrv.so하고 >>쓰려고 노력하고 있습니다 php --ini(이것은 php.ini를 의미합니까?)

그런 다음 그것을 사용해 보고 php --ini | grep "Scan for additional .ini files""Scan for other .ini files in: /etc/php.d"를 생성했는데 이제 sed 명령에 대해 혼란스러워졌습니다.

답변1

이 명령은 새 파일을 생성하기 위해 PHP 구성 파일을 첨부할 디렉터리 경로를 가져오는 데 사용됩니다 *.ini.

명령을 실행하면 php --ini다음과 같은 구성 파일과 경로가 나열됩니다.

$ php --ini
Configuration File (php.ini) Path: /etc/php/7.2/cli
Loaded Configuration File:         /etc/php/7.2/cli/php.ini
Scan for additional .ini files in: /etc/php/7.2/cli/conf.d
Additional .ini files parsed:      /etc/php/7.2/cli/conf.d/10-opcache.ini,
/etc/php/7.2/cli/conf.d/10-pdo.ini,
/etc/php/7.2/cli/conf.d/20-calendar.ini,
...

이 줄을 볼 수 있습니다 Scan for additional .ini files in: /etc/php/7.2/cli/conf.d. 해당 특정 라인을 가져오는 데 사용되는 grep이 명령은 구성 디렉터리에 대한 경로를 sed제거하고 유지하는 데 사용됩니다 .Scan for additional .ini files in:/etc/php/7.2/cli/conf.d

extension=pdo_sqlsrv.so따라서 첫 번째 명령은 파일에 문자열을 추가합니다 /etc/php/7.2/cli/conf.d/pdo_sqlsrv.ini. 귀하의 경우 경로는 입니다 /etc/php.d/pdo_sqlsrv.ini.

답변2

백틱은 다소 동일 $()하지만 사용하기가 더 어렵습니다. 이 경우에는 동일합니다. 따라서 코드는 다음과 같이 읽을 수 있습니다.

echo extension=pdo_sqlsrv.so >> "$(php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:\s*||")/pdo_sqlsrv.ini"

echo extension=sqlsrv.so >> "$(php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:\s*||")/sqlsrv.ini"

각 라인에 대해 먼저 bit 를 실행한 $()다음 해당 위치를 출력(stdout)으로 바꿉니다. 그런 다음 전체 라인을 다시 스캔하고 다시 실행하십시오.

따라서 비트는 $()디렉토리 이름을 생성하는 데 사용되며 텍스트 extension=pdo_sqlsrv.so(첫 번째 비트)가 디렉토리 이름에 추가됩니다.«directory»/pdo_sqlsrv.ini

나는 리팩토링했습니다 (PHP를 설치할 계획이 없으므로 테스트하지 않았습니다). 이제 이해가 되기를 바랍니다.

directory="$(php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:\s*||")"

echo extension=pdo_sqlsrv.so >> "${directory}/pdo_sqlsrv.ini" 
echo extension=sqlsrv.so >> "${directory}/sqlsrv.ini"

답변3

나는 스스로 답을 얻었습니다. 다음과 같이 사용하면 명령을 실행 echo하거나 curlsudo를 사용할 수 있다는 것이 밝혀졌습니다.bash -c

sudo bash -c 'echo extension=pdo_sqlsrv.so >> "$(php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:\s*||")/pdo_sqlsrv.ini"'

나를 도와주신 분들께 감사드립니다 :)

관련 정보