在 Ubuntu 上运行 PHP 时提示“权限不足”,通常不是 PHP 本身的问题,而是运行 PHP 的用户对文件 / 目录 / 端口没有足够权限。下面按常见原因逐一说明。
不同运行方式,用户不同:
www-datawww-dataubuntu)查看 PHP-FPM 用户:
ps aux | grep php-fpm
PHP 无法读 / 写文件。
错误示例
failed to open stream: Permission denied
解决
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html
如果是上传目录:
sudo chmod -R 775 storage
sudo chown -R www-data:www-data storage
如 Laravel:
storage/logs/laravel.log permission denied
解决:
sudo chmod -R 775 storage
sudo chown -R www-data:www-data storage
错误
Permission denied (cannot bind to port 80)
原因:
解决方式
sudo php -Ssudo setcap CAP_NET_BIND_SERVICE=+eip /usr/bin/php
Ubuntu 默认 AppArmor 可能限制 PHP。
查看:
sudo aa-status
临时解决:
sudo systemctl stop apparmor
PHP 调用 exec() / shell_exec() 失败:
disable_functions 限制检查:
php -i | grep disable_functions
如:
/home/ubuntu/project
www-data 无法进入 /home/ubuntu
解决:
/var/wwwchmod 755 /home/ubuntu
whoami # 当前用户
ps aux | grep php # PHP 运行用户
ls -l 文件或目录 # 看 owner / 权限
tail -f /var/log/nginx/error.log
tail -f /var/log/php7.x-fpm.log
你可以直接贴出:
我可以帮你精准定位是哪一类权限问题。