Short version of the question:
What's the difference between
get_current_user(); and exec('whoami'); ?
Long version of the question:
- I'm on a XAMPP Localhost on a Mac.
- I'm using Apache, building a PHP based website in a folder (let's call it folderxyz) within the htdocs folder (var/www in some flavors of Linux+Apache).
- I was playing around with a database connection, testing out PDO::ERRMODE_EXCEPTION described here: Link
And I got this error:
file_put_contents(PDOErrors.txt): failed to open stream: Permission denied...
So I did some sleuthing around and it seems that to fix this I need to change the CHMOD settings of file PDOErrors.txt to 777.
However, my questions are about something else. During this process I realized that I don't clearly understand the concept of user in Apache, PHP, and MySQL.
- The PHP manual says that
get_current_user()"Gets the name of the owner of the current PHP script" Link - The PHP manual says that
exec('whoami')returns "the username that owns the running php/httpd process" Link - When I use
get_current_user(), I get myfirstnamelastname, which is my account name on my Mac. - When I use
exec('whoami'), I getdaemon.
So...
- What's the relationship between
firstnamelastnameanddaemon? - What's the relationship between the "the owner of the current PHP script" and "username that owns the running php/httpd process" ?
- Who needs permission to write to PDOErrors.txt? Is it
firstnamelastnameordaemon? - Who needs permission to write to PDOErrors.txt? Is it Apache or PHP (or both) ?
- Does the concept of a unix-like
rootaccount factor-in anywhere here ?
Edit: I updated this to reflect that it wasn't the folderxyz that I had to change CHMOD settings for. I had to change the settings for the file PDOErrors.txt
OP here: for future reference, I put up a parallel question for the Linux platform here (with an accompanying intuitive explanation of what's going on): https://stackoverflow.com/questions/31389892/why-is-the-output-www-data-in-one-case-and-root-in-another
get_current_user()(should) return the owner of the file, which isfirstnamelastnamein this case. There have been reported issues that this function is inconsistent between platforms however. As such, I would not trust its output.daemonis the user Apache is running as.- The owner of the PHP script is the user who owns the file itself according to the operating system. You can run
ls -lain the directory your scripts are in to find the user and group the file belongs to. - Whichever user you're editing your scripts with needs to be able to write it, so most likely,
firstnamelastname(+rw). - For the folder itself, you should have
+rx(execute and read) fordaemonand for the PHP file,+r(read). On my installation of XAMMP, they've done this by setting everything inhtdocsas public readable, thusdaemoncan read it, but not write to it. - Mac has a root account that typically owns the
htdocsorwwwdirectory. It fills the role of a traditional unix root user.
Here is some information on the file owners/groups and the process owner:
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
If you wanted to make a file writeable by the daemon user, you can create a new folder and name it as the owner with the group admin (so you can use it too), and give it +rwx for the user and group, with +rx for public:
host:~$ cd /Applications/XAMPP/xamppfiles/htdocs
host:htdocs$ mkdir some_dir
host:htdocs$ chmod 775 some_dir
来源:https://stackoverflow.com/questions/28548743/php-get-current-user-vs-execwhoami