2015-02-16 17 views
12

phiên bản ngắn của câu hỏi:PHP: get_current_user() vs exec ('whoami')

sự khác biệt giữa get_current_user();exec('whoami'); là gì?

Long phiên bản của câu hỏi:

  1. Tôi đang trên một Localhost XAMPP trên máy Mac.
  2. Tôi đang sử dụng Apache, xây dựng một trang web PHP dựa trên một thư mục (hãy gọi nó là folderxyz) trong thư mục htdocs (var/www trong một số hương vị của Linux + Apache).
  3. Tôi đã chơi xung quanh với một kết nối cơ sở dữ liệu, thử nghiệm ra PDO :: ERRMODE_EXCEPTION mô tả ở đây: Link

Và tôi đã nhận lỗi này:

file_put_contents(PDOErrors.txt): failed to open stream: Permission denied...

Vì vậy, tôi đã làm một số nghề thám tử xung quanh và nó có vẻ như để sửa lỗi này, tôi cần thay đổi cài đặt CHMOD của tệp PDOErrors.txt đến 777.

Tuy nhiên, câu hỏi của tôi là về một cái gì đó khác. Trong quá trình này, tôi nhận ra rằng tôi không hiểu rõ khái niệm về user trong Apache, PHP và MySQL.

  • Tài liệu PHP nói rằng get_current_user()"Gets tên của chủ sở hữu của các tập lệnh PHP hiện tại"Link
  • Tài liệu PHP nói rằng exec('whoami') lợi nhuận "tên người dùng sở hữu chạy php trình/httpd "Link
  • Khi tôi sử dụng get_current_user(), tôi nhận được firstnamelastname, là tên tài khoản của tôi trên máy Mac.
  • Khi tôi sử dụng exec('whoami'), tôi nhận được daemon.

Vậy ...

  1. mối quan hệ giữa firstnamelastnamedaemon là gì?
  2. Mối quan hệ giữa "chủ sở hữu của tập lệnh PHP hiện tại""tên người dùng sở hữu quá trình chạy php/httpd" là gì?
  3. Ai cần có quyền ghi vào PDOErrors.txt? Có phải là firstnamelastname hoặc daemon?
  4. Ai cần có quyền ghi vào PDOErrors.txt?Nó là Apache hay PHP (hoặc cả hai)?
  5. Khái niệm về hệ số tài khoản root giống nhau ở bất kỳ đâu ở đây?

Edit: Tôi cập nhật này để phản ánh rằng nó không phải là folderxyz mà tôi đã phải thay đổi các thiết lập CHMOD cho. Tôi đã phải thay đổi các thiết lập cho file PDOErrors.txt


OP ở đây: để tham khảo trong tương lai, tôi đưa ra một câu hỏi song song cho nền tảng Linux ở đây (với một lời giải thích trực quan kèm theo những gì đang xảy ra) : https://stackoverflow.com/questions/31389892/why-is-the-output-www-data-in-one-case-and-root-in-another

+0

tôi muốn thêm để tham khảo trong tương lai, Stackoverflow sau ans wer giải thích tại sao người dùng Apache xuất hiện dưới dạng 'daemon' trên máy cục bộ, trong khi đó là' www-data' trên máy công cộng (tức là, có thể sử dụng được bởi bất kỳ ai trên internet). Tôi đã xem các thiết lập trong tệp tin Apache 'httpd.conf' trong máy cục bộ của tôi và các thiết lập' user' và 'group' đã được thiết lập thành' daemon': http://stackoverflow.com/questions/26063556/php5- dữ liệu không chạy-as-www-data –

Trả lời

9
  1. get_current_user() (nên) trả lại chủ sở hữu của các tập tin, đó là firstnamelastname trong trường hợp này. Đã có báo cáo vấn đề rằng chức năng này là không phù hợp giữa các nền tảng tuy nhiên. Như vậy, tôi sẽ không tin vào đầu ra của nó. daemon là người dùng Apache đang chạy dưới dạng.
  2. Chủ sở hữu tập lệnh PHP là người dùng sở hữu tệp theo hệ điều hành. Bạn có thể chạy ls -la trong thư mục mà tập lệnh của bạn đang tìm để tìm người dùng và nhóm tệp thuộc về.
  3. Cho dù người dùng nào bạn đang chỉnh sửa tập lệnh của mình cần có khả năng viết kịch bản, rất có thể, firstnamelastname (+rw).
  4. Đối với chính thư mục, bạn cần có +rx (thực thi và đọc) cho daemon và đối với tệp PHP, +r (đọc). Khi cài đặt XAMMP, họ đã thực hiện việc này bằng cách đặt mọi thứ trong htdocs là có thể đọc được, do đó, daemon có thể đọc được, nhưng không ghi vào đó.
  5. Mac có tài khoản gốc thường sở hữu thư mục htdocs hoặc www. Nó lấp đầy vai trò của một người dùng root unix truyền thống.

Dưới đây là một số thông tin về các tập tin chủ sở hữu/nhóm và chủ sở hữu quá trình:

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 

Nếu bạn muốn tạo ra một khả năng ghi tập tin bằng cách người dùng daemon, bạn có thể tạo một thư mục mới và đặt tên là là chủ sở hữu với nhóm admin (do đó bạn có thể sử dụng nó quá), và cung cấp cho nó +rwx cho người dùng và nhóm, với +rx cho công cộng:

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