【问题标题】:WP plugin: Why do I need to require the dependencies of a library?WP 插件:为什么我需要一个库的依赖项?
【发布时间】:2020-06-01 22:05:19
【问题描述】:

在 WordPress 插件中,这不起作用

<?php

/**
 * Plugin Name:       test
 * Plugin URI:        _
 * Description:       _
 * Version:           0.0.1
 * Author:            _
 * Author URI:        _
 * License:           GPL-2.0+
 * License URI:       _
 * Text Domain:       _
 */


// If this file is called directly, abort.
if (!defined('WPINC')) {
    die;
}

require_once ABSPATH . 'wp-admin/includes/class-wp-filesystem-direct.php';

但这确实有效

require_once ABSPATH . 'wp-admin/includes/class-wp-filesystem-base.php';
require_once ABSPATH . 'wp-admin/includes/class-wp-filesystem-direct.php';

class-wp-filesystem-direct 里面你可以看到它是从class-wp-filesystem-base 延伸出来的

为什么我需要这两个库?


错误是

Fatal error: Uncaught Error: Class 'WP_Filesystem_Base' not found in /home/..../domains/..../public_html/wp-admin/includes/class-wp-filesystem-direct.php:16 

【问题讨论】:

  • 嗨,对于这些类型的错误,我通常会尝试使用 php 回显路径并检查托管 foums,有时路径是错误的,有时它只是一个大写字母!!,有时它是一些chown root:root 或 admin:admin 或 chmod 安全性。是的,在使用共享主机时很难确定罪魁祸首。
  • 我检查了路径,核心插件也失败的事实也丢弃了我这边的任何拼写错误......并且文件夹中的权限为 755,文件中的权限为 644(例如class-wp-filesystem-direct.phpclass-wp-filesystem-base.php,现在我通过 ftp 看到)......我也看到我的用户是一切的所有者......老实说,我已经没有想法了:-|
  • 哇,听起来你检查了一切,也许你可以尝试更改 PHP 版本,如果它是一个 CPanel,不知道,但有时它会有所帮助。
  • 已更改且没有更改...
  • 是的,但我仍然无法使用 WP_Filesystem_Direct::rmdir,因为它不需要其他类并崩溃 |我会看看这是否发生在本地(不这么认为),也许我尝试迁移到其他主机......不知道......但非常感谢您的评论!

标签: php wordpress path require


【解决方案1】:

require 语句完全按预期工作,问题在于您要加载的内容。它具有未满足的依赖关系,并且依赖于未加载的其他内容。

加载class-wp-filesystem-direct.php 将加载该文件中的内容,但不会搜索它需要的其他内容。 WordPress 不使用 PHP 自动加载

所以一些笔记:

  • WordPress 中的 WP Admin 包含文件不包含其所有依赖项
  • 如果您尝试加载继承自尚未加载的类的类,则会收到致命错误
  • 您不应该尝试在插件顶部包含 WP Admin 文件,因为加载到前端可能会导致问题
  • 如果您想使用 WP_FileSystem,则无需加载这些文件和文件夹

您的问题是您不能只在 WP Admin 中包含随机文件,它们具有需要事先包含的依赖项。

所以你的 require 语句可以正常工作,

【讨论】:

  • 太好了,你有什么文档可以阅读吗?不知道这种行为。关于你的第四点,如果我想删除一个文件夹,rmdir 有什么替代方法吗?
  • 这是基本的 PHP,所以我建议使用 php.net,至于删除文件夹,你应该在 WP 堆栈上询问,但是,我强烈建议不要从前端修改文件系统性能和安全原因
  • 此外,从这里和 WPSE 上的问题可以清楚地看出,您正在尝试做一些奇怪的事情,遇到问题并询问解决方案,但是隐藏您要构建的内容,这要容易得多做事的方法更简单,但在不了解上下文的情况下很难为您指出这些方向
  • 正如您所指出的,这个问题确实是一个基本的 PHP 问题。现在如果其他用户看到这样的问题,他将不会对我的秘密计划感兴趣。让我们为此提出一个新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-02
  • 2018-01-30
  • 1970-01-01
  • 2019-05-16
  • 2017-04-09
  • 1970-01-01
相关资源
最近更新 更多