Pdf IIS上的ImageMagic权限被拒绝

Pdf IIS上的ImageMagic权限被拒绝,pdf,permissions,imagemagick,ghostscript,windows-server-2012-r2,Pdf,Permissions,Imagemagick,Ghostscript,Windows Server 2012 R2,我在Windows Server 2012 R2上安装了带有GhostScript的ImageMagick-6.9.2-8-Q16-x64-dll.exe 使用shell_exec或exec从PHP执行convert“document.pdf”“thumbnail.jpg”命令行失败,返回值为1。如果我在命令提示符(cmd.exe)中手动运行相同的命令,它会无缝地创建pdf文件 在阅读了许多文章和论坛之后,以下是我在IIS环境中使用ImageMagic的步骤 临时目录权限: 每当PHP将文件上载

我在Windows Server 2012 R2上安装了带有GhostScript的ImageMagick-6.9.2-8-Q16-x64-dll.exe


使用shell_exec或exec从PHP执行
convert“document.pdf”“thumbnail.jpg”
命令行失败,返回值为1。如果我在命令提示符(cmd.exe)中手动运行相同的命令,它会无缝地创建pdf文件

在阅读了许多文章和论坛之后,以下是我在IIS环境中使用ImageMagic的步骤

  • 临时目录权限: 每当PHP将文件上载到服务器时,IIS都会将文件放到
    C:\Windows\Temp
    目录,并将其移动到目标目录。在此过程中,上载的文件将从临时目录获得固有的所有权和权限。默认情况下,此继承将阻止ImageMagic访问它。为克服此限制,
    IUSR
    IIS\u USRS
    需要对临时目录具有读/写权限。 有关详细说明,请阅读此
  • Image Magic permission/Application Pool Identity:由于在IIS用户下提供服务时不允许PHP执行convert.exe,因此您必须在IIS中创建/使用默认应用程序池。配置此池后,您必须在ImageMagic目录和pdf文件所在的目录上授予此池的权限。有关详细说明,请阅读此。注意:一些文章建议应授予IUSR或IIS_IUSR执行
    cmd.exe
    的权限。这是非常不鼓励的,因为它可能会为安全漏洞创建一个窗口
  • 源和目标目录权限:这两个目录都需要具有
    IUSR
    IIS\u IUSR
    读/写权限
  • 命令行语法:从PHP向命令行传递参数时的常见错误是路径,需要转义反斜杠。例如,与其传递
    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)//变量转储(输出)

    请注意,整个命令用单引号括起来,源文件和目标文件用双引号括起来

    调试: PHP不会报告在执行命令行期间可能发生的任何错误。如果遇到错误,它将以静默方式失败。要调试从命令行发送的输出,建议使用它。此函数允许您传递一个输出变量,该变量将由包含命令行响应的数组填充。在这里,您可以使用var_dump、print_r来显示输出。如果此值的值为1或4,则表示您仍然存在必须解决的权限问题:(


    希望这会有所帮助。

    我们在ASP.NET应用程序中发现了相同的问题。我们通过确保已正确处理ImageMagick对象来解决它

    注意:我们使用语句将ImageMagick对象包装在里面。它不起作用。 我们已经明确地关闭了那个物体