Как с правами пользователя установить TMPDIR?

SoaringHawk

Новичок
Как с правами пользователя установить TMPDIR?

Т.е. у меня проблема. На сервере в open_basedir не прописана /tmp директория, которая по умолчанию используется функциями tmpfile() и ftp_*list(). На просьбу ее добавить админ сказал – "нет, но в пхп можно переопределить ее для себя через переменные среды".

В мануале на php.net нашёл лишь одно упоминание об этом:
Глава 38. Загрузка файлов на сервер

По умолчанию принятые файлы сохраняются на сервере в стандартной временной папке до тех пор, пока не будет задана другая директория при помощи директивы upload_tmp_dir конфигурационного файла php.ini. Директорию сервера по умолчанию можно сменить, установив переменную TMPDIR для окружения, в котором выполняется PHP. Установка переменной TMPDIR при помощи функции putenv() внутри PHP-скрипта работать не будет. Эта переменная окружения также может использоваться для того, чтобы удостовериться, что другие операции также работают с принятыми файлами.
Поиск по всему php.net так же ничего не дал. Все упоминания о TMPDIR сводятся к банальному совету переопределить временную директорию. Но КАК если через putenv('TMPDIR=/mytmpdir') и apache_setenv('TMPDIR', '/mytmpdir') это не работает – ни где не сказано…

Искать через глобальные поисковики (Google, Yahoo, Yandex и т.д.) в буквальном смысле устал, потому, как обнаружилось, что в нете валяется, хренова туча копий основного мануала с php.net.
Но нашёл таки упоминания о файлах: .bashrc, .cshrc, .profile и .bash_profile. Пробовал создавать у себя в корне каждый из них с текстом:
TMP=/pathtomytmp; export TMP
TMPDIR=$TMP; export TMPDIR
Не помогло. Пробовал с текстом:
setenv TMP /pathtomytmp
setenv TMPDIR /pathtomytmp
тоже не помогло. Пробовал еще в .htaccess прописать:
setenv TMPDIR /pathtomytmp
Все равно не работает. Хотя в скрипте getenv('TMPDIR') возвращает /pathtomytmp - tmpfile() по прежнему пытается создать файл в /tmp...

И честно говоря, в итоге, я что-то немного запутался. Как все-таки определить только для себя свою папку для временных файлов?
 

boombick

boombick.org
а чем тебе /tmp не нравится? у нее обычно права 0777, правда с noexec, но там ничего запускать и не надо..
UPD: только не надо говорить слово "безопасность"
 

SoaringHawk

Новичок
2boombick:
Мне-то она нравится.:) Но админ запретил ее использовать. С этим не поспоришь. Я написал выше, что он сказал, чтобы я определил для себя свою через переменные среды. В мануале нашёл, что в никсах путь до директории временных файлов переопределяется в переменной окружения "TMPDIR".
А на счет "UPD: только не надо говорить слово "безопасность"" - сори я не понял к чему это.

2dark-demon:
Но tempnam всеголишь создает временный файл в указанной директории... она не переопределяет TMPDIR... Т.е., например, ftp_rawlist() по прежнему выдает:
Warning: ftp_rawlist() [function.ftp_rawlist]: open_basedir restriction in effect. File(/tmp) is not within the allowed path(s)
Забавно, но здесь: http://bugs.php.net/bug.php?id=39386 сказано юзать putenv(), а здесь: http://bugs.php.net/bug.php?id=39555, что это вообще не предусматривается...
Т.е. если у какого-нибудь хостера в open_basedir не прописана /tmp - то о функциях tmpfile(), ftp_rawlist(), ftp_nlist() можно забыть..? Ерунда получается.:confused:
 

boombick

boombick.org
UPD: только не надо говорить слово "безопасность"
я превосхищал реплики типа "да там файлы сессий хранятся, это не секурно, да мои файлы загружаемые кто хочешь скопировать может"
Очень рад, что их не последовало :)

-~{}~ 18.03.07 07:45:

попробуй положить в корень сайта .htaccess и написать в нем
php_value upload_tmp_dir /path/to/your_dir
php_value open_basedir /path/to/your_dir

-~{}~ 18.03.07 07:45:

dark-demon
Лучше жуй сникерсы
 

SoaringHawk

Новичок
попробуй положить в корень сайта .htaccess и написать в нем
php_value upload_tmp_dir /path/to/your_dir
php_value open_basedir /path/to/your_dir
К сожалению это тоже не сработает. :( Эти опции могут быть установлены только в php.ini или httpd.conf.

PS Представляешь, что бы было, если бы каждый пользователь мог переопределить open_basedir... :D
 
Сверху