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

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

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

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

echo "File /tmp/$name.txtn";

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)

где файл? In / tmp

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

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

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?

2 ответов


, потому что systemd настроен на предоставление nginx private / tmp. Если ты ... --3-->должны используйте system / tmp вместо этого по какой-то причине, тогда вам нужно будет изменить .файл службы для чтения "PrivateTmp=no".


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