首頁 >CMS教程 >&#&按 >WordPress文件系統API簡介

WordPress文件系統API簡介

Jennifer Aniston
Jennifer Aniston原創
2025-02-17 08:38:10643瀏覽

WordPress文件系統API簡介

>寫入本地文件是許多插件和主題為各種目的所需的功能之一。安全性是最重要的問題插件,主題在寫入本地文件系統時必須處理。 WordPress在各種託管服務和配置上運行,因此,開發人員很難創建插件和主題,這些插件和主題訪問本地文件系統可以在所有不同類型的環境中工作而不損害安全性。 在本教程中,我們將學習如何使用WordPress文件系統API訪問負責適當文件權限的本地文件系統。在此過程中,我們將創建一個插件,該插件在管理頁面中顯示帶有TextAarea的表單,以將Textarea的內容保存到文件中。

>

鑰匙要點

> WordPress文件系統API為插件和主題提供了一個安全的方法,可以自動處理文件權限,這很重要,考慮到各種託管服務和配置WordPress跨度運行。
    >
  • API可以通過系統調用寫入文件系統,根據文件權限和可用的PHP擴展選擇最合適的方法。它還可以存儲FTP或SSH連接的用戶憑據。
  • >
  • >教程演示瞭如何使用API​​創建插件。該插件在管理頁面中顯示表單,從而將文本方面的內容保存到文件中。該教程提供了用於創建插件文件和目錄,創建管理頁面以及從文件寫入和讀取的代碼。
  • $ WP_FILESYSTEM對象(WP_FileSystem類的實例)揭示了用於閱讀,創建,寫作和刪除文件的方法。可用的其他方法包括刪除,mkdir,move,size和chmod。
  • WordPress默認情況下不會永久存儲FTP或SSH憑據,但是可以使用wp-config.php文件永久存儲它們。這避免了每次插件與文件系統交互時都需要重新輸入憑據。 >
  • 為什麼使用WordPress文件系統API?
  • >您可能想知道為什麼我們不僅使用PHP的文件系統函數來讀取和寫入本地文件,而不是學習並使用一組全新的API?
使用PHP文件系統API的問題是,它不會自動照顧文件權限。假設您使用共享的託管服務來託管WordPress站點,並且託管Web服務器正在作為“管理員”操作系統帳戶運行。每當您使用php創建文件時,它們都是“管理員”用戶的擁有。因此,在同一共享託管中託管的任何其他網站也可以訪問您的網站文件,因為它們也作為“管理員”用戶運行,並向您的網站構成安全問題。為了保護我們免受此問題的侵害,您需要使用PHP手動更改文件所有者和權限。

>但是,當您使用SSH或FTP/SFTP登錄以創建文件時,它們由您登錄AS的操作系統用戶帳戶所有。如果FTP服務器作為“ admin”用戶運行,並且您以“ narayanprusty”用戶的身份登錄,則新創建的文件將以“ narayanprusty”而不是“ admin”。

WordPress引入了可以自動處理文件權限的文件系統API。文件系統API在WordPress 2.6中發布。 WordPress實際上發布了它以支持其插件,主題和核心更新系統,但後來在插件和主題上開始使用它出於自己的目的。

>

>文件系統API如何工作?

>文件系統API可以使用系統調用(即Direct,FTP,FTP套接字或SSH2)寫入文件系統。它根據哪種方法選擇使用適當的文件權限的文件以及可用的PHP擴展名來選擇其中一種方法。文件系統API首先檢查直接方法,然後檢查FTP,最後檢查SSH2。

使用FTP或SSH時,您需要從用戶那裡獲得憑據。文件系統API提供的功能使顯示表單更容易獲取憑據並存儲它們。

創建我們的插件文件和目錄

>

現在,讓我們創建我們的插件,該插件在頁面中顯示一個文本方面,在其中提交表單將文本方面的內容保存到本地文件中。 >

這是我們插件的目錄結構:

在WordPress安裝的WP-CONTENT/插件目錄中創建這些文件和目錄。

要使插件可安裝,請將此代碼放在filesystem.php文件中:>

--filesystem
	--filesystem.php
	--filesystem-demo
		--demo.txt
