我在Windows Server 2012 R2上安裝了ImageMagick-6.9.2-8-Q16-x64-dll.exe
和GhostScript
。ImageMagic在IIS上拒絕的權限
執行convert "document.pdf" "thumbnail.jpg"
命令行從PHP使用shell_exec或exec執行失敗,返回值爲1.如果我在命令提示符(cmd.exe)中手動運行相同的命令,它會無縫地創建pdf文件。
我在Windows Server 2012 R2上安裝了ImageMagick-6.9.2-8-Q16-x64-dll.exe
和GhostScript
。ImageMagic在IIS上拒絕的權限
執行convert "document.pdf" "thumbnail.jpg"
命令行從PHP使用shell_exec或exec執行失敗,返回值爲1.如果我在命令提示符(cmd.exe)中手動運行相同的命令,它會無縫地創建pdf文件。
在閱讀了許多文章和論壇之後,我遵循這些步驟使ImageMagic在IIS環境下工作。
C:\Windows\Temp
目錄,並將其移動到目標目錄。在此過程中,上傳的文件將具有Temp目錄的固有所有權和許可權。默認情況下,這種繼承會阻止ImageMagic訪問它。爲了克服這個限制,IUSR
和IIS_USRS
需要對Temp目錄具有讀/寫權限。 有關詳細的解釋請閱讀article。cmd.exe
的權限。這非常令人沮喪,因爲它可能爲安全漏洞創造一個窗口。IUSR
和IIS_IUSR
讀/寫權限C:\Inetpub\vhosts\...
它應該作爲C:\\Inetpub\\vhosts\\...
通過。 下面是一個工作段的一個示例:$cmd = 'convert "C:\\Inetpub\\vhosts\\a\\doc.pdf[0]" "C:\\Inetpub\\vhosts\\b\\thumb\\a.jpg"';
$output = "";
$result = exec($cmd, $output);
print_r($output); //var_dump($output);
注意,整個命令是包裹着單引號以及源和目標文件被包裹着雙引號。
調試: PHP不會報告執行命令行時可能發生的任何錯誤。如果遇到錯誤,它會自動失敗。要調試從命令行發送的輸出,建議使用exec。該函數允許您傳遞一個輸出變量,該變量將填充包含來自命令行的響應的數組。從這裏你可以使用var_dump,print_r來顯示輸出。如果此值的值爲1或4,則表示您仍然有權限問題需要解決:(
希望這會有所幫助。