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, чтобы каждый сайт оставался сегрегированным даже при использовании временных файлов. Иначе это может быть проблемой безопасности, я полагаю.