現在,訪問您的管理面板並安裝插件。

創建管理頁

接下來,我們需要在管理員中的一個頁面,我們的示例將居住。這是創建此頁面並顯示Textarea的代碼。只需將此代碼放在filesystem.php文件中:
<span><span><?php
</span></span><span>  
</span><span><span>/*
</span></span><span><span>Plugin Name: Filesystem API
</span></span><span><span>Plugin URI: http://www.sitepoint.com
</span></span><span><span>Description: A sample plugin to demonstrate Filesystem API
</span></span><span><span>Version: 1.0
</span></span><span><span>Author: Narayan Prusty
</span></span><span><span>*/</span></span>

這是代碼的工作原理:>

首先,我們在“設置”菜單中添加了一個頁面。 demo_page是用於顯示頁面內容的回調。

在頁面內,我們正在顯示帶有TextArea和Nonce字段的HTML表單。還有一個提交按鈕來提交表格。 Textarea名稱是文件數據。添加了NONCE以防止CSRF攻擊。

打開頁面時,我們將使用read_file_demo函數檢索存儲的文件數據。提交表單後,我們將TextArea的內容存儲在文件中。
function menu_item()
{
  add_submenu_page("options-general.php", "Demo", "Demo", "manage_options", "demo", "demo_page"); 
}
 
add_action("admin_menu", "menu_item");

function demo_page()
{
  ?>
      <span><span><span><div</span> class<span>="wrap"</span>></span>
</span>         <span><span><span><h1</span>></span>Demo<span><span></h1</span>></span>
</span>         <span><span><span><form</span> method<span>="post"</span>></span>
</span>          <span><span><?php
</span></span><span>            <span>$output = "";
</span></span><span>
</span><span>            <span>if(isset($_POST["file-data"]))
</span></span><span>            <span>{
</span></span><span>              <span>$output = write_file_demo($_POST["file-data"]);
</span></span><span>            <span>}
</span></span><span>            <span>else
</span></span><span>            <span>{
</span></span><span>              <span>$output = read_file_demo();
</span></span><span>            <span>}
</span></span><span>
</span><span>            <span>if(!is_wp_error($output))
</span></span><span>            <span>{
</span></span><span>            	<span>?></span>
</span>            		<span><span><span><textarea</span> name<span>="file-data"</span>></span><span><?php echo $output; ?></span><span><span></textarea</span>></span>
</span>		          	<span><span><?php wp_nonce_field("filesystem-nonce"); ?></span>
</span>		          	<span><span><span><br</span>></span>
</span>		          	<span><span><span><input</span> type<span>="submit"</span>></span>
</span>            	<span><span><?php
</span></span><span>            <span>}
</span></span><span>            <span>else
</span></span><span>            <span>{
</span></span><span>              <span>echo $output->get_error_message();
</span></span><span>            <span>}
</span></span><span>          <span>?></span>
</span>         <span><span><span></form</span>></span>
</span>      <span><span><span></div</span>></span>
</span>   <span><span><?php
</span></span><span><span>}</span></span>
如果read_file_demo或write_file_demo返回WP_ERROR對象的實例,那麼我們將顯示一個錯誤消息。

>

請注意,上面的代碼將打破您的WordPress站點,因為我們尚未創建read_file_demo和write_file_demo函數。讓我們現在創建它們!
    >
  • 寫入文件
  • 這是我們的write_file_demo函數的實現:
--filesystem
	--filesystem.php
	--filesystem-demo
		--demo.txt

這是代碼的工作原理:>

    首先,我們引用了函數內部的全局$ WP_FILESYSTEM對象。此對像是WP_FILESYSTEM類的實例。它負責揭示閱讀,創建,寫作和刪除文件的各種方法。 >
  • 接下來,我們將創建表單頁面的nonce URL和一個帶有表單的字段名稱的數組。
  • 最後,我們使用Connect_FS函數連接到文件系統。
  • connect_fs使用WordPress提供的request_filesystem_credentials函數,以找到連接到文件系統(直接,FTP或SSH)的適當方法。如果是FTP或SSH,它將回應一個表格,要求用戶提供憑據。在直接方法的情況下,它只會返回true。
  • >
  • 提交TextArea表單並且request_filesystem_credentials選擇FTP或SSH方法時,我們將顯示憑據表單並以憑據形式隱藏文件數據字段。
  • >
  • > request_filesystem_credentials函數的第一個參數在獲得正確的憑據後,將其重定向到其中。重定向是類型的郵政請求。 request_filesystem_credentials最後一個參數是字段名稱的數組,要將其發佈到重定向URL。
  • >一旦提交了憑據表格,然後將其重定向到原始表單提交URL,並帶有適當的字段名稱和用戶輸入的值。 >
  • >再次開始,我們執行write_file_demo。這次request_filesystem_credentials具有憑據,因此它將僅返回true。 然後,我們使用$ wp_filesystem-> find_folder來引用該文件夾。然後,我們構建demo.txt文件的完整路徑。
  • 我們使用$ wp_filesystem-> put_contents將數據寫入文件。
  • >注意:如果您嘗試使用$ wp_filesystem對象的方法而無需請求和驗證憑據,則它們將不起作用。
  • >
  • 讀取文件
  • 這是read_file_demo函數的實現。
這是代碼的工作方式:>

>讀取demo.txt文件時,我們首先使用request_filesystem_credentials函數連接到文件系統。

這一次,我們沒有在最後一個參數中傳遞任何表單字段,因為該表單未提交。我們只是通過重定向URL,以便一旦取回憑證就可以重定向。

> 然後,我們正在使用$ WP_FILESYSTEM->存在功能檢查文件是否存在。它不存在我們顯示錯誤。否則,我們將使用$ wp_filesystem-> get_contents函數讀取文件並返回內容。

>
<span><span><?php
</span></span><span>  
</span><span><span>/*
</span></span><span><span>Plugin Name: Filesystem API
</span></span><span><span>Plugin URI: http://www.sitepoint.com
</span></span><span><span>Description: A sample plugin to demonstrate Filesystem API
</span></span><span><span>Version: 1.0
</span></span><span><span>Author: Narayan Prusty
</span></span><span><span>*/</span></span>

>假設WordPress選擇了FTP作為創建文件的合適方法,以下是整個過程的屏幕截圖:

    首先,當我們打開演示頁面時,我們將看到此表格:>WordPress文件系統API簡介

    >在這裡,我們需要輸入FTP或FTPS憑據並提交它。提交後,我們將看到此表格:

    WordPress文件系統API簡介

    >顯示一個空的文本方面。輸入文字“ Hello World!”提交表格。您將再次看到憑據表格。

    > WordPress文件系統API簡介

    >您必須再次填充它,因為默認情況下WordPress不會存儲FTP密碼(您可以在wp-config.php中執行此操作,稍後再詳細介紹)。因此,每當您的插件需要與文件系統一起使用時,都必須詢問憑據。現在,提交將其重定向回到重定向URL,並帶有之前提交的字段名稱和值。這是Textarea出現的方式:

    WordPress文件系統API簡介

    >在這裡,我們讀取文件的內容並顯示。

    >

    $ WP_FILESYSTEM對象的其他方法

    $ WP_FILESYSTEM對象提供了許多其他方法,可以在文件和目錄上執行其他各種操作。我們剛剛看到寫作和閱讀n文件。您可以在WP_FILESYSTEM_BASE()文檔頁面上找到可以做什麼的整個列表。

    >

    讓我們檢查一下一些重要的:

    • $ wp_filesystem-> delete:delete用於刪除文件或目錄。您需要傳遞代表路徑的字符串。
    • >
    • $ WP_FILESYSTEM-> MKDIR:MKDIR用於創建目錄。它採用代表父目錄的字符串。
    • >
    • $ WP_FILESYSTEM->移動:移動用於移動文件,它採用兩個參數,即第一個參數是文件的路徑,第二個是將其移動到的目錄。
    • $ WP_FILESYSTEM->大小:大小返回字節中的文件大小。您需要通過文件的路徑。
    • $ WP_FILESYSTEM-> CHMOD:CHMOD用於更改文件的權限。它需要三個參數,即文件的路徑,允許八進制的數字和代表遞歸的布爾值。
    您可以找到WordPress使用哪種連接方法來使用$ WP_FILESYSTEM->方法公共屬性訪問文件系統。

    永久存儲憑據

    >我們看到WordPress不會永久存儲FTP或SSH憑據。一次又一次詢問詳細信息並不是用戶友好的。有一種方法可以使用wp-config.php文件永久存儲憑據。

    >

    >使用這些選項存儲FTP和SSH憑據:>
    • > ftp_host:服務器的主機名。
    • >
    • ftp_user:連接時要使用的用戶名。
    • ftp_pass:連接時要使用的密碼
    • > ftp_pubkey:使用SSH2連接時將使用的公鑰的路徑。
    • > ftp_prikey:使用SSH2連接時將使用的私鑰的路徑。
    結論

    在本文中,我們看到了設計使用WordPress文件系統API訪問我們的文件系統的管理頁面的過程。如果您嘗試在背景過程中訪問文件系統(例如使用CRON作業),則無法顯示憑據表單,如果需要,在這種情況下,您需要確保您通知用戶要將憑據常數放在wp-config.php文件中。 您可以繼續進行此API,並在下面與我們分享您的經驗。

    經常詢問的問題(FAQ)

    > WordPress文件系統API是什麼,為什麼重要? 。這很重要,因為它提供了一種與服務器上文件系統進行交互的安全可靠方法。對於諸如創建,修改或刪除文件和目錄,上傳媒體文件或更新WordPress安裝等任務至關重要API通過提供一組功能來起作用,您可以使用這些功能與服務器上的文件系統進行交互。這些功能抽象了基礎文件系統操作,無論服務器的操作系統或文件系統如何,都提供了一致的接口。這意味著您可以使用相同的函數與Linux服務器上的文件系統進行交互。 >

    要在自己的插件或主題中使用WordPress文件系統API,您首先需要包括包含API功能的文件“ wp-admin/inclate/file.php”。之後,您可以使用API​​功能與文件系統進行交互。例如,您可以使用'wp_filesystem()'函數來初始化文件系統,然後使用其他函數,例如'get_contents()','put_contents()'或'delete()刪除文件。

    >使用WordPress文件系統API比傳統的PHP文件系統功能有什麼好處?

    >

    >使用WordPress Filesystem API優於傳統的PHP文件系統功能,API提供了一個一致的接口服務器的操作系統或文件系統。這意味著您可以編寫在任何服務器上工作的代碼,而不必擔心不同文件系統之間的差異。此外,API通過確保使用正確的權限執行所有文件操作來提供更高級別的安全性。

    我可以使用WordPress Filesystem API上傳文件上傳文件嗎?使用WordPress文件系統API上傳文件。 API提供了一個稱為“ WP_HANDLE_UPLOAD()”的函數,該函數處理整個上傳過程,包括檢查文件類型,確保文件不大,並將文件移至正確的目錄。這使得以安全可靠的方式處理文件上傳變得易於處理。 )'您可以用來檢查函數是否返回錯誤。如果發生錯誤,則可以使用“ get_error_message()”函數獲取人類可讀的錯誤消息。這使得很容易處理錯誤並為用戶提供有用的反饋。

    我可以使用WordPress文件系統API修改.htaccess文件嗎?

    ​​

    是的,您可以使用WordPress Filesystem API修改.htaccess文件。 API提供了一個稱為“ Insert_with_markers()”的函數,該函數允許您將行插入特定標記之間的.htaccess文件中。這使得以安全可靠的方式將自定義規則添加到.htaccess文件中。 >我可以使用WordPress Filesystem API創建目錄嗎?

    是的,您可以使用WordPress Filesystem API來創建目錄。 API提供了一個稱為“ WP_MKDIR_P()”的函數,該函數可創建目錄和所有必要的父目錄。這使得以可靠的方式創建複雜的目錄結構變得容易。

    >我可以使用WordPress Filesystem API刪除文件和目錄嗎?

    是的,您可以使用WordPress Filesystem API來刪除文件和目錄。 API提供了一個稱為“ delete()”的函數,可以刪除文件和目錄。這使您可以輕鬆地自行清理,並確保您的插件或主題不會在服務器上留下不必要的文件。

以上是WordPress文件系統API簡介的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn