我在Windows Server 2012 R2上安装了ImageMagick-6.9.2-8-Q16-x64-dll.exe
GhostScript
。
使用shell_exec或exec从PHP执行convert "document.pdf" "thumbnail.jpg"
命令行失败,返回值为1.如果我在命令提示符(cmd.exe)中手动运行相同的命令,则无缝地创建pdf文件。
答案 0 :(得分:1)
在浏览了很多文章和论坛后,这些是我使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,则表示您仍有必须解决的权限问题:(
希望这有帮助。
答案 1 :(得分:0)
我们在ASP.NET应用程序中观察到相同的问题。我们通过确保已正确处理ImageMagick对象来解决它
注意:我们将ImageMagick对象包装在Using语句内。没用 我们已经明确关闭了该对象。