WP_Image_Editor_Imagick::set_imagick_time_limit()

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.

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

File: wp-includes/class-wp-image-editor-imagick.php

	public static function set_imagick_time_limit() {
		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

Changelog
Version Description
6.2.0 Introduced.