Câu hỏi PHP: get_current_user () so với exec ('whoami')


Phiên bản ngắn của câu hỏi:

Sự khác biệt giữa get_current_user(); và exec('whoami'); ?

Phiên bản dài của câu hỏi:

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

Và tôi nhận được lỗi này:

file_put_contents (PDOErrors.txt): không thể mở luồng: Quyền   từ chối...

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

Tuy nhiên, câu hỏi của tôi là về 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.

  • Hướng dẫn sử dụng PHP nói rằng get_current_user()  "Lấy tên của chủ sở hữu của tập lệnh PHP hiện tại"  Liên kết
  • Hướng dẫn sử dụng PHP nói rằng exec('whoami') trả về "tên người dùng sở hữu quá trình chạy php / httpd"  Liên kết
  • Khi tôi sử dụng get_current_user(), Tôi có rồi firstnamelastname, đó là tên tài khoản của tôi trên máy Mac của tôi.
  • Khi tôi sử dụng exec('whoami'), Tôi có daemon.

Vì thế...

  1. Mối quan hệ giữa firstnamelastname và daemon ?
  2. Mối quan hệ giữa "chủ sở hữu của tập lệnh PHP hiện tại" và "tên người dùng sở hữu quá trình chạy php / httpd" ?
  3. Ai cần sự cho phép để viết thư PDOErrors.txt? Là nó firstnamelastname hoặc là daemon ?
  4. Ai cần sự cho phép để viết thư PDOErrors.txt? Nó là Apache hay PHP (hoặc cả hai)?
  5. Liệu khái niệm của một unix giống như root yếu tố tài khoản ở bất cứ nơi nào ở đây?

Chỉnh sửa: Tôi đã cập nhật thông tin này để phản ánh rằng đó không phải là folderxyz tôi phải thay đổi cài đặt CHMOD cho. Tôi phải thay đổi cài đặt cho tệp 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 về 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


13
2018-02-16 19:16


gốc


Tôi muốn thêm để tham khảo trong tương lai, câu trả lời Stackoverflow sau đây giải thích lý do 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 www-data trên máy công cộng (ví dụ: có thể sử dụng được bởi bất kỳ ai trên internet). Tôi đã xem các cài đặt trong Apache httpd.conf tệp trong máy cục bộ của tôi và user và group cài đặt thực sự được đặt thành daemon: stackoverflow.com/questions/26063556/… - thanks_in_advance


Các câu trả lời:


  1. get_current_user() (nên) trả lại chủ sở hữu của tệp, đó 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.
  2. Chủ sở hữu của tập lệnh PHP là người dùng sở hữu chính tệp đó theo hệ điều hành. Bạn có thể chạy ls -la trong thư mục mà các 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 nê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ứ vào htdocs là có thể đọc được, do đó daemon có thể đọc nó, nhưng không viết cho nó.
  5. Mac có tài khoản gốc thường sở hữu htdocs hoặc là www danh mục. 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ề chủ sở hữu / nhóm tệp và chủ sở hữu quy 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 một tệp có thể ghi bởi người dùng daemon, bạn có thể tạo một thư mục mới và đặt tên nó là chủ sở hữu với nhóm admin (để bạn có thể sử dụng nó), và cho nó +rwx cho người dùng và nhóm, với +rx cho công chúng:

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

9
2018-02-16 19:53