概要
標準関数 sys_get_temp_dir と tmpfile の挙動について困ったことがあったため、いろいろ調べてみた。
前提
OS: CentOS
ミドルウェア: apache
PHP: 5系
内容
sys_get_temp_dir()
こちらはシステムの一時ファイル置き場とするディレクトリを取得する関数。
では、一時ファイル置き場となるディレクトリは、設定できるのか。
これが気になったので、調べてみた。
調査結果
変えられる。
環境変数による変更
以下の環境変数のいずれかを設定することによって、修正可能。
数字は優先度。TMPが設定されていたら、 TMPDIR と TEMP は無視される。
- $_ENV['TMP']
- $_ENV['TMPDIR']
- $_ENV['TEMP']
TMPが設定されていない場合(linux)
<?php
var_dump(sys_get_temp_dir());
// 結果 => /tmp
TMPが設定されていない場合(linux)
<?php
// $_ENV['TMP'] → ~/tmp
var_dump(sys_get_temp_dir());
// 結果 => ~/tmp
などといった挙動となる。
またこれに伴い、tmpfile() も挙動が変更される。
tmpfile()
tmpfile() は公式ドキュメントにも記載がないが、
sys_get_tmp_dir で取得できるディレクトリに一時ファイルを作成するように動いている模様。
そのため、環境変数を設定すると、この関数の挙動も変更できる。
環境変数の変更がない場合
<?php
var_dump(tmpfile());
// 結果 => ~/tmp/phpS76qDj
var_dump(tmpfile());
// 結果 => ~/tmp/phpS76qDj