在開發 PHP 程式時,習慣將 Apache 或 PHP-FPM 的群組,與使用者共用
但二者預設新增檔案的權限,經常是 755
也就是說,群組沒有權限異動檔案,在開發時較不方便
以下就是修改預設檔案權限方式。
umask() 用來做檔案權限的遮罩 (限制權限)
PHP 預設 umask 是 022,當建立檔案或資料夾權限給 777 時,最終的權限會是 777 – 022 = 755
如下 PHP 語句
chmod(“/FilePath/FileName”, 0777); // FileName 權限為 755
mkdir(“/Folder/”, 0777, true); // Folder 權限為 755
若要調整權限,以下有 3 個方式
1. Apache 可以更改預設 umask,修改後重啟 Restart Apache 才會生效,如下 Linux 指令
|
echo "umask 000" >> /etc/sysconfig/httpd service httpd restart |
2.PHP 寫入檔案前,執行 umask(0)
|
$old = umask(000); //儲存當前的 umask,再更新 umask 為 000 fopen('foo.txt', 'w'); umask($old); // 還原 umask |
3.PHP 寫入檔案後,使用 chmod()
|
fopen('foo.txt', 'w'); chmod('foo.txt', 0777); // 變更權限 |
PHP-FPM (NGINX)
修改檔案路徑:/lib/systemd/system/php-fpm.service
加上 UMASK 設定後,如下
|
[Unit] Description=The PHP FastCGI Process Manager After=syslog.target network.target [Service] Type=notify PIDFile=/var/run/php-fpm/php-fpm.pid EnvironmentFile=/etc/sysconfig/php-fpm ExecStart=/usr/sbin/php-fpm --nodaemonize --fpm-config /etc/php-fpm.conf ExecReload=/bin/kill -USR2 $MAINPID PrivateTmp=true UMask=0002 [Install] WantedBy=multi-user.target |
重啟 php-fpm 服務