【问题标题】:PHP exec giving error while the command runs successfully in bat file当命令在 bat 文件中成功运行时 PHP exec 给出错误
【发布时间】:2014-02-28 07:16:29
【问题描述】:

我正在我的 Windows 7 上运行一个本地 WAMP,其中包含一个执行如下 windows 命令的 PHP 脚本:

`exec('"%CD%\files_for_redistribution\ppt2html5.exe" /i:"%CD%\test.ppt" /o:"%CD%\output.html" /title:title /desc:description /author:author /keywords:keywords',$output,$error);`

从批处理文件运行的命令可以很好地完成工作,但从 PHP 脚本运行时,会出现错误:演示文稿打开错误:PowerPoint 无法打开文件。

该命令的目的是使用名为 ppt2html5.exe 的第三方软件将 PowerPoint 转换为 HTML,其中 test.ppt 必须转换为 output.html。

我发现很多博客都在讨论 exec 函数无法正常工作,但没有什么能真正帮助我处理这个错误,因为它运行命令但无法打开文件。 如果有人可以帮助我,那就太好了。

【问题讨论】:

  • 当我看到人们使用 exec 命令时,我感到脊背发凉 :) - 这是一个旁注,但你应该知道 exec 命令是一个危险的命令,如果被利用可以解决一个安全问题的大漏洞。回到问题。从 PHP 运行时,您确定路径正确吗?
  • 路径正确,因为它在作为批处理文件运行时完成了这项工作。用户不会参与该过程,它在本地 Windows 机器上运行,因此不会有任何安全问题。

标签: php windows apache wampserver


【解决方案1】:

检查safe mode 是否打开,因为这会激活escapeshellcmd 并且某些字符会被转义。

假设你传递给exec()的字符串,包括百分号、路由和参数是正确的,你的问题可能与文件权限和执行apache + php的用户有关,检查一下。

【讨论】:

  • 安全模式未开启。就权限而言,该文件不是只读的,因此这不是原因。我使用 file_get_contents 获取了文件的内容,这意味着脚本能够打开文件并读取它。
  • 另外,如果我使用 php exec 运行具有相同命令的批处理文件,而不是将命令直接写入 exec 函数,我仍然会收到相同的错误。但是,如果该批处理文件独立运行,则没有问题并且可以完成工作。
【解决方案2】:

通过在 C:\Windows\System32\config\systemprofile 中添加一个名为 Desktop 的文件夹来修复。

来源:http://www.sitepoint.com/forums/showthread.php?956457-Windows-2008-PHP-new-COM%28powerpoint-application%29

【讨论】:

    猜你喜欢
    • 2015-01-29
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    • 2018-10-15
    • 1970-01-01
    • 2017-04-23
    • 2012-11-28
    • 2012-09-21
    相关资源
    最近更新 更多