2013-07-12 33 views
0

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

  • 源文件
  • 目标文件
  • 附加标志(转换类型等)

当我使用命令行内置于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); 

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

+0

也许这是有帮助http://stackoverflow.com/a/8311008/480807 –

回答

0

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

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

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

+0

谢谢你的建议!虽然没有骰子。我不认为这是一个许可问题,因为我使用了XAMPP shell,并发现我的命令在这个XAMPP环境中做了什么。当我在PHP脚本中使用它时,它仍然不起作用。完全puzzeled:S –

0

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