【问题标题】:Using php exec() on windows networked drive with no wait or timeout在 Windows 网络驱动器上使用 php exec() 无需等待或超时
【发布时间】:2018-01-07 21:30:29
【问题描述】:

我已经广泛搜索以解决在 phpdesktop 中打开外部程序而没有 PHP 等待最终导致 PHP 超时的问题。

我需要能够使用exec() 启动程序并执行其余的PHP 代码,而无需等待exec() 命令。我尝试了多种解决方案。更复杂的是,正在打开的文件位于网络驱动器上。这是我尝试过但没有奏效的方法

pclose(popen('start' .$File. '>NUL 2>NUL"', 'r'));   This didn't work because the drive is on the network

exec($File);              Doesn't work as it waits instead of executing the remainder of the code

system($File);            Doesn't work. Same result as exec()

exec($File > /dev/null);  Obviously doesnt work because php is on windows

正在执行的文件是视频文件:mp4avimkv。所以它正在打开外部视频播放器文件,但就像我在上面所说的那样,PHP 最终会超时并在 30 秒后给出错误,而不执行其余代码。我只需要 PHP 忽略它打开的程序并继续执行它的任务。任何帮助将不胜感激。

【问题讨论】:

  • 它在服务器上打开一个视频播放器?这似乎很奇怪。
  • “这不起作用,因为驱动器在网络上”。你怎么知道这是原因? “没用”是什么意思?您遇到了什么问题或错误?
  • phpdesktop 作为桌面应用程序在本地运行,因此它不会在服务器上打开。它没有工作,因为 Windows 抛出一个错误,说它无法访问网络驱动器并且进一步研究我发现它工作正常,除了在网络驱动器上使用它时

标签: php phpdesktop


【解决方案1】:

您可以使用“nircmd”之类的东西,它是一个 Windows 命令行实用程序来执行任务,非常适合 php-desktop。您可以使用“nircmd”具有的各种“exec”操作,因此您可以调用任何您想要的并立即返回 php。请参阅手册(.chm 存档),在 Windows 7/10 下,您可能必须“取消阻止”该帮助文件(在文件属性中)才能查看内容。

【讨论】:

  • 我明天一定会调查的。希望这将是解决方案。我非常感谢您的意见。谢谢
  • Juanga 你刚刚把这一切很好地融合在一起。这是一个很好的答案。
  • 很高兴看到它对您有用。我自己玩过 nircmd 和 php-desktop,发现这两种工具一起有很大的潜力。 AutoIt 也浮现在脑海中。
  • 是的,我几乎已经放弃了 php 桌面,因为使用 exec 调用外部程序毫无价值,因为它会等待它们关闭。但是是的,这肯定是 php 桌面附带的工具。我也会去看看 AutoIt。
  • Juanga 我已经成功地将 nircmd 集成到 php 桌面。它完美无瑕!我只是在 php 中使用 nircmd.exe shexec "open" 命令,它是一帆风顺的。我欠你很多时间!
【解决方案2】:

如果 'phpdesktop' 使用 php (php -S) 中的内置 Web 服务器,那么据我所知,如果没有 exec 调用阻塞,就不可能这样做,与 proc_open 等相同

我查了一下,确实 phpdesktop 使用了内置的网络服务器: https://github.com/cztomczak/phpdesktop/blob/c00988f69348b73b6dee27bdf45d145b719e2a3d/phpdesktop-chrome/php_server.cpp

理论上 proc_open 应该可以工作,但它没有

【讨论】:

  • PHP Desktop 正在使用 Mongoose 多线程 Web 服务器。该 php 服务器代码已关闭。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 2015-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-27
相关资源
最近更新 更多