Я обнаружил странное поведение в отношении 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
?
Так как systemd настроен так, чтобы дать nginx личное / tmp. если ты должен вместо этого используйте system / tmp вместо этого, тогда вам нужно будет изменить файл .service, чтобы он читал «PrivateTmp = no».
Если вы используете несколько сайтов на сервере, то я думаю, что вы захотите оставить PrivateTmp = yes, чтобы каждый сайт оставался разделенным даже при использовании временных файлов. В противном случае я мог бы представить себе проблему безопасности.