У меня был веб-сайт, работающий нормально на 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
так как
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
.