【问题标题】:PHP on IIS - Exec Returns 1IIS 上的 PHP - 执行返回 1
【发布时间】:2012-05-30 21:59:06
【问题描述】:

我在 Windows Server 2008 机器上安装了 ImageMagick、IIS 6、Ghostscript 和 PHP 5.3.1,并且正在尝试将 PDF 文件转换为 JPG 缩略图。

但是,它似乎不起作用——对exec() 的调用产生的返回码为 1(据我了解,这意味着发生了一些一般性错误)。输出变量只是一个空数组。 $output 只是一个空数组。如果我使用system() 而不是exec(),也会发生同样的情况

从命令行运行命令似乎有效,所以我最初的猜测是一个简单的权限问题...该目录可由 PHP 写入,因为将 PDF 上传到目录的脚本有效,并且我已经验证了每个人也都有写入目录的权限。

此外,安全模式已关闭。

关于问题可能是什么的任何想法?

相关代码:

<?php
    $output = array();
    $ret = 0;
    echo exec('convert D:\content\myfile.pdf[0] D:\content\myfile_thumb_1.jpg', $output, $ret);
    var_dump($ret);
?>

注意:虽然我会在 Mac OS X 上的 Apache 上进行测试,但我似乎无法正确安装 ImageMagick 或 Ghostscript。

我还确保了以下几点:

  • 文件名大小写正确(无论如何都是小写)
  • 除了简单的 convert.exe 之外,还使用 ​​convert.exe 的完整路径

更新:

检查任务管理器后,convert.exe 正在运行,正在占用 CPU 时间,提示我这是某种文件权限...我现在去检查一下。

【问题讨论】:

  • $output 在 exec 调用之后是一个空数组。此外,没有回显——我指的返回码是$retvar_dump,它是一个整数(1)
  • 我实际上不需要输出任何东西——它现在只是用于调试。我实际上并不期待任何输出,除了 JPG,真的。 exec('DIR') 按预期完美运行,并显示脚本所在目录的内容。
  • 可能是个愚蠢的问题,但是如果您指定 convert(.exe?) 的完整路径会发生什么?
  • Kev 是对的,尝试将 .exe 添加到命令中,最好也添加 convert.exe 文件的路径。 exec 之前不需要回显,因此只需像这样使用它: exec('c:/imagemagick/convert.exe D:\content\myfile.pdf[0] D:\content\myfile_thumb_1.jpg', $output , $ret);如果可能会干扰 IIS,您也可以尝试在路径中使用双反斜杠 (\) 而不是单斜杠 (/)。还要注意路径和文件名中的大写小写,windows 在它们中的工作方式很奇怪。如果我是你,我会把 apache 放在 windows 机器上而不是 IIS 上,即使在 windows 上也能正常工作。
  • 不幸的是,提供 ImageMagick 的 convert.exe 的完整路径不起作用,仍然返回 1。与以前一样,该命令在命令提示符下工作。双反斜杠也不起作用,一切都是正确的大小写(小写)。如果文件位于D:/ 驱动器与安装了所有程序的C:/ 驱动器上,会有所不同吗?实际站点存储在单独的驱动器下,然后是 Windows/IIS/ImageMagick。虽然我通常会使用 Apache(我通常将 Linux + Apache 用于我自己的东西),但不幸的是我无法使用这个应用程序。

标签: php iis windows-server-2008 exec


【解决方案1】:

事实证明,IIS 中的某些内容存在权限问题——该网站在与 CMD 的命令不同的用户下运行,这显然导致它无法在 IIS 下运行,因为它的权限低于 CMD 的权限。

【讨论】:

  • 那你是怎么解决这个问题的?如何设置正确的权限?
  • 有什么解决办法,请说明
猜你喜欢
  • 1970-01-01
  • 2014-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-15
  • 1970-01-01
  • 2018-09-07
  • 1970-01-01
相关资源
最近更新 更多