-1

可能重复:
php 如何启动外部程序运行 - 系统和 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>

这将创建类似:

呈现的 HTML 屏幕截图

4

4 回答 4

5

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

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

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

如果网络服务器作为服务运行,您需要考虑为该服务启用“允许桌面交互”选项。然而在其他方面:

使用 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

于 2012-12-27T19:27:51.373 回答
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是文件的完整路径

于 2012-12-27T18:51:44.460 回答
2

我测试的最后成功的方法。
谢谢查尔斯,请参阅php 如何启动外部程序运行 - 系统和执行出现问题

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

然后:在php中

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

谢谢你所有的好人,多么大的帮助。我终于把我的想法变成了现实。新年快乐 !

于 2012-12-27T20:18:49.580 回答
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;
于 2012-12-27T18:47:45.557 回答