作为更新。我只是觉得它在一个级别上可以正常工作。例如,mkdir('/var/www/laravel/storage/first', 777, true),但当有多个级别时,例如 mkdir('/var/www/laravel/storage/first/second/third', 777, true),它不起作用。这似乎是错误的,不是吗?因为“recursive”参数设置为true
。
另一个重要更新。 mkdir
无法使用 777 创建文件夹。它首先创建一个父文件夹,dr----x--t
但无法创建子文件夹。我怀疑是某些 php 配置选项或umask
,我不知道。正在调查。
问题是,当我尝试创建文件夹(例如/var/www/laravel/storage/new/directory/name
)时,即使我将所有权限设置为 777,PHP 也会返回“权限被拒绝”。
我的设置在 DO 的 droplet,Ubuntu 18 上。它是 Laravel 网站,位于/var/www/laravel
nginx 并由 nginx 提供服务。
我已经跑了chown -R www-data:www-data /var/www
的输出ps aux|grep nginx|grep -v grep
为:
root 2710 0.0 0.0 141284 1576 ? Ss 14:04 0:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
www-data 2712 0.0 0.0 143584 7636 ? S 14:04 0:00 nginx: worker process
www-data 2714 0.0 0.0 143584 6368 ? S 14:04 0:00 nginx: worker process
www-data 2715 0.0 0.0 143584 6368 ? S 14:04 0:00 nginx: worker process
www-data 2716 0.0 0.0 143584 6368 ? S 14:04 0:00 nginx: worker process
您可以在这里看到主人:
drwxrwxr-x 14 www-data www-data 4096 Mar 4 14:26 ./
drwxrwxrwx 5 www-data www-data 4096 Mar 4 17:45 ../
-rw-rw-r-- 1 www-data www-data 106 Mar 4 14:16 .babelrc
-rw-rw-r-- 1 www-data www-data 234 Mar 4 14:16 .editorconfig
-rw-rw-r-- 1 www-data www-data 651 Mar 4 14:16 .env.example
drwxrwxr-x 8 www-data www-data 4096 Mar 7 13:44 .git/
-rw-rw-r-- 1 www-data www-data 111 Mar 4 14:16 .gitattributes
-rw-rw-r-- 1 www-data www-data 129 Mar 4 14:16 .gitignore
drwxrwxr-x 21 www-data www-data 4096 Mar 7 13:44 app/
-rw-rw-r-- 1 www-data www-data 1686 Mar 4 14:16 artisan
drwxrwxr-x 3 www-data www-data 4096 Mar 4 14:16 bootstrap/
-rw-rw-r-- 1 www-data www-data 1573 Mar 4 14:16 composer.json
-rw-rw-r-- 1 www-data www-data 185669 Mar 4 14:27 composer.lock
drwxrwxr-x 2 www-data www-data 4096 Mar 5 16:31 config/
drwxrwxr-x 6 www-data www-data 4096 Mar 4 14:16 database/
-rw-rw-r-- 1 www-data www-data 597 Mar 4 14:16 package.json
-rw-rw-r-- 1 www-data www-data 1134 Mar 4 14:16 phpunit.xml
drwxrwxr-x 5 www-data www-data 4096 Mar 6 15:52 public/
drwxrwxr-x 5 www-data www-data 4096 Mar 4 14:16 resources/
drwxrwxr-x 2 www-data www-data 4096 Mar 4 14:16 routes/
-rw-rw-r-- 1 www-data www-data 563 Mar 4 14:16 server.php
drwxrwxr-x 6 www-data www-data 4096 Mar 7 12:52 storage/
drwxrwxr-x 4 www-data www-data 4096 Mar 4 14:16 tests/
drwxrwxr-x 46 www-data www-data 4096 Mar 4 14:27 vendor/
-rw-rw-r-- 1 www-data www-data 716 Mar 4 14:16 webpack.config.js
-rw-rw-r-- 1 www-data www-data 549 Mar 4 14:16 webpack.mix.js
-rw-rw-r-- 1 www-data www-data 1630 Mar 4 14:16 yarn-error.log
-rw-rw-r-- 1 www-data www-data 176590 Mar 4 14:16 yarn.lock
权限设置如下:
find /var/www/laravel/ -type f -exec chmod 664 {} \;
find /var/www/laravel/ -type d -exec chmod 775 {} \;
SELinux 似乎未安装。getenforce
命令返回安装建议。
还需要检查什么吗?
更新 1
目标文件夹的权限:
cd /var/www/laravel/storage
ll
输出:
drwxrwxr-x 6 www-data www-data 4096 Mar 7 12:52 ./
drwxrwxr-x 14 www-data www-data 4096 Mar 4 14:26 ../
drwxrwxr-x 3 www-data www-data 4096 Mar 4 14:16 app/
drwxrwxr-x 3 www-data www-data 4096 Mar 7 12:52 f/
drwxrwxr-x 6 www-data www-data 4096 Mar 4 14:16 framework/
drwxrwxr-x 2 www-data www-data 4096 Mar 4 15:18 logs/
更新2
PHPexec('whoami')
返回 'www-data'
更新 3
对于在 PHP 中创建文件夹,我使用mkdir($pathInfo['dirname'], 777, true)
并且路径是绝对的。