如何使用PHP启动Windows GUI程序?

时间:2012-12-27 18:42:24

标签: php firefox firefox-addon

  

可能重复:
  php How do I start an external program running - Having trouble with system and exec

如何用php打开exe?
我有这个想法并且几年来很难取得成功,但终于失败了。谁能告诉我一个成功的方法来完成这项工作?

<?php 
    if(isset($_POST['file_path'])){
        /* ------- 
            using "notepad++.exe" to open "test.php" file.
            or run a bat file which calling "notepad++.exe" to open "test.php" file.
            how to seting php.ini or firefox or any setting to do this job. 
            it is only for conveniently developing web page in my PC ,not for web servers
        ------- */
    }
?>

<form action="test.php" method="post">
    <input type="text" name="file_path" value="test.php"/>
    <button type="submit">open with notepad++</button>
</form>

这会产生如下内容:

rendered HTML screenshot

4 个答案:

答案 0 :(得分:4)

在运行网络服务器的计算机上启动程序:

<?php
exec('"C:\Program Files (x86)\Notepad++\notepad++.exe" "C:\foo.php"');

如果网络服务器不作为Windows服务运行,以上将适用于vista / win7。例如,如果您运行apache并在计算机启动时自动启动,则可能将其作为服务安装。您可以在Windows服务选项卡/ thingy中查看apache是​​否显示。

如果网络服务器作为服务运行,您需要考虑启用该服务的“允许桌面交互”选项。但除此之外:

使用php的新内置网络服务器(php 5.4+)轻松测试。这里的关键是你从shell手动启动服务器,因此它作为你的用户而不是作为服务运行。

<?php
// C:\my\htdocs\script.php
exec('"C:\Program Files (x86)\Notepad++\notepad++.exe" "C:\foo.php"');

通过命令窗口启动网络服务器

C:\path\to\php.exe -S localhost:8000 -t C:\my\htdocs

然后在浏览器中     http://localhost:8000/script.php

答案 1 :(得分:3)

我假设您希望客户端设备打开Notepad ++而不是远程服务器。如果是这种情况,您可以做的最好的事情是使用正确的文件类型标头提供文件,并希望客户端将Notepad ++设置为打开此类文件的默认应用程序。

这样的事情应该这样做:

header('Content-type: text/plain');
header('Content-Disposition: attachment; filename="' . $file_name . '"'); // forces file download
header('Content-length: ' . filesize($file_path));
header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); // make sure file is re-validated each time it is requested

$fh = fopen($file_path, 'r');
while(!feof($fh)) {
    $buffer = fread($fh, 2048);
    echo $buffer;
}
fclose($fh);

其中$file_name是文件的名称(不是完整路径),$file_path是文件的完整路径

答案 2 :(得分:2)

我测试的最终成功方式。
谢谢Charles,请参阅php How do I start an external program running - Having trouble with system and exec

  • 开始 - >运行,输入“services.msc”以启动服务控制(其他方式到达那里,这是最简单的IMO)
  • 找到您的Apache服务(我的使用WampServer 2.0称为“wampapache”)
  • 打开服务属性(双击或右键单击 - >属性)
  • 转到登录帐户,并确保标题为“允许服务与桌面交互”的复选框已选中
  • 返回“常规”选项卡,停止服务,启动服务

然后:在php

pclose(popen("start /B \"d:\\green soft\\notepad++5.8.4\\notepad++.exe\" \"d:\\PHPnow-1.5.6\\htdocs\\laji\\a.php\"", "r"));

感谢所有好人,这是一个很大的帮助。我终于让自己的想法成真了。新年快乐!

答案 3 :(得分:1)

从来没有理由这样做,但你试过passthru()?

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

编辑: 对不起乍一看OP真的不太清楚..

我要做的是将文件解析为字符串或诸如此类的东西,然后强制浏览器将其视为下载.. php是服务器端,所以你不能只要求浏览器做一些事情。

$someText = 'some text here';

header('Content-type: text/plain');
header('Content-Disposition: attachment; filename="text.txt"');

echo $someText;