PHP Conference Japan 2024

Imagick::getResourceLimit

(PECL imagick 2, PECL imagick 3)

Imagick::getResourceLimit返回指定的资源限制

描述

public static Imagick::getResourceLimit(int $type): int

返回指定的资源限制。

参数

type

一个 resourcetype 常量

返回值

返回指定的资源限制。单位取决于受限资源的类型。

错误/异常

发生错误时抛出 ImagickException。

参见

添加注释

用户贡献的注释 1 个注释

holdoffhunger at gmail dot com
12 年前
通过使用 PHP 函数 getResourceLimit,您将获得特定类型资源的最大允许数量。返回的整数是您在输入参数中指定的资源允许的字节数。对于输入参数选项,您有 ImageMagick 包的预定义 ResourceType 常量。在代码中,它们看起来像 imagick::RESOURCETYPE_AREA,但您有以下“_VALUE”选项:undefined、area、disk、file、map 和 memory。

这些特定值分别代表什么?ImageMagick 官方文档在这方面很有帮助。File 表示“打开的像素缓存文件的最大数量”,Area 表示“可以驻留在像素缓存内存中的任何一个图像的最大面积(以字节为单位)”,Memory 表示“为像素缓存分配的最大内存量(以字节为单位)”,map 表示“为像素缓存分配的最大内存映射量(以字节为单位)”,disk 表示“像素缓存允许使用的最大磁盘空间(以字节为单位)”。这是根据 ImageMagick 官方架构页面:https://imagemagick.org.cn/script/architecture.php

ImageMagick 官方资源页面提供了有关这些参数如何工作的更多信息。例如,文件限制文档提到,当用户超出限制时,任何其他文件都将“缓存到磁盘,并在需要时关闭并重新打开。”(同样,性能会下降。)请在此处查看该页面:https://imagemagick.org.cn/script/resources.php

当有人超出限制时会发生什么?它不会导致 PHP 脚本出错,而只是简单地将用户的活动重新定位到非缓存内存(即:虚拟内存,速度很慢)。因此,即使您担心限制,它实际上只表示服务器上用户请求贬值与其他用户请求相比的点。

请记住,您始终可以在您自己的服务器上的 policy.xml 文件中设置默认值。

一些示例代码

<?php

// 作者:[email protected]

// Imagick 类型
// ---------------------------------------------

$imagick_type = new Imagick();

// 打开文件
// ---------------------------------------------

$file_to_grab = "image_workshop_directory/test.gif";

$file_handle_for_viewing_image_file = fopen($file_to_grab, 'a+');

// 获取文件
// ---------------------------------------------

$imagick_type->readImageFile($file_handle_for_viewing_image_file);

// 获取/显示资源值
// ---------------------------------------------

print("Undefined: ");
print(
$imagick_type->getResourceLimit(imagick::RESOURCETYPE_UNDEFINED));

print(
"<br><br>Area: ");
print(
$imagick_type->getResourceLimit(imagick::RESOURCETYPE_AREA));

print(
"<br><br>Disk: ");
print(
$imagick_type->getResourceLimit(imagick::RESOURCETYPE_DISK));

print(
"<br><br>File: ");
print(
$imagick_type->getResourceLimit(imagick::RESOURCETYPE_FILE));

print(
"<br><br>Map: ");
print(
$imagick_type->getResourceLimit(imagick::RESOURCETYPE_MAP));

print(
"<br><br>Memory: ");
print(
$imagick_type->getResourceLimit(imagick::RESOURCETYPE_MEMORY));

?>
To Top