从PHP文件调用Windows程序(通过命令提示符)

时间:2011-03-08 16:26:11

标签: php windows command-prompt

我尝试过多种方式调用Windows程序,每次都得到相同的结果。

程序在我的机器上打开(没有GUI)但从不关闭每个意味着浏览器永远加载。

虽然通过命令行提示手动执行查询字符串时程序关闭。不仅如此,程序实际上并没有执行

(它刚刚启动,即没有任何结果)。

我只想知道通过PHP启动程序的正确方法。

这是有效的查询字符串(执行后关闭程序):

"C:\Program Files (x86)\Softinterface, Inc\Convert PowerPoint\ConvertPPT.exe" /S 
"C:\Users\Farzad\Desktop\upload\test.ppt" /T "C:\Users\Farzad\Desktop\upload\test.png" /C 18

4 个答案:

答案 0 :(得分:2)

如果程序永远不会关闭,那么PHP无法从exec()返回值。该计划必须关闭。有可能以这种方式访问​​桌面上的文件时出现问题。它将使用网络服务器定义的任何权限执行。

http://php.net/manual/en/function.exec.php

您可以考虑proc_open()的高级功能。它会让你访问所有必要的管道,但我不认为这会对你有所帮助。

答案 1 :(得分:1)

如果Windows计算机上的目标目录是 C:\ Program Files(x86)\ Softinterface,Inc \ Convert PowerPoint \ ConvertPPT.exe ,则需要对具有空格的目录进行双引号他们内心的性格。

要将其翻译成php术语,它应该是这样的:

$directory = 'C:\"Program Files (x86)"\"Softinterface, Inc"\"Convert PowerPoint"\ConvertPPT.exe';

$command = $directory . ' enter your arguments here';

exec($command, $output, $return_var);

// if $return_var == 0, you hit the jackpot.

答案 2 :(得分:0)

存储Windows桌面的物理目录属于您的用户配置文件文件夹。这意味着其他用户(包括一个Apache运行,这是典型的“本地系统”)将没有相应的权限来读取和写入文件。虽然您可以调整Apache设置以使其与您自己的用户Farzad一起运行,但将Web应用程序放在完全不同的目录树中更为常见。可能会发生 ConvertPPT.exe 暂停,因为它试图在不允许的位置写入文件。我建议你创建一个顶级文件夹目录并确保它是世界可写的(一旦完成,如果你愿意,你可以收紧这些权限)。

一旦丢弃(或确认)问题是由缺乏适当的凭据引起的,请确保正确地转义命令和参数。看到这个链接:

http://es2.php.net/manual/en/function.exec.php#101579

您可以尝试的另一件事是在发出对exec()的调用之前关闭PHP会话:

http://es2.php.net/manual/en/function.exec.php#99781

答案 3 :(得分:0)

你可能遇到过这个错误:http://bugs.php.net/bug.php?id=44994

在PHP 5.3.5上一直困扰着我多年,甚至今天。

似乎程序的错误输出和apache错误日志文件句柄之间存在某种死锁,程序被重定向到其中以编写其stderr输出,使程序永远停留,直到apache进程为止杀死。

此外,当使用passthrusystem或反引号操作符时,有一个中间“cmd.exe”进程用于在隐形控制台中运行程序,我已经看到了这个cmd进程在没有运行程序的情况下卡住了。

到目前为止,我还没有真正的解决方案,即使很多人复制,这个错误似乎还没有得到解决。