WP_Image_Editor_Imagick::set_imagick_time_limit(): int|null

In this article

Sets Imagick time limit.

Description

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.

Return

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

Source

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;
	}
}

Changelog

VersionDescription
6.3.0This method was deprecated.
6.2.0Introduced.

User Contributed Notes

You must log in before being able to contribute a note or feedback.