揮発性のメモ2

http://d.hatena.ne.jp/iww/

PHPでテンポラリファイルを作成する

PHPでテンポラリファイルを作るには tmpfile() を使用します。

<?
$fp = tmpfile();


どこに作られたかは内緒なので、ファイル名を取得したいときは stream_get_meta_data() で取り出します。

<?
$fp = tmpfile();

$meta = stream_get_meta_data($fp);
print_r($meta);
Array
(
    [timed_out] =>
    [blocked] => 1
    [eof] =>
    [wrapper_type] => plainfile
    [stream_type] => STDIO
    [mode] => r+b
    [unread_bytes] => 0
    [seekable] => 1
    [uri] => /tmp/phpDiDGX6
)

このテンポラリファイルはだいたい /tmp の下に適当に作られます。
ちょうど tempnam(sys_get_temp_dir(), "php") のような感じです。

-rw-------  1 hoge  hoge  0 Oct 10 14:15 /tmp/phpDiDGX6

パーミッション600になります。 umask(0)していても関係ありません。


通常はプログラム終了時に自動で削除されますが、なんらかの意地悪により殺された場合は ファイルが残ります。

<?php
$fp = tmpfile();

posix_kill(posix_getpid(), SIGKILL);

/tmpなど、tmpwatchが見張ってくれる場所なら問題ないけども、デフォルトから変更している場合は誰も面倒を見てくれないので サーバ用途では注意が必要です。