WP_Image_Editor_Imagick::set_imagick_time_limit()
Sets Imagick time limit.
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.
- The resource limit is not saved/restored. It applies to subsequent
Метод класса: 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 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; } }