【问题标题】:PHP exec() not executing batch filesPHP exec()不执行批处理文件
【发布时间】:2010-06-09 10:45:58
【问题描述】:

我尝试用谷歌搜索这个问题,发现很多人有同样的问题但没有解决方案。

    $result = exec("C:\\Ruby191\\bin\\lessc.bat less\\$file", $output);

这里result 是一个空字符串,output 是一个空数组。同样的事情:

    $result = exec("cmd /c C:\\Ruby191\\bin\\lessc.bat less\\$file", $output);

我确定路径是正确的;我确定 exec() 已启用。

我尝试了execshell_execsystem,但没有成功。

lessc 是less CSS


编辑

apache 错误日志说:

'"ruby.exe"' 未被识别为 内部或外部命令,可操作 程序或批处理文件。

【问题讨论】:

  • 您是否尝试在路径名中使用正斜杠?你的 Apache 错误日志是怎么说的?假设您运行 IIS,然后查看相关链接:
  • @mario:谢谢,我不知道错误会记录在 apache 日志中。它说'"ruby.exe"' is not recognized as an internal or external command, operable program or batch file.我怎样才能让它使用与普通shell相同的PATH?
  • 您可以将所需的目录显式添加到批处理脚本开头的路径中。您可以通过执行 cmd /c path 并检查输出来检查当前路径设置。
  • 我认为您可以在 .htaccess 或 httpd.conf 文件中尝试 SetEnv 和 PassEnv 指令。最终 Apache 出于某种安全原因对其进行了限制。但无论如何,也要尝试调整您的系统路径。 httpd.apache.org/docs/2.2/mod/mod_env.html

标签: php windows exec less


【解决方案1】:

我发现了问题;我为此安装了 ruby​​,并将其添加到我的 PATH 环境变量中,它立即开始在命令提示符下工作。

但是它对 PHP 不起作用,所以我决定重新启动计算机。之后就成功了。

【讨论】:

  • 这有点极端。应用程序启动时会设置环境变量,以后通过系统属性进行的任何更改都不会自动传播到已经运行的应用程序)。您所要做的就是重新启动 Web 服务器进程。
  • 我在试图让“javac”识别时遇到了这个问题。立即在命令提示符下工作,但不在 PHP 中。
  • 你节省了我几个小时(几个小时后)
  • 啊啊啊啊!经过多次毫无结果的调试,遇到了这个简单的解决方案......重新启动了 wamp,它现在工作得很好。哈。
【解决方案2】:

首先 chdir("C:\Ruby191\bin\"),然后运行 ​​lessc.bat。

【讨论】:

  • 我不想;我想留在我的目录中。
猜你喜欢
  • 2010-10-30
  • 2021-11-26
  • 1970-01-01
  • 1970-01-01
  • 2013-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-28
相关资源
最近更新 更多