首页 > CMS教程 > &#&按 > WordPress文件系统API简介

WordPress文件系统API简介

Jennifer Aniston
发布: 2025-02-17 08:38:10
原创
642 人浏览过

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板