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 則註解

0
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.dev.org.tw/script/architecture.php

ImageMagick 官方資源頁面有關於這些參數如何運作的更多資訊。例如,檔案限制文件提到,當使用者超出限制時,任何更多的檔案都將「快取到磁碟,並根據需要關閉和重新開啟。」(再次,效能會受到影響。)請在此處參閱該頁面:https://imagemagick.dev.org.tw/script/resources.php

當有人超出限制時會發生什麼事?它不會導致 PHP 指令碼發生錯誤,而只是將他們的使用者活動重新定位到非快取記憶體(即:虛擬記憶體,速度較慢)。因此,即使您擔心限制,它實際上只表示伺服器中,使用者的請求相較於其他使用者請求被貶值的點。

請記住,您始終可以在自己伺服器的 policy.xml 檔案中設定預設值。

一些範例程式碼

<?php

// 作者:holdoffhunger@gmail.com

// 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