Sets Imagick time limit.
Description
Depending on configuration, Imagick processing may take time.
Multiple problems exist if PHP times out before ImageMagick completed:
- Temporary files aren’t cleaned by ImageMagick garbage collection.
- No clear error is provided.
- 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.
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;
}
}
User Contributed Notes
You must log in before being able to contribute a note or feedback.