我尝试过多种方式调用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
答案 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会话:
答案 3 :(得分:0)
你可能遇到过这个错误:http://bugs.php.net/bug.php?id=44994
在PHP 5.3.5上一直困扰着我多年,甚至今天。
似乎程序的错误输出和apache错误日志文件句柄之间存在某种死锁,程序被重定向到其中以编写其stderr输出,使程序永远停留,直到apache进程为止杀死。
此外,当使用passthru
或system
或反引号操作符时,有一个中间“cmd.exe”进程用于在隐形控制台中运行程序,我已经看到了这个cmd进程在没有运行程序的情况下卡住了。
到目前为止,我还没有真正的解决方案,即使很多人复制,这个错误似乎还没有得到解决。