猿问

运行插件时,wordpress 变得无响应

我创建了一个 woocommerce 插件, 插件本身运行完美。 然而,只要它需要运行,我就会遇到奇怪的性能问题。 仅从登录并运行插件的浏览器完全无法访问该网站(前端和后端)。 前端和后端都在加载,直到插件完成。 更奇怪的是,它在另一个浏览器上运行得很好。


这也是在高端专用服务器上运行的,当它运行时,服务器上的负载非常低。


有什么线索吗?


require __DIR__ . '/vendor/autoload.php';

error_reporting(E_ALL);

ini_set('display_errors', 1);

include_once($_SERVER['DOCUMENT_ROOT'].'/wp-config.php');


use Automattic\WooCommerce\Client;

$woocommerce = new Client(woocommerce_api_url, api_key, api_secret,['version' => 'wc/v3','timeout' => '99999',]);

echo '<pre>';

$db = new DBfdr();

$i=0;

$page = 1;

$products = [];

$all_products = [];

do{

  try {

    $products = $woocommerce->get('products',array('per_page' => 100, 'page' => $page));

  } catch(HttpClientException $e) {

    die("Can't get products: $e");

  }

  $all_products = array_merge($all_products,$products);

  $page++;



注意:DBfdr 类包含一个简单的函数,用于管理与 sql 服务器的 pdo 连接。


慕无忌1623718
浏览 133回答 2
2回答

茅侃侃

那段代码看起来不太好,为什么您需要制作一个从外部加载 wp 的插件,然后通过 Woocommerce Client Api 获取产品列表,然后循环所有这些来创建 if 条件。如果您只是在 WP 标准插件结构中传递,使用全局 $wpdb 类并通过一些连接执行查询,那么效率会更高。也就是说,您面临的问题可以通过在代码之前添加以下内容来解决:ignore_user_abort( true );&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;/* Don't make the request block till we finish, if possible. */if ( function_exists( 'fastcgi_finish_request' ) && version_compare( phpversion(), '7.0.16', '>=' ) ) {&nbsp; &nbsp; fastcgi_finish_request();}

慕容3067478

出现问题是因为 wp-config.php 包含在开头。wp-config.php 到底有require_once(ABSPATH&nbsp;.&nbsp;'wp-settings.php');它初始化了一些核心的 WordPress 函数,这些函数又“锁定”了 WordPress 的核心函数。会议。 我设法通过删除解决了这个问题include_once($_SERVER['DOCUMENT_ROOT'].'/wp-config.php');并将其替换为自定义定义
随时随地看视频慕课网APP
我要回答