PHPで重複しないファイル名で一時ファイルを作成し、処理が終了したら自動的に削除する関数tmpfile()
を紹介します。
上記の仕様に対して日付別のtmpフォルダを作り、一時ファイルを作成して必要なくなれば削除する。そんな処理をカタカタ書いてもっとスマートに処理できないかな?と開発していた時期が私にもありました。
PHPでは一時ファイルを作ってfclose
やスクリプト処理が終了したタイミングで削除するtmpfile()
が用意されています。
tmpfile (void) : resource
書き込み可のモード (w+) でユニークな名前を有するテンポラリファイルを作成し、 ファイルハンドルを返します。 (fclose()を呼んだり、tmpfile() が返すファイルハンドルへの参照がなくなったりして) ファイルをクローズした場合や、スクリプトが終了したりしたときに、このファイルは自動的に削除されます。 (参照元:php.net)
<?php
$file = tmpfile();
fputcsv($file,['id','user']);
rewind($file);
var_dump(fgetcsv($file));
array(2) {
[0]=>
string(2) "id"
[1]=>
string(4) "user"
}
簡単に作れましたね。
tmpfile()
は、メモリ上に作られてるわけでなく物理サーバーのファイルとして作られます。
そのため書き込める上限は当然ながらサーバー容量が限界となります。
$file = tmpfile()
$meta = stream_get_meta_data($file);
var_dump($meta[‘uri’]);
string(66) "/tmp/php4Ysgga"
uriに記述されている /tmp/php4Ysgga
が一時ファイルの保存パスになります。
(実行すると結果は毎回変わります。)