Heim  >  Artikel  >  CMS-Tutorial  >  Laden Sie Bilder mit XML-RPC und PHP in WordPress hoch

Laden Sie Bilder mit XML-RPC und PHP in WordPress hoch

WBOY
WBOYOriginal
2023-09-03 17:45:24680Durchsuche

Laden Sie Bilder mit XML-RPC und PHP in WordPress hoch

Es wird davon ausgegangen, dass Sie mit dem XML-RPC-Protokoll und seiner Funktionsweise, auch in WordPress, vertraut sind und es bereits verwendet haben. Beiträge hinzufügen, Seiten löschen usw. Für Text ist das alles schön und gut, aber was passiert, wenn Sie Dateien wie Bilder an WordPress senden möchten?

In diesem Tutorial behandeln wir eine sehr einfache Möglichkeit, ein Bild an WordPress zu senden, damit es im Medienbereich Ihres Admin-Panels angezeigt wird. Wir senden dieses Bild mit PHP, sodass Sie diesen Code mit einem WordPress-Plugin, Theme oder einfach nur PHP wie in unserem Beispiel verwenden können.


Schritt 1Planen

Um eine allgemeine Vorstellung davon zu bekommen, was wir tun werden und wie es geht, beginne ich dieses Tutorial mit einem Plan. Im Grunde werden wir ein PHP-Skript erstellen, das eine Datei (genauer gesagt ein JPEG-Bild) in eine lokale WordPress-Installation hochlädt.

Wir werden eine PHP-Bibliothek verwenden, um einen XML-RPC-Client in PHP zu erstellen, mit dem wir eine Verbindung zum WordPress-XML-RPC-Server herstellen und Daten senden. Der Client ist eine PHP-Bibliothek namens „The Incutio XML-RPC Library for PHP“, die unter script.incutio.com

zu finden ist

Bitte beachten Sie: Dieses Beispiel dient nur zu Demonstrationszwecken für dieses Tutorial und ist ein sehr einfaches und unkompliziertes Beispiel


Schritt 2Bereiten Sie die Umgebung vor

Für dieses Tutorial benötigen Sie zunächst eine funktionierende Version von WordPress mit PHP und MySQL, die auf Ihrem Apache-Server installiert ist. Sie können es auch lokal verwenden, was ich empfehle und tatsächlich das Beispiel ist, das wir in diesem Tutorial verwenden werden.

Eine weitere Sache, die Sie benötigen, ist die XML-RPC-Bibliothek, die wir in diesem Tutorial verwenden. Die Bibliothek ist mit einer BSD-Lizenz kostenlos und kann unter scripts.incutio.com

gefunden werden

Die Bibliothek ist eigentlich nur eine PHP-Datei namens IXR_Library.php, die wir in diesem Tutorial verwenden werden. Als nächstes müssen Sie ein Verzeichnis im htdocs (oder Web-Root)-Ordner Ihrer lokalen Serverinstallation erstellen, in das Sie die Datei IXR_Library.php kopieren und daneben auch einen index php erstellen Datei. Die Datei index.php muss jetzt leer sein.

Das Wichtigste, was wir bei der WordPress-Installation tun müssen, ist die Aktivierung des XML-RPC-Dienstes. WordPress deaktiviert diese Funktion standardmäßig, daher müssen wir in die Einstellungen im Admin-Panel gehen und sie aktivieren. Gehen Sie dazu zu Einstellungen -> Schreiben und unter der Überschrift Remote Publishing finden Sie ein Kontrollkästchen neben XML-RPC, das standardmäßig deaktiviert ist. Wählen Sie es aus und klicken Sie auf Änderungen speichern.

Jetzt können wir mit dem integrierten XML-RPC-Server von WordPress kommunizieren.


Schritt 3Code-Erklärung

Der lustige Teil ist da, fangen wir an! Öffnen Sie die zuvor erwähnte Datei index.php mit Ihrem bevorzugten Code-Editor.

Bibliothek inklusive

Als Erstes müssen wir die gerade heruntergeladene Bibliotheksdatei einbinden, damit wir sie später verwenden können. Deshalb bearbeiten wir die Datei index.php und fügen den folgenden Code hinzu (vergessen Sie nicht, mit dem PHP-Tag zu beginnen, wie im Beispiel gezeigt):

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

Dies deckt im Grunde alles ab, was wir brauchen, damit unser Skript funktioniert. Kurz gesagt, wir werden den Client-Teil der Bibliothek verwenden, den wir gerade hinzugefügt haben. Das machen wir später.

Bilder lesen (JPEG-Dateien)

Da wir ein Bild (jpg-Datei) an WordPress senden müssen, müssen wir es irgendwie senden. Die Lösung besteht darin, es im Bitformat zu senden. Wie Sie später sehen werden, fordert die XML-RPC-Serverfunktion es an. Aber um es so zu senden, müssen wir seinen Inhalt in Bits umwandeln und dafür müssen wir seinen Inhalt erhalten. Diese Datei (jede JPG-Bilddatei, wir nennen sie test.jpg) wird neben der Datei index.php (im selben Verzeichnis) platziert und im nächsten Teil lesen wir ihren Inhalt und speichern ihn in einer Variablen zur späteren Verwendung ein.

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

Was der obige Code bewirkt, ist zunächst, dass er eine neue Variable namens $myfile erstellt, die den Zeichenfolgenwert des Dateinamens enthält. Da sie sich im selben Ordner befindet, müssen keine anderen Pfadinformationen dafür angegeben werden, sondern nur der Name , in diesem Fall test.php.

Als nächstes müssen wir die Datei öffnen, also verwenden wir eine PHP-Funktion 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->debug = true;

如果您激活它,您将可以更清楚地了解出现问题时发生的情况。

将数据放置在适当的位置

在发送数据之前,我们必须正确组织和格式化数据,并且由于我们需要发送数据的方式,我们必须创建一个包含所有值的数组。我们将此数组命名为 $params 并为其指定以下值:

$params = array('name' => 'test.jpg', 'type' => 'image/jpg', 'bits' => new IXR_Base64($theData), 'overwrite' => 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->query('wp.uploadFile',1, $usr, $pwd, $params);

$res 变量给出从 $client 变量内部调用的 query 函数的结果,该变量表示最初声明和启动的 XML-RPC 客户端实现。基本上我们正在向服务器发送请求。服务器将收到带有以下参数的请求:

  • wp.uploadFile - 我们调用并用于上传文件所需的服务函数
  • 1 - 博客ID(每个WordPress博客都有一个ID,默认为1
  • $usr - 先前声明的用户名变量。
  • $pwd - 先前声明的密码变量。
  • $params - 我们刚才讨论的参数数组。

完整代码

以上所有代码放在一起看起来像这样:



结论

实现这样的客户端并不难,但是因为有时你要构建的代码是特定的,所以你需要知道你在做什么,这样才能达到预期的效果。 PHP 中针对 WordPress XML-RPC 上传文件服务器请求的 XML-RPC 客户端实现就是这样一个示例。如果您发送的数据格式不正确,则可能不会被接受。这个例子虽然只有几行代码,但是非常具体。相同的客户端可用于制作任何其他类型的

使用带有适当参数的不同 XML-RPC 请求函数向 WordPress 发出请求。

Das obige ist der detaillierte Inhalt vonLaden Sie Bilder mit XML-RPC und PHP in WordPress hoch. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn