WP_Image_Editor_Imagick::set_imagick_time_limit()public staticWP 6.2.0

Sets Imagick time limit.

Depending on configuration, Imagick processing may take time.

Multiple problems exist if PHP times out before ImageMagick completed:

  1. Temporary files aren't cleaned by ImageMagick garbage collection.
  2. No clear error is provided.
  3. The cause of such timeout can be hard to pinpoint.

This function, which is expected to be run before heavy image routines, resolves point 1 above by aligning Imagick's timeout with PHP's timeout, assuming it is set.

However seems it introduces more problems than it fixes, see https://core.trac.wordpress.org/ticket/58202.

Note:

  • Imagick resource exhaustion does not issue catchable exceptions (yet).
    See https://github.com/Imagick/imagick/issues/333.
    • The resource limit is not saved/restored. It applies to subsequent
      image operations within the time of the HTTP request.

Метод класса: WP_Image_Editor_Imagick{}

Хуков нет.

Возвращает

int|null. The new limit on success, null on failure.

Использование

$result = WP_Image_Editor_Imagick::set_imagick_time_limit();

Список изменений

С версии 6.2.0 Введена.
С версии 6.3.0 This method was deprecated.

Код WP_Image_Editor_Imagick::set_imagick_time_limit() WP 6.6.2

public static function set_imagick_time_limit() {
	_deprecated_function( __METHOD__, '6.3.0' );

	if ( ! defined( 'Imagick::RESOURCETYPE_TIME' ) ) {
		return null;
	}

	// Returns PHP_FLOAT_MAX if unset.
	$imagick_timeout = Imagick::getResourceLimit( Imagick::RESOURCETYPE_TIME );

	// Convert to an integer, keeping in mind that: 0 === (int) PHP_FLOAT_MAX.
	$imagick_timeout = $imagick_timeout > PHP_INT_MAX ? PHP_INT_MAX : (int) $imagick_timeout;

	$php_timeout = (int) ini_get( 'max_execution_time' );

	if ( $php_timeout > 1 && $php_timeout < $imagick_timeout ) {
		$limit = (float) 0.8 * $php_timeout;
		Imagick::setResourceLimit( Imagick::RESOURCETYPE_TIME, $limit );

		return $limit;
	}
}