0

我的设置如下: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 时,数组结果是空的。当我在命令提示符中输入完全相同的命令时,代码就像一个魅力(没有语法错误)。我也使用绝对路径。

4

2 回答 2

0

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

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

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

于 2013-07-12T15:19:25.250 回答
0

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

于 2013-07-12T15:50:19.470 回答