通过使用 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));
?>