PHP: get_current_user() vs. exec ('whoami')

Короткий вариант вопроса:

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

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

  • Я нахожусь на XAMPP Localhost на Mac.
  • Я использую Apache, создавая PHP (позвоните ему folderxyz) в пределах htdocs (var/www в некоторых вариантах Linux + Apache).
  • Я играл с подключением к базе данных, тестирование 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.

Так...

  • Какая связь между firstnamelastname и daemon?
  • Какая связь между "владельцем текущего PHP script" и "именем пользователя, которому принадлежит запущенный процесс php/httpd"?
  • Кому нужно разрешение на запись в PDOErrors.txt? Это firstnamelastname или daemon?
  • Кому нужно разрешение на запись в PDOErrors.txt? Это Apache или PHP (или оба)?
  • Существует ли понятие фактора unix-like root в любом месте?

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


OP здесь: для дальнейшего использования я задал параллельный вопрос для платформы Linux здесь (с сопроводительным интуитивным объяснением того, что происходит): qaru.site/info/497342/...

Ответ 1

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

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

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