Php имеет свой собственный / tmp в / tmp / systemd-private-nABCDE / tmp при доступе через nginx

Я обнаружил странное поведение в отношении php а также /tmp папка. Php использует другую папку, когда он работает с /tmp, Php 5.6.7, nginx, php-fpm.

Я выполняю один и тот же скрипт двумя способами: через браузер и через оболочку. Но когда он запускается через браузер, файл не в реальном /tmp папка:

<?php
$name = date("His");

echo "File /tmp/$name.txt\n";

shell_exec('echo "123" > /tmp/'.$name.'.txt');

var_dump(file_exists('/tmp/'.$name.'.txt'));

var_dump(shell_exec('cat /etc/*release | tail -n 1'));

php -f script.php

File /tmp/185617.txt
bool(true)
string(38) "CentOS Linux release 7.0.1406 (Core)

Где файл? В / тмп

$ find / -name 185617.txt
/tmp/185617.txt

Если доступ к нему через http://myserver.ru/script.php я получил

File /tmp/185212.txt
bool(true)
string(38) "CentOS Linux release 7.0.1406 (Core)

Но где файл?

$ find / -name 185212.txt
/tmp/systemd-private-nABCDE/tmp/185212.txt

Почему php считает, что /tmp должен быть в /tmp/systemd-private-nABCDE/tmp?

17

Решение

Так как systemd настроен так, чтобы дать nginx личное / tmp. если ты должен вместо этого используйте system / tmp вместо этого, тогда вам нужно будет изменить файл .service, чтобы он читал «PrivateTmp = no».

31

Другие решения

Если вы используете несколько сайтов на сервере, то я думаю, что вы захотите оставить PrivateTmp = yes, чтобы каждый сайт оставался разделенным даже при использовании временных файлов. В противном случае я мог бы представить себе проблему безопасности.

1

По вопросам рекламы [email protected]