prospress/hosts-helper

此包已被弃用且不再维护。未建议替代包。

处理特定主机提供商的辅助类。

v1.0.2 2018-10-10 21:44 UTC

This package is auto-updated.

Last update: 2023-08-29 05:03:09 UTC


README

重要:本代码提供仅供参考,但不提供任何保证。有关详细信息,请参阅包含在代码中的GNU通用公共许可证。Automattic或WooCommerce支持服务也无法协助使用此代码。

Prospress Hosts Helper

此库提供了一个易于使用的接口,用于识别管理型WP主机的一些已知特性。

要求

由于使用了命名空间,此库需要 PHP 5.3+

已识别的主机

目前有4个已识别的主机环境

  1. Pantheon
  2. SiteGround
  3. WP Engine
  4. 所有其他主机

注意:Prospress不推荐任何特定主机提供商。

自动加载

Composer自动加载器

在使用此库之前,您需要初始化 Composer

composer install

然后您的代码可以 require vendor/autoloader.php 文件来自动加载此库中使用的类。

自定义自动加载器

如果您出于任何原因不想使用Composer,您可以使用自定义的 PSR-4自动加载器。您可以自己编写,或者使用现有的一个。现有的一个不错的自动加载器是WP CLI中实现的。然后您需要将此库的 src/ 目录与 Prospress\Hosts 命名空间相关联。

用法

要获取提供当前主机信息的类实现,您应使用 Prospress\Hosts\Helper::getHost() 方法。这将提供一个基于检测到的主机环境的类实例。

目前此库有两个用途

  1. 确定当前环境的脚本超时。
  2. 确定是否终止了特定字符长度的数据库查询。如果终止了,有方法可以取消钩子和重新钩子终止功能。

脚本超时

要获取当前主机的脚本超时,您可以使用 getTimeout() 方法

<?php

use Prospress\Hosts\Helper;

$timeout = Helper::getHost()->getTimeout();

getTimeout() 方法是 Prospress\Hosts\HostInterface 接口的一部分。所有可以由 Helper::getHost() 返回的类对象都实现了此接口。

查询终止

此内容仅适用于WP Engine

可以确定当前主机是否已设置查询杀手

<?php

use Prospress\Hosts\Helper;

$are_queries_killed = Helper::areQueriesKilled();

使用Helper::areQueriesKilled()方法对所有主机提供商都是安全的,并且是推荐的方式来确定当前环境中是否已杀死查询。

此库还便于插件绕过查询杀手。如果主机提供商设置了一些查询杀手的机制,那么由Helper::getHost()返回的类实例将实现Prospress\Hosts\KillsQueries接口,同时实现上述提到的HostInterface接口。此接口提供了3个方法

  1. areQueriesKilled() – 返回一个bool值,表示是否已杀死查询。
  2. unhookQueryKiller() – 这将从WordPress中的钩子移除查询杀手。
  3. rehookQueryKiller() – 这将查询杀手代码重新添加到WordPress中的钩子。

这些辅助方法旨在允许开发者有选择地移除查询杀手。具体来说,查询杀手应该在数据库查询之前立即移除,然后在查询完成后立即再次添加。以下是一个示例:

<?php

use Prospress\Hosts\Helper;

global $wpdb;

if ( Helper::areQueriesKilled() ) {
    Helper::getHost()->unhookQueryKiller();
}

$result = $wpdb->query(/* your long query here */);

if ( Helper::areQueriesKilled() ) {
    Helper::getHost()->rehookQueryKiller();
}

bb6a0958-a983-11e5-8e9b-b9781d37c64a.png