如何在Windows中安装'posix'

时间:2016-12-26 07:56:38

标签: php windows wamp posix

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

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

2 个答案:

答案 0 :(得分:3)

显然,由于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主机上运行服务相比,这是一个不必要的复杂因素,如果这是您的偏好

答案 1 :(得分:0)

这并不像在Linux中那么简单,并且 posix在Windows中并不常用(正如下面的大量评论所示)。有一个由posix subsystem调用的POSIX 1.0实现,虽然自Windows 8以来已经弃用了。另一个选项是SFU(Unix服务),自Win 8以来也被弃用(删除?),尽管是新的{{3将要取代它 - 我不熟悉你知道你可以轻松使用它,但它可能会带来变化。最后有3个方应用程序可以用来模仿像Cygwin这样的UNIX环境,但我认为从优化的角度来看,服务器使用它们有点多了。

在我看来,你最好的选择是通过C ++调用Native Windows命令。我认为你的问题有点过于模糊,所以我只会解决你的例子。基本上你需要的是:

  

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

这取自您需要熟悉的Windows 10 bash!,并包含许多本机Windows API。在那里你会找到一个你需要的长例子(例如 - 这是一个使用上述函数的完整实现,所以只需复制粘贴和编译。

编辑 - PHP

关于PHP,没有用于获取用户ID的干净解决方案。如果你需要这个,通过exec函数或者其他一些函数,我建议调用一个如上所述实现的小型C ++ exe。