【问题标题】:How to install 'posix' in windows如何在 Windows 中安装“posix”
【发布时间】:2016-12-26 07:56:38
【问题描述】:

我在 Windows 7 中使用 WAMP 服务器并尝试在 php 中使用 posix 函数,但它不起作用并给出 fatal error:undefined function。现在我想知道,我如何在 Windows 上安装它。

如果它不适用于 Windows,我想知道如何在 Windows 上通过 id 获取文件所有者名称,以及在哪里可以阅读有关在 Windows 上实现类似 posix 功能的信息。

【问题讨论】:

  • posix 函数在 windows 上不可用,它们仅在 linux 上可用
  • 是的,我知道这就是为什么我要询问另一个可以在 Windows 上运行的功能
  • 我不确定某些东西是否像您预期的那样存在,我的意思是它在窗口上不正确存在,但您可以看到 glob 函数
  • 好的,感谢您的帮助,让我检查另一个资源

标签: php windows wamp posix


【解决方案1】:

显然,由于 Windows 本身不是 POSIX 操作系统,因此您不能在标准 WAMP 堆栈中使用 PHP 的 POSIX 支持。

Windows 等效项是PHP's Windows Only Extensions。这包括对使用 .NET 类的支持,它允许您执行任何其他 Windows 应用程序可以执行的大多数操作。

例如,为了找出文件的所有者,您可以使用System.IO.File.GetAccessControl as described in the answers to this question。您可能会找到现有的问题和答案来解决您可能有的大多数其他需求。

(如果需要,您可能更愿意考虑在虚拟机上切换到 LAMP 堆栈。)


Nitpicker 的角落:

Windows 10 通过适用于 Linux 的 Windows 子系统提供 beta POSIX 支持,并且某些版本的 Windows Server 支持另一个基于 POSIX 的子系统 Interix,但据我所知,没有标准的 WAMP 堆栈这些都可以直接从 PHP 获得。

在任何情况下,如果您首先使用的是特定于操作系统的扩展,则几乎总是最好使用实际主机操作系统的本机功能,以避免不必要的并发症。例如,检索 NTFS 分区上文件的 WSL 所有者 ID 可能会丢失信息,因为 Linux 仅支持 32 位 ID,与 Windows SID 非常不同。

免责声明:我不知道 WSL 在这种情况下实际上做了什么;在某些情况下,这完全有可能不会出现实际问题。我的观点只是,与使用 Windows 原生功能或在真正的 Linux 主机上运行服务(如果这是您的偏好)相比,必须了解其工作原理以确保其满足您的需求是不必要的复杂性.

【讨论】:

  • WSL File System Support 深入介绍了 WSL 虚拟文件系统的实现方式。由于“Windows 文件系统与 Linux 文件系统有很大不同”,我非常同意本机实现是最佳选择。仅为好奇的人发布链接。
【解决方案2】:

这不像在 Linux 中那么简单,而且 posix 在 Windows 中也不是很容易使用(正如下面大量的 cmets 所暗示的那样)。 posix subsystem 调用了一个 POSIX 1.0 实现,尽管自 Windows 8 以来已弃用。另一个选项是 SFU(Unix 服务),自 Win 8 以来也已弃用(删除?),尽管新的 Windows 10 bash! 即将推出替换它 - 我不够熟悉,不知道你可以多么容易地使用它,但它可能会带来改变。最后,您可以使用 3 方应用程序来模仿 Cygwin 等 UNIX 环境,但我认为从优化的角度期望您的服务器使用它们有点过分。

在我看来,您最好的选择是通过 C++ 调用本机 Windows 命令。在我看来,您的问题有点过于模糊,所以我只讨论您的示例。基本上你需要的是:

以下示例使用 GetSecurityInfoLookupAccountSid 函数查找并打印文件所有者的名称

这取自您需要熟悉的msdn docs,其中包含许多本机 Windows API。在那里,您会找到一个很长的示例,说明您需要什么(例如 - 这是使用上述函数的完整实现,所以只需复制粘贴并编译即可。

编辑 - PHP

关于 PHP,获取用户 ID 没有干净的解决方案。如果您需要,我建议通过 exec 函数或类似的函数调用如上实现的小型 C++ exe。

【讨论】:

  • 我不明白你的负面标记的原因。我已经明确提到,如果此功能不适用于 Windows,请告诉我另一个功能。我是 php 新手,我找不到更好的方法,这就是为什么我在这里发布问题以获得专业人士的建议,而您的回答对我来说用处不大,因为它在 c++ 中我想在 php 中知道。
  • “我如何在 Windows 上安装它”可以解释为“我如何在 Windows 上安装 posix”,所以他回答了你,而你们其他人的问题不清楚,我的意思是太宽了
  • @MuhammadHamzaNisar 我的意思是在 Windows 上实现所有 Posix 的范围太广了。我编辑了这个问题以反映我的意思。如果你让它更简洁,我会删除反对票。
  • Windows 有相当完整的 POSIX 支持,fork 是一个明显的例外。
  • @IInspectable:我认为这不是真的。有很多 POSIX 函数,虽然我实际上还没有做过调查,但我很确定有很多它们在 Windows 上不可用,当然没有安装像 Cygwin 这样的第三方库。进程间信号是 Windows 缺少的另一个主要 POSIX 功能,也是可继承的 filenos,能够将几乎任何设备完全视为文件,伪终端,行缓冲,在网络以外的任何设备上使用 select()插座,等等。
猜你喜欢
  • 2011-01-12
  • 2011-08-04
  • 2012-07-18
  • 2018-05-25
  • 2014-11-24
  • 2010-10-07
  • 2011-04-09
相关资源
最近更新 更多