Как установить «posix» в Windows

Я использую сервер WAMP в Windows 7 и пытаюсь использовать posix функция в PHP, но он не работает и дает fatal error:undefined function, Теперь я хочу знать, как я могу установить его на Windows.

Если это не доступно для Windows, как бы знать как получить имя владельца файла по идентификатору в Windows, и где я могу прочитать о реализации подобных функций posix в Windows.

2

Решение

Очевидно, что поскольку собственно Windows не является операционной системой POSIX, вы не можете использовать поддержку PHP POSIX в стандартном стеке WAMP.

Эквивалент Windows Расширения PHP только для Windows. Это включает в себя поддержку использования классов .NET, которая позволяет вам делать большинство вещей, которые может делать любое другое приложение Windows.

Например, чтобы узнать владельца файла, вы можете использовать System.IO.File.GetAccessControl как описано в ответах на этот вопрос. Скорее всего, вы найдете существующие вопросы и ответы для решения большинства других ваших потребностей.

(Вы можете предпочесть переключение на стек LAMP на виртуальной машине, если это необходимо.)


Угол Нитпикера:

Windows 10 предоставляет бета Поддержка POSIX через подсистему Windows для Linux, а некоторые версии Windows Server поддерживают Interix, еще одну подсистему на основе POSIX, но, насколько мне известно, ни один стандартный стек WAMP не делает ни один из них напрямую доступным из PHP.

В любом случае, если вы используете расширения, специфичные для ОС, во-первых, почти всегда будет предпочтительнее использовать функциональность, присущую реальной операционной системе хоста, чтобы избежать ненужных сложностей. Например, получение идентификатора владельца WSL для файла в разделе NTFS может привести к потере информации, поскольку Linux поддерживает только 32-разрядные идентификаторы, которые сильно отличаются от идентификаторов безопасности Windows.

Отказ от ответственности: я понятия не имею, что на самом деле делает WSL в таких случаях; Вполне возможно, что в некоторых сценариях это не представляет реальной проблемы. Я просто хочу сказать, что необходимость выяснить, как это работает, чтобы убедиться, что он будет соответствовать вашим потребностям, является ненужным усложнением по сравнению с использованием функциональности, встроенной в Windows, или работой службы на подлинном хосте Linux, если вы этого предпочитаете. ,

3

Другие решения

Это не так просто, как в Linux, и posix обычно не используется в Windows (как подсказывает множество комментариев ниже). Существует реализация POSIX 1.0, вызываемая подсистема posix, хотя это было устаревшим с Windows 8. Другой вариант — SFU (Service for Unix), который также устарел (удален?) с Win 8, хотя новый Windows 10 Bash! собирается заменить его — я не достаточно знаком, чтобы знать, как легко вы можете использовать его, но это может принести изменения. Наконец, есть сторонние приложения, которые вы можете использовать для имитации среды UNIX, такие как Cygwin, но я думаю, что ожидать от вашего сервера их использования с точки зрения оптимизации будет немного.

На мой взгляд, вам лучше всего вызывать собственные команды Windows через C ++. На мой взгляд, ваш вопрос слишком расплывчатый, поэтому я остановлюсь только на вашем примере. В основном то, что вам нужно:

В следующем примере используется GetSecurityInfo а также LookupAccountSid функции для поиска и печати имени владельца файла

Это взято из MSDN документы с которой вам нужно ознакомиться, и содержит множество собственных API-интерфейсов Windows. Там вы найдете длинный пример того, что вам нужно (для примера — это полная реализация с использованием вышеуказанных функций, поэтому просто скопируйте и скомпилируйте).

РЕДАКТИРОВАТЬ — PHP

Что касается PHP, не существует чистого решения для получения идентификатора пользователя. Я бы предложил вызвать маленький C ++ exe, реализованный, как указано выше, если вам это нужно, через функцию exec или что-то подобное.

0

По вопросам рекламы [email protected]