使用XML-RPC和PHP将图片上传到WordPress

2023-12-02 0 990

使用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 上找到

请注意:此示例仅用于本教程的演示目的,是一个非常基本且直接的示例


第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->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
include(\’IXR_Library.php\’);
$myFile = \”test.jpg\”;
$fh = fopen($myFile, \’r\’);
$fs = filesize($myFile);
$theData = fread($fh, $fs);
fclose($fh);

$usr = \’admin\’;
$pwd = \’admin\’;
$xmlrpc = \’http://localhost/wordpress/xmlrpc.php\’;
$client = new IXR_Client($xmlrpc);

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


结论

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

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

以上就是使用XML-RPC和PHP将图片上传到WordPress的详细内容,更多请关注悠久资源其它相关文章!

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悠久资源 Wordpress教程 使用XML-RPC和PHP将图片上传到WordPress https://www.u-9.cn/jiaocheng/wordpress-jiaocheng/17186.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务