使用XML-RPC和PHP將圖片上傳到WordPress

使用XML-RPC和PHP將圖片上傳到WordPress

假設您熟悉 xml-rpc 協議及其工作原理,甚至在 WordPress 中也是如此,并且您以前使用過它。添加帖子、刪除頁面等。對于文本來說一切都很好,但是當您想將圖片等文件發送到 WordPress 時會發生什么?

在本教程中,我們將介紹一種將圖片發送到 WordPress 的非常簡單的方法,以便它顯示在管理面板的媒體部分中。我們將使用 php 發送這張圖片,以便您可以將此代碼用于 WordPress 插件、主題,甚至只是簡單的 PHP,就像我們的示例中一樣。


第 1 步計劃

為了大致了解我們將要做什么以及如何做,我將以一個計劃開始本教程。基本上,我們將制作一個 PHP 腳本,將文件(更準確地說是 jpeg 圖像)上傳到本地 WordPress 安裝。

我們將使用一個 PHP 庫來在 PHP 中創建 XML-RPC 客戶端,我們將用它來連接到 WordPress XML-RPC 服務器并發送數據。該客戶端是一個名為“The Incutio XML-RPC Library for PHP”的 PHP 庫,可以在 script.incutio.com 上找到

立即學習PHP免費學習筆記(深入)”;

請注意:此示例僅用于本教程的演示目的,是一個非常基本且直接的示例


第2步準備環境

對于本教程,您首先需要的是 apache 服務器上安裝了 PHP 和 mysql 的 WordPress 工作版本。您也可以在本地使用它,這是我推薦的,實際上也是我們將在本教程中使用的示例。

您需要的另一件事是我們在本教程中使用的 XML-RPC 庫。該庫是免費的,具有 BSD 許可證,可以在 scripts.incutio.com 上找到

該庫實際上只是一個名為 IXR_Library.php 的 PHP 文件,我們將在本教程中使用它。您需要做的下一件事是在本地服務器安裝的 htdocs(或 Web 根)文件夾中創建一個目錄,您將在其中復制 IXR_Library.php 文件并還在其旁邊創建一個 index.php 文件。 index.php 文件現在需要為空。

在WordPress安裝中我們需要做的最重要的事情是激活XML-RPC服務。 WordPress 默認情況下禁用此功能,因此我們需要進入管理面板中的設置并激活它。為此,請轉到設置 -> 寫作,然后在遠程發布標題下,您會發現 XML-RPC 旁邊有一個復選框默認情況下取消選擇它。選擇它并單擊“保存更改”。

現在,我們可以與 WordPress 內置的 XML-RPC 服務器進行通信。


第 3 步代碼解釋

有趣的部分來了,讓我們開始吧!使用您最喜歡的代碼編輯器打開前面提到的 index.php 文件。

包括圖書館

我們需要做的第一件事是包含我們剛剛下載的庫文件,以便我們以后可以使用它。因此,我們編輯 index.php 文件并添加以下代碼(不要忘記以 PHP 標記開頭,如示例中所示):

 <?php include_once('IXR_Library.php'); ?>

這基本上涵蓋了我們的腳本工作所需的所有內容。簡而言之,我們將使用剛剛包含的庫的客戶端部分。我們稍后會執行此操作。

讀取圖像(Jpeg 文件)

因為我們需要將圖像(jpg 文件)發送到 WordPress,所以我們需要以某種方式發送它。解決方案是以位格式發送它,就像您稍后將看到的那樣,XML-RPC 服務器功能請求它。但是要像這樣發送它,我們需要將其內容轉換為位,并且為此我們需要獲取其內容。該文件(任何 jpg 圖片文件,我們將其命名為 test.jpg)將放置在 index.php 文件旁邊(在同一目錄中),在下一部分中,我們將讀取其內容并將其存儲在變量中以供以后使用。

 $myFile = "test.jpg"; $fh = fopen($myFile, 'r'); $fs = filesize($myFile);  $theData = fread($fh, $fs); fclose($fh); 

上面的代碼的作用是,首先,它創建一個名為 $myfile 的新變量,其中包含文件名的字符串值,因為它位于同一文件夾中,所以不需要卡住任何其他路徑信息對于它,只是名稱,在本例中為 test.php

接下來我們需要打開該文件,因此我們使用 PHP 函數 fopen 來完成此操作,我們將其與上一個變量的第一個參數 $myFile 和第二個參數另一個字符串一起使用,該字符串表示我們要執行的操作將在文件上進行操作。 r 的字符串值表示正在讀取。我們將打開文件的結果添加到變量 $fh。

然后,因為我們需要文件內容長度,所以我們將使用 PHP 函數 $filesize 返回的值創建變量 $fs,該函數使用參數 $myFile

最后,我們進入讀取部分,我們將執行讀取操作的函數返回的值賦予變量 $theData,即 fread。該函數使用兩個參數,第一個是之前打開的文件變量($fh),第二個是之前設置的文件大小($fs)。

最后,我們使用函數 fclose 及其參數 $fh 關閉打開的文件。此時,我們已經有了 jpg 文件的內容,我們將把它發送到 WordPress 的 XML-RPC 服務器。

創建 XML-RPC 客戶端

在下一部分中,我們將使用剛剛導入的庫連接到 WordPress 的安裝 XML-RPC 服務器。為此,我們需要以下 3 個變量:

  • $usr(管理面板用戶名),$pwd(管理面板密碼)和
  • $xmlrpc(XML-RPC 服務器路徑)。請注意,XML-RPC 服務器路徑由基本 WordPress 安裝 URL + 斜杠后面的 xmlprc.php 文件組成。
 $usr = 'admin'; $pwd = 'admin'; $xmlrpc = 'http://localhost/wordpress/xmlrpc.php'; $client = new IXR_Client($xmlrpc); 

接下來我們需要創建對服務器的調用。為此,我們將使用剛剛創建的 URL 字符串和從導入的庫文件繼承的 IXR_Client 類。此時,變量 $client 被聲明為該鏈接的新客戶端,并且所有操作都將使用它來完成。

下一部分是可選的,但如果您愿意,您可以像這樣激活調試:

 $client-&gt;debug = true; 

如果您激活它,您將可以更清楚地了解出現問題時發生的情況。

將數據放置在適當的位置

在發送數據之前,我們必須正確組織和格式化數據,并且由于我們需要發送數據的方式,我們必須創建一個包含所有值的數組。我們將此數組命名為 $params 并為其指定以下值:

 $params = array('name' =&gt; 'test.jpg', 'type' =&gt; 'image/jpg', 'bits' =&gt; new IXR_Base64($theData), 'overwrite' =&gt; false); 

首先,我們需要為 name 的數組索引名稱指定 ‘test.jpg 的值,因為這將是文件的名稱。之后我們有索引名稱 type,我們給出 image/jpg 的值。這是我們正在上傳的文件類型。然后我們就有了名為 bits 的索引,它實際上是我們需要發送的文件。現在,WordPress XML-RPC API 要求以 64 位為基礎發送該值。為了正確執行此操作,我們將使用變量 $theData,但我們需要通過類 IXR_Base64 運行它,以便將其相應地編碼為 base64 位。為了將文件按請求成功發送到服務器,base64 編碼的格式正確非常重要。 Base64 編碼有多種,如果使用了不正確的編碼,將不可避免地出現錯誤。上面示例中使用的 IXR_Base64 類按照服務器的要求轉換文件的內容。最后,將索引類型 overwrite 設置為 false,將 false 屬性賦予覆蓋同名現有文件的選項。

通過 XML-RPC 發送數據

要使該腳本正常工作,我們需要做的最后一件事是通過激活來自 $client 變量的請求將數據發送到 WordPress,如下所示:

 $res = $client-&gt;query('wp.uploadFile',1, $usr, $pwd, $params); 

$res 變量給出從 $client 變量內部調用的 query 函數的結果,該變量表示最初聲明和啟動的 XML-RPC 客戶端實現。基本上我們正在向服務器發送請求。服務器將收到帶有以下參數的請求:

  • wp.uploadFile – 我們調用并用于上傳文件所需的服務函數
  • 1 – 博客ID(每個WordPress博客都有一個ID,默認為1
  • $usr – 先前聲明的用戶名變量。
  • $pwd – 先前聲明的密碼變量。
  • $params – 我們剛才討論的參數數組

完整代碼

以上所有代碼放在一起看起來像這樣:

 debug = true; $params = array('name' =&gt; 'test.jpg', 'type' =&gt; 'image/jpg', 'bits' =&gt; new IXR_Base64($theData), 'overwrite' =&gt; false); $res = $client-&gt;query('wp.uploadFile',1, $usr, $pwd, $params); ?> 

結論

實現這樣的客戶端并不難,但是因為有時你要構建的代碼是特定的,所以你需要知道你在做什么,這樣才能達到預期的效果。 PHP 中針對 WordPress XML-RPC 上傳文件服務器請求的 XML-RPC 客戶端實現就是這樣一個示例。如果您發送的數據格式不正確,則可能不會被接受。這個例子雖然只有幾行代碼,但是非常具體。相同的客戶端可用于制作任何其他類型的

使用帶有適當參數的不同 XML-RPC 請求函數向 WordPress 發出請求。

? 版權聲明
THE END
喜歡就支持一下吧
點贊6 分享