Imagick是使用ImageMagick庫創建和修改圖像的PHP擴展名。 HHVM也有一個Imagick版本。儘管這兩個擴展名在其API中大多兼容,並且它們都稱為ImageMagick庫,但兩個擴展名是完全獨立的代碼庫。
也可以在https://bugs.php.net上報告錯誤,但響應時間可能較慢。
安裝Imagick的最佳方法是通過軟件包管理器,例如APT,YUM,Brew,因為它們還將為您安裝ImageMagick。
如果您需要從源中編譯Imagick,則首先應該安裝ImageMagick,至少版本6.2.4,但是強烈建議使用更近期的版本,因為其中有許多錯誤修復。
一旦安裝了ImageMagick,以下命令將編譯並安裝Imagick:
git clone https://github.com/Imagick/imagick
cd imagick
phpize && ./configure
make
make install
您還需要將extension=imagick.so添加到PHP INI文件中,以使PHP加載擴展名。
對於Windows,請同時安裝Imagick和基礎ImageMagick庫,
一旦編譯,Imagick就應該以與對其進行編譯相同的ImageMagick進行運行。已知反對不同版本的ImageMagick會導致穩定性問題,因此不建議或支持。
如果在nixos上使用Imagick,您可能需要定義FontConfig_file,以避免加載字體時的警告消息,而Magick_configure_path則可以從Imagick :: getConfigureOptions()中獲得所有可用的信息()。
庫中幾乎所有功能都在www.phpimagick.com上都有一個示例,您可以在其中看到示例代碼來調用該功能,以及生成的圖像或輸出。
ImageMagick是Imagick Extension暴露於PHP的庫有許多錯誤修復,這些錯誤修復了許多圖像損壞問題。如果可能的話,我們強烈建議您升級到最新版本(大於6.9.1或7.x)。
PHP擴展Imagick通過調用ImageMagick庫來起作用。儘管ImageMagick開發人員在避免錯誤方面非常注意,但不可避免地會在代碼中存在一些錯誤。 ImageMagick還使用許多第三方庫打開,閱讀和操縱文件。這些圖書館的作者在編寫代碼時也要注意。但是,每個人都會犯錯誤,不可避免地會有一些錯誤。
由於ImageMagick用於處理圖像,因此黑客可以創建包含無效數據的圖像來嘗試利用這些錯誤。因此,我們建議以下內容:
如果ImageMagick正在使用的庫中,這樣做將使黑客更難利用錯誤。
將其作為非常低的特權過程運行。應鎖定來自PHP腳本的文件和系統資源,應鎖定Imagick的PHP腳本。
驗證所有圖像文件都以與您支持的圖像文件類型相對應的預期“魔術字節”開頭,然後將其發送到ImageMagick進行處理。使用finfo_file() - 請參見下文。
在將圖像處理的結果顯示給用戶之前,請檢查圖像處理的結果。在極不可能的情況下,黑客能夠將任意文件輸送到Imagick的輸出中,檢查它是一個圖像文件,而不是要發送的應用程序的源代碼,這是明智的預防措施。這可以通過以下代碼完成:
<?php
$ finfo = finfo_open ( FILEINFO_MIME_TYPE );
$ mimeType = finfo_file ( $ finfo , $ filename );
$ allowedMimeTypes = [
' image/gif ' ,
' image/jpeg ' ,
' image/jpg ' ,
' image/png '
];
if ( in_array ( $ mimeType , $ allowedMimeTypes ) == false ) {
throw new SecurityException ( " Was going to send file ' $ filename ' to the user, but it is not an image file. " );
}這些建議不能保證任何安全性,但是它們應限制您對任何Imagick/ImageMagick相關安全問題的接觸。
ImageMagick具有使用開放的多處理API的能力,能夠使用多個線程立即處理圖像。已知某些OpenMP的實現在某些環境中使用時會出現穩定性問題。
我們建議做以下一個:
通過使用編譯標誌“ -disable-openmp” set將OPENMP支持禁用OpenMP支持。
通過致電: Imagick::setResourceLimit(Imagick::RESOURCETYPE_THREAD, 1);禁用ImageMagick中的線程的使用:或Imagick::setResourceLimit(6, 1);如果您的Imagick版本不包含ResourceType_thread常數。
通過在ImageMagick'policy.xml文件中設置<policy domain="resource" name="thread" value="1"/>此文件可能位於/etc/imagemagick-6/policy.xml或類似位置的情況下,禁用ImageMagick中線程的使用。
如果您確實想在ImageMagick中使用OpenMP,則應通過Imagick調用它,則應徹底測試它在服務器上的行為正確。
文檔需要大量工作。這裡有一個在線編輯器:https://edit.php.net/貢獻非常歡迎。
請參閱http://abi-laborator.pro/tracker/timeline/imagemagick/有關基礎圖像庫的確切版本更改。