我有一个在 Debian 7 + PHP 5.6 上运行良好的网站,最近我决定将我的 Debian 安装升级到 Debian 8。除了一件小事之外,一切都很顺利。
运行相同的代码时,似乎 PHP 无法写入任何内容/tmp/
,现在我收到如下消息:
errno: 2,
errstr: "ZipArchive::extractTo(): Permission denied",
errcontext: {
Filepath: "/tmp/phpVTUxDh",
Options: null,
Zip: {
status: 0,
statusSys: 0,
numFiles: 12,
filename: "/tmp/phpVTUxDh",
comment: ""
},
Status: true
显然该方法extractTo()
很难写入,\tmp
系统上是否有任何特定更改可能导致此问题?新的 systemd 怎么样PrivateTmp
?
我尝试添加PrivateTmp=false
以下文件:
/etc/systemd/system/multi-user.target.wants/lighttpd.service
/etc/systemd/system/multi-user.target.wants/php5-fpm.service
但是,这似乎并没有什么区别。
无论如何,现在总是空的具体原因\tmp
是什么?另外,tmp 的新位置在哪里?
谢谢。
答案1
要检查的一些事项:
php-fpm
1)您以系统用户身份运行
2)AppArmor:
cat /sys/module/apparmor/parameters/enabled
如果启用:
grep 'DENIED' /var/log/syslog or /var/log/auditd/auditd.log
3)权限/tmp
:
stat /tmp
4)open_basedir
在PHP设置中:
su -m <php_user> -c "php -i | grep -i open_basedir"
另外,当您修改 systemd 单元文件时,请先尝试重新加载它:systemctl daemon-reload
然后重新启动php-fpm
。