2015-05-25 3 views
14

Я нашел странное поведение относительно php и /tmp папки. Php использует другую папку, когда она работает с /tmp. Php 5.6.7, nginx, php-fpm.Php имеет свой собственный/tmp in/tmp/systemd-private-nABCDE/tmp при доступе через nginx

Я выполняю тот же скрипт двумя способами: через браузер и через оболочку. Но когда он запускается через браузер, файл не в реальной /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) 

Где файл? В/TMP

$ 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?

ответ

26

systemd is configured to give nginx a private /tmp. Если вы должны использовать систему/tmp, то по какой-то причине вам нужно будет изменить файл .service, чтобы прочитать «PrivateTmp = no».

+3

Вы правы, но это 'php-fpm', а не' nginx'. Я изменил файл '/ usr/lib/systemd/system/php-fpm.service' line' PrivateTmp = true' в 'PrivateTmp = false'. Теперь php использует правильную папку '/ tmp'. –

+1

ничего себе это блестящий. правильно, что мы искали с 2-х дней :) –

1

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

 Смежные вопросы

  • Нет связанных вопросов^_^