WordPress网站上的请求已弃用警告

Requests depreciated warning on WordPress website

提问人:user9102437 提问时间:3/30/2023 更新时间:8/22/2023 访问量:4786

问:

我有一个网站,可以在最新版本的WordPress上运行(在撰写本文时为6.2)。最近我的网站开始抛出警告:

<br />
<b>Deprecated</b>:  The PSR-0 `Requests_...` class names in the Request library are deprecated. Switch to the PSR-4 `WpOrg\Requests\...` class names at your earliest convenience. in <b>/home/username/public_html/wp-includes/Requests/src/Autoload.php</b> on line <b>171</b><br />

问题是:我有ajax请求返回此警告以及实际输出破坏某些页面。现在,我已经打开了建议的文件,并注释掉了此函数中的函数调用:Autoload.phptrigger_error

public static function load($class_name) {
            // Check that the class starts with "Requests" (PSR-0) or "WpOrg\Requests" (PSR-4).
            $psr_4_prefix_pos = strpos($class_name, 'WpOrg\\Requests\\');

            if (stripos($class_name, 'Requests') !== 0 && $psr_4_prefix_pos !== 0) {
                return false;
            }

            $class_lower = strtolower($class_name);

            if ($class_lower === 'requests') {
                // Reference to the original PSR-0 Requests class.
                $file = dirname(__DIR__) . '/library/Requests.php';
            } elseif ($psr_4_prefix_pos === 0) {
                // PSR-4 classname.
                $file = __DIR__ . '/' . strtr(substr($class_name, 15), '\\', '/') . '.php';
            }

            if (isset($file) && file_exists($file)) {
                include $file;
                return true;
            }

            /*
             * Okay, so the class starts with "Requests", but we couldn't find the file.
             * If this is one of the deprecated/renamed PSR-0 classes being requested,
             * let's alias it to the new name and throw a deprecation notice.
             */
            if (isset(self::$deprecated_classes[$class_lower])) {
                /*
                 * Integrators who cannot yet upgrade to the PSR-4 class names can silence deprecations
                 * by defining a `REQUESTS_SILENCE_PSR0_DEPRECATIONS` constant and setting it to `true`.
                 * The constant needs to be defined before the first deprecated class is requested
                 * via this autoloader.
                 */
                if (!defined('REQUESTS_SILENCE_PSR0_DEPRECATIONS') || REQUESTS_SILENCE_PSR0_DEPRECATIONS !== true) {
                    // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_trigger_error
                    trigger_error(
                        'The PSR-0 `Requests_...` class names in the Request library are deprecated.'
                        . ' Switch to the PSR-4 `WpOrg\Requests\...` class names at your earliest convenience.',
                        E_USER_DEPRECATED
                    );
                    // Prevent the deprecation notice from being thrown twice.
                    if (!defined('REQUESTS_SILENCE_PSR0_DEPRECATIONS')) {
                        define('REQUESTS_SILENCE_PSR0_DEPRECATIONS', true);
                    }
                }

                // Create an alias and let the autoloader recursively kick in to load the PSR-4 class.
                return class_alias(self::$deprecated_classes[$class_lower], $class_name, true);
            }

            return false;
        }

但是,我当然明白这个解决方案只不过是暂时的,也许有人知道如何解决问题,而不仅仅是隐藏它?

我还打印了变量,结果是.我没有在我的代码中使用这个类名,所以我假设它被其他东西使用,这就是为什么我不知道我需要更改什么。$class_nameRequests_IDNAEncoder

PHP WordPress 警告

评论

1赞 CBroe 3/30/2023
看看那里的评论是怎么说的?“尚不能升级到 PSR-4 类名称的集成商可以通过定义一个 REQUESTS_SILENCE_PSR0_DEPRECATIONS 常量并将其设置为 true 来消除弃用。”
0赞 O. Jones 3/30/2023
Requests 下的子目录是 6.2 中新增的。这里可能有一个插件或主题在起作用。而且,IDNAEncoder 与使用 punycode 规范处理国际化主机名有关。您能给我们追溯一下您收到的消息吗?这可能是新推出的 6.2 中的一个错误。或者告诉我们如何重现这个。或者只是放入您的文件并忘记问题。\srcconst REQUESTS_SILENCE_PSR0_DEPRECATIONS = true;wp-config.php
0赞 user9102437 3/30/2023
@O.琼斯,我很想给你完整的追溯,但这就是我所得到的。它基本上告诉您第 171 行,即呼叫。让我知道如何获得正确的回溯,我会为你做这件事。trigger_error

答:

2赞 Adeleye Ayodeji 4/6/2023 #1

我通过将以前的类名更改为新添加的命名空间来解决此问题RequestsWpOrg\Requests\Requests

具有新命名空间的示例

  //get countries
        $response  = \WpOrg\Requests\Requests::get(self::$enpoint . 'countries', [
            'Authorization' => 'Bearer ' . self::$skkey,
  ]);

-3赞 C.S. Lazzar 8/22/2023 #2

听起来您正在从 WooCommerce 使用的 Requests 库中收到弃用警告。这表示 PSR-0 样式类名称(如 Requests_Utility_FilteredIterator)已弃用,取而代之的是 PSR-4 命名空间版本(如 WpOrg\Requests\Utility\FilteredIterator)。

您可以尝试以下几件事来解决此问题:

  1. 升级到最新版本的 WooCommerce。他们可能已更新请求库以使用新的 PSR-4 类。

  2. 手动更新 WordPress 安装中的 Requests 库文件以使用命名空间版本。您需要将所有Requests_类名替换为 WpOrg\Requests。

手动更新 Requests 库涉及查找包含已弃用的 Requests_ 类名的所有文件,并将其替换为命名空间版本。这仅适用于专业人士,这不会是一个永久的解决方案,因为模块会更新,文件中的更改将丢失。

所以:这个想法是找到导致错误的模块。

我做了什么:我逐个禁用了我怀疑可能导致问题的模块。就我而言,它是 Woocommerce Stripe Gateway。

后续步骤:我将就错误与他们联系。

临时修复:我禁用了 Stripe Gateway 模块。

评论

2赞 starball 8/22/2023
你有没有使用 chatgpt 或任何类似的 AI 来写这个答案的任何部分?