【问题标题】:PHP external program callPHP外部程序调用
【发布时间】:2013-07-12 15:04:11
【问题描述】:

我的设置如下:Windows 7,启用了 Apache 和 PHP 的 XAMPP 我有一个 PHP 脚本,我在其中调用外部程序来运行转换。这个外部程序是一个EXE文件,需要3个属性:

  • 源文件
  • 目标文件
  • 其他标志(转换类型等)

当我使用 XAMPP 内置的命令行工具来执行我的脚本时,一切正常。但是当我在我的 PHP 脚本中使用 exec() 函数时,没有创建输出文件。我很确定转换实际上正在发生(大约需要 5 秒,大约与运行 PHP 脚本所需的时间相同)。

我认为这是一个权限问题,所以我已经将 EXE 文件移动到与我的 PHP 文件相同的文件夹并调整了整个文件夹的权限(我将所有权限授予所有用户)。我还禁用了 Windows UAC 并尝试将命令放入 BAT 文件中。只是没有创建文件。

任何帮助或提示将不胜感激!

我的PHP代码如下:

exec('c:\converter.exe c:\src.txt c:\dst.txt -f', $output);
print_r($output);

当我打印出 $output 时,数组结果是空的。当我在命令提示符中输入完全相同的命令时,代码就像一个魅力(没有语法错误)。我也使用绝对路径。

【问题讨论】:

标签: php windows command-line permissions


【解决方案1】:

尝试将您的可执行文件复制到与您的应用程序相同的文件夹中。 试试

    exec("script.exe src.txt dst.txt", &$output);
    echo $output;

另外,不要忘记使用escapeshellcmd() 为您的应用程序添加一些安全性。

【讨论】:

  • 感谢您的建议!不过,没有骰子。我认为这不再是权限问题,因为我使用了 XAMPP shell 并发现我的命令在这个 XAMPP 环境中完成了它必须做的事情。当我在 PHP 脚本中使用它时,它仍然无法工作。完全困惑:S
【解决方案2】:

非常感谢您的意见!事实证明,这是由“交互式服务检测”功能引起的 Windows 问题。 Apache 作为系统服务运行,这阻止了对外部程序的调用(使用 GUI)。我在 XAMPP 中禁用了 run-as-service 功能,从而解决了这个问题。更详尽的解释可以在这里找到:http://php.net/manual/en/book.exec.php

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-26
    • 2020-11-28
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    • 2011-07-24
    • 2013-08-14
    • 1970-01-01
    相关资源
    最近更新 更多