apache — PHP: get_current_user () против exec (‘whoami’)

Краткая версия вопроса:

В чем разница между
get_current_user(); а также exec('whoami'); ?

Длинная версия вопроса:

  1. Я на XAMPP Localhost на Mac.
  2. Я использую Apache, собираю PHP
    на основе веб-сайта в папке (давайте назовем это folderxyz) в пределах
    папка htdocs (var / www в некоторых версиях Linux + Apache).
  3. Я играл с подключением к базе данных,
    тестирование PDO :: ERRMODE_EXCEPTION описано здесь: Ссылка на сайт

И я получил эту ошибку:

file_put_contents (PDOErrors.txt): не удалось открыть поток: разрешение
отказано …

Итак, я немного поболтал, и, кажется, чтобы это исправить, мне нужно изменить CHMOD настройки файла PDOErrors.txt до 777.

Однако мои вопросы о другом. В ходе этого процесса я понял, что не совсем понимаю концепцию user в Apache, PHP и MySQL.

  • Руководство по PHP говорит, что get_current_user() «Получает имя владельца текущего скрипта PHP» Ссылка на сайт
  • Руководство по PHP говорит, что exec('whoami') возвращается «имя пользователя, которому принадлежит запущенный процесс php / httpd» Ссылка на сайт
  • Когда я использую get_current_user()Я понимаю firstnamelastname, который является именем моей учетной записи на моем Mac.
  • Когда я использую exec('whoami'), Я получил daemon,

Так…

  1. Какая связь между firstnamelastname а также daemon ?
  2. Какая связь между «владелец текущего PHP-скрипта» а также «имя пользователя, которому принадлежит запущенный процесс php / httpd» ?
  3. Кому нужно разрешение, чтобы написать PDOErrors.txt? Это firstnamelastname или же daemon ?
  4. Кому нужно разрешение, чтобы написать PDOErrors.txt? Это Apache или PHP (или оба)?
  5. Имеет ли понятие Unix-подобный root учетная запись где-нибудь здесь?

Изменить: я обновил это, чтобы отразить, что это не было folderxyz что мне пришлось изменить настройки CHMOD. Мне пришлось изменить настройки для файла PDOErrors.txt


OP здесь: для дальнейшего использования я поставил здесь параллельный вопрос для платформы Linux (с сопровождающим интуитивным объяснением того, что происходит): https://stackoverflow.com/questions/31389892/why-is-the-output-www-data-in-one-case-and-root-in-another

14

Решение

  1. get_current_user() (должен) вернуть владельца файла, который firstnamelastname в этом случае. Однако сообщалось о проблемах, связанных с тем, что эта функция несовместима между платформами. Как таковой, я бы не стал доверять его выводу. daemon пользователь Apache работает как.
  2. Владельцем сценария PHP является пользователь, которому принадлежит сам файл в соответствии с операционной системой. Вы можете запустить ls -la в каталоге, в котором находятся ваши сценарии, чтобы найти пользователя и группу, к которой принадлежит файл.
  3. Независимо от того, с каким пользователем вы редактируете свои сценарии, он должен быть в состоянии написать его, поэтому, скорее всего, firstnamelastname (+rw).
  4. Для самой папки, вы должны иметь +rx (выполнить и прочитать) для daemon и для файла PHP, +r (читать). На моей установке XAMMP они сделали это, установив все в htdocs как общедоступный, таким образом daemon могу читать, но не писать.
  5. Mac имеет корневую учетную запись, которая обычно владеет htdocs или же www каталог. Он выполняет роль традиционного пользователя root в Unix.

Вот некоторая информация о владельцах / группах файлов и владельце процесса:

host:~$ ls -l /Applications/XAMPP/xamppfiles/htdocs
drwxr-xr-x 3 root admin  4096 2015-01-01 00:01 .
drwxr-xr-x 3 root admin  4096 2015-01-01 00:01 ..
-rw-r--r-- 1 firstnamelastname admin   189 2015-01-31 20:45 index.php

host:~$ ps aux | grep httpd | head -n1
daemon          45204   0.0  0.1  2510176  10328   ??  S    Tue11AM   0:01.38 /Applications/XAMPP/xamppfiles/bin/httpd -k start -E /Applications/XAMPP/xamppfiles/logs/error_log -DSSL -DPHP

Если вы хотите сделать файл доступным для записи пользователем демона, вы можете создать новую папку и назвать ее владельцем группы. admin (так что вы можете использовать его тоже), и дать ему +rwx для пользователя и группы, с +rx для общественности:

host:~$ cd /Applications/XAMPP/xamppfiles/htdocs
host:htdocs$ mkdir some_dir
host:htdocs$ chmod 775 some_dir
10

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

Других решений пока нет …