WordPress的後台管理介面,除了可以管理文章之外,還可以處理外掛和佈景主題的安裝與更新,以及WordPress的版本升級。可是有些人在使用WordPress的後台來升級系統、安裝或更新外掛與佈景主題時,WordPress卻要求後台管理員輸入FTP伺服器的名稱和使用者密碼。雖然如果有FTP伺服器的話,正確地提供這些FTP資訊給WordPress,確實可以讓WordPress繼續完成它的安裝或更新,但每次都要輸入FTP的帳密資訊實在有點麻煩,更何況也不是所有的WordPress伺服器都有FTP可以使用。如果您的WordPress不斷地向您要求提供登入FTP的資訊,可以參考這篇文章來禁用FTP連線,直接讓WordPress使用PHP程式完成所有的安裝或更新工作,或是將正確的FTP資訊直接設定在wp-config.php中,一勞永逸。



如下圖,WordPress向後台管理員要求輸入FTP伺服器的名稱和使用者密碼。

wordpress-ftp

wordpress-ftp

禁用WordPress的FTP連線

編輯WordPress根目錄下的wp-config.php檔案,找到:

require_once(ABSPATH . 'wp-settings.php');

並在它之上添加:

define('FS_METHOD', 'direct');

wordpress-ftp

如此一來就能夠強制WordPress直接使用PHP程式完成所有的安裝或更新工作。不過在實際使用的時候,可能還是會遇到檔案下載失敗、解壓縮失敗或是複製失敗等問題,這通常是因為檔案權限設定的關係。以下將分別針對安裝Linux作業系統的VPS或是自架主機,以及能夠過FTP來操作檔案的Hosting主機,來作權限的修改說明。

安裝Linux作業系統的VPS或是自架主機

我們通常會使用Apache伺服器來運行WordPress,以下指令,可以查看Apache伺服器所使用的群組名稱。

apachectl -S

wordpress-ftp

如上圖,可以看到筆者的Apache伺服器使用的群組名稱為www-data

在終端機中,將工作目錄移動到WordPress的根目錄下,接著執行以下指令,將所有WordPress根目錄下的檔案的群組都設成Apache伺服器使用的群組。

sudo chgrp -R www-data .

接著使用以下指令,讓Apache伺服器使用的群組擁有所有的檔案權限。

sudo chmod -R g+rwx .

wordpress-ftp

到這裡就完成設定啦!不過這個方式要特別注意的是,因為我們把WordPress的檔案權限完全開給Apache伺服器所使用的群組了,以致於所有使用這個群組的程式或是屬於這個群組的使用者都有權限可以存取我們WordPress的檔案!若這個群組可被未知的程式或是使用者給拿來使用,就會有安全性問題。

提供FTP的Hosting主機

雖然可透過FTP的連線軟體(例如FileZilla),修改WordPress的整個根目錄或是根目錄底下的所有檔案,將檔案權限都設為777

wordpress-ftp

但這個作法會讓我們的WordPress檔案暴露在整個作業系統環境下。一台Hosting主機通常會共享給很多使用者來使用,如果這樣設定(檔案權限全都777)的話會有嚴重的安全性問題!因此使用提供FTP的Hosting主機的使用者,筆者建議還是乖乖地使用FTP連線來讓WordPress進行安裝與更新的動作吧!

手動設定WordPress的FTP連線

WordPress支援FTP/FTPS和SFTP,FTPS就是FTP再使用SSL進行加密,SFTP則是直接使用SSH協定來進行檔案傳輸。

不管是使用FTP/FTPS還是SFTP,首先都要編輯WordPress根目錄下的wp-config.php檔案,並找到:

require_once(ABSPATH . 'wp-settings.php');

然後在它之上添加以下內容:

define('FS_METHOD', 'ftpext');
# define('FS_METHOD', 'ssh2');
# define('FTP_PUBKEY', '/home/username/.ssh/id_rsa.pub');
# define('FTP_PRIKEY', '/home/username/.ssh/id_rsa');
define('FTP_BASE', ABSPATH);
define('FTP_CONTENT_DIR', FTP_BASE . 'wp-content' . '/');
define('FTP_PLUGIN_DIR', FTP_CONTENT_DIR . 'plugins' . '/');
define('FTP_HOST', 'ftp.example.org');
define('FTP_USER', 'username');
define('FTP_PASS', 'password');
define('FTP_SSL', false);

wordpress-ftp

其中必須修改的變數如下:

  • FTP_HOST:FTP的位址。就是您平常登入FTP時輸入的IP或是網域啦!
  • FTP_USER:FTP的使用者帳號。
  • FTP_PASS:FTP的使用者密碼。
  • FTP_SSL:是否使用FTPS。

而FTP伺服器可能會使用虛擬根目錄,使得FTP客戶端軟體所看到的FTP伺服器的/,實際上並不是該FTP伺服器檔案系統的/。這時就必須手動設定FTP_BASE,將其指定到正確的FTP的虛擬WordPress根目錄。注意目錄路徑必須要以斜線/來結尾。

如果要使用SFTP,請將以下這行:

define('FS_METHOD', 'ftpext');

行首加上#,將其註解掉。

接著刪掉以下這幾行行首的#,將它們取消註解:

# define('FS_METHOD', 'ssh2');
# define('FTP_PUBKEY', '/home/username/.ssh/id_rsa.pub');
# define('FTP_PRIKEY', '/home/username/.ssh/id_rsa');

FTP_PUBKEY要設定為SSH的公鑰檔案路徑,FTP_PRIKEY要設定為SSH的私鑰檔案路徑,並且要注意這些金鑰檔案的存取權限哦!

設定完成後,WordPress應該就不會要求使用者提供登入FTP的資訊了。

順帶一提,剛才介紹的FTP/FTPS或是SFTP的功能都需要PHP模組的支援。如果您的PHP沒有該有的模組卻又想要使用FTP,可以試著將FS_METHOD設為ftpsockets