LoginSignup
5
3

More than 5 years have passed since last update.

[関数系] sys_get_temp_dir, tmpfile の仕様

Posted at

概要

標準関数 sys_get_temp_dir と tmpfile の挙動について困ったことがあったため、いろいろ調べてみた。

前提

OS: CentOS
ミドルウェア: apache
PHP: 5系

内容

sys_get_temp_dir()

こちらはシステムの一時ファイル置き場とするディレクトリを取得する関数。
では、一時ファイル置き場となるディレクトリは、設定できるのか。
これが気になったので、調べてみた。

調査結果

変えられる。

環境変数による変更

以下の環境変数のいずれかを設定することによって、修正可能。
数字は優先度。TMPが設定されていたら、 TMPDIR と TEMP は無視される。

  1. $_ENV['TMP']
  2. $_ENV['TMPDIR']
  3. $_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
5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3