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