Centos

為 Microsoft SQL Server 安裝 PHP 驅動程序

  • April 23, 2020

我在 Centos 7 中使用 Web 伺服器 nginx、php 7.1 fpm 和 laravel。我想按照Linux 的官方安裝教程安裝 SQL Server,但我對這個命令感到困惑:

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"並生成“掃描在:/etc/php.d 中的其他 .ini 文件”現在我對 sed 命令感到困惑。

該命令用於獲取附加 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.dgrep用於獲取此特定行,該命令sed用於剝離Scan for additional .ini files in:並保留 config 目錄的路徑/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.

後面的記號有點等同於$(),但更難使用。在這種情況下,它們是等價的。所以程式碼可以讀為。

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"

對於每一行,$()首先執行中的位,然後輸出(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"

引用自:https://unix.stackexchange.com/questions/528149