File "process.php"
Full Path: /home/fresvfqn/waterdamagerestorationandrepairsmithtown.com/wp-content/plugins/surerank/inc/batch-process/process.php
File size: 4.42 KB
MIME-type: text/x-php
Charset: utf-8
<?php
/**
* SureRank Background Process
*
* @package surerank
* @since 1.2.0
*/
namespace SureRank\Inc\BatchProcess;
use SureRank\Inc\Traits\Get_Instance;
use SureRank\Inc\Traits\Logger;
use WP_Background_Process;
/**
* Image Background Process
*
* @since 1.2.0
*/
class Process extends WP_Background_Process {
use Get_Instance;
use Logger;
/**
* Image Process
*
* @var string
*/
protected $action = 'sitemap_process';
/**
* Start time for execution tracking
*
* @since 1.2.0
* @var int
*/
protected $start_time;
/**
* Constructor
*
* @since 1.2.0
* @return void
*/
public function __construct() {
parent::__construct();
/** WooCommerce-style time limit handling. */
$this->start_time = time();
$this->raise_time_limit();
/** Ensure adequate memory. */
wp_raise_memory_limit( 'admin' );
}
/**
* Task
*
* Override this method to perform any actions required on each
* queue item. Return the modified item for further processing
* in the next pass through. Or, return false to remove the
* item from the queue.
*
* @since 1.2.0
*
* @param object $process Queue item object.
* @return mixed
*/
protected function task( $process ) {
$start_time = microtime( true );
if ( $this->time_exceeded() || $this->memory_exceeded() ) {
/** Return the process to continue in next batch. */
return $process;
}
if ( method_exists( $process, 'import' ) ) {
$process->import();
}
return false;
}
/**
* WooCommerce-style time limit handling
* Raises execution time limit intelligently
*
* @param int $limit The limit to raise.
* @return void
*/
protected function raise_time_limit( $limit = 0 ) {
$limit = (int) $limit;
$max_execution_time = (int) ini_get( 'max_execution_time' );
/** If already unlimited, don't change. */
if ( 0 === $max_execution_time ) {
return;
}
/** Default to 300 seconds (5 minutes) if no limit specified. */
$raise_by = 0 === $limit ? 300 : $limit;
/** Only raise if current limit is lower. */
if ( $max_execution_time < $raise_by ) {
$disable_functions = ini_get( 'disable_functions' );
$disable_functions_str = is_string( $disable_functions ) ? $disable_functions : '';
if ( function_exists( 'set_time_limit' )
&& false === strpos( $disable_functions_str, 'set_time_limit' )
&& ! ini_get( 'safe_mode' ) ) {
$result = set_time_limit( $raise_by );
if ( ! $result && ! defined( 'WP_CLI' ) ) {
self::log( 'Failed to set time limit', 'error' );
}
}
}
}
/**
* Check if time limit is likely to be exceeded
* Based on WooCommerce's ActionScheduler implementation
*
* @return bool
*/
protected function time_exceeded() {
$execution_time = $this->get_execution_time();
$max_execution_time = $this->get_time_limit();
$time_threshold = $max_execution_time * 0.9;
return $execution_time >= $time_threshold;
}
/**
* Check if memory limit is likely to be exceeded
* Based on WooCommerce's implementation
*
* @return bool
*/
protected function memory_exceeded() {
$memory_limit = $this->get_memory_limit() * 0.9;
$current_memory = memory_get_usage( true );
return $current_memory >= $memory_limit;
}
/**
* Get execution time since process start
*
* @return int
*/
protected function get_execution_time() {
if ( 0 === $this->start_time ) {
$this->start_time = time();
}
return time() - $this->start_time;
}
/**
* Get time limit for processing
*
* @return int
*/
protected function get_time_limit() {
$time_limit = 30;
$max_execution_time = ini_get( 'max_execution_time' );
if ( $max_execution_time > 0 && $max_execution_time < $time_limit ) {
$time_limit = $max_execution_time;
}
return apply_filters( 'surerank_queue_runner_time_limit', $time_limit );
}
/**
* Get memory limit in bytes
*
* @return int
*/
protected function get_memory_limit() {
if ( function_exists( 'ini_get' ) ) {
$memory_limit = ini_get( 'memory_limit' );
} else {
$memory_limit = '128M';
}
if ( ! $memory_limit || '-1' === $memory_limit ) {
$memory_limit = '1G';
}
return wp_convert_hr_to_bytes( $memory_limit );
}
/**
* Complete
*
* Override if applicable, but ensure that the below actions are
* performed, or, call parent::complete().
*
* @since 1.2.0
* @return void
*/
protected function complete(): void {
parent::complete();
do_action( 'surerank_batch_process_complete' );
}
}