Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
#phperbiglt のLT
Search
hideki kinjyo
PRO
December 20, 2025
Programming
100
0
Share
#phperbiglt のLT
https://connpass.com/event/372021/
でのLT資料です
hideki kinjyo
PRO
December 20, 2025
More Decks by hideki kinjyo
See All by hideki kinjyo
PHPで使える日時の表現と、その知り方 #frontend_phpcon_do
o0h
PRO
0
180
Composerを使ったサプライチェーン攻撃の様子を眺めてみる #phpstudy
o0h
PRO
2
220
ソースコード→AST→オペコード、の旅を覗いてみる
o0h
PRO
1
160
PCOVから学ぶコードカバレッジ #phpcon_odawara
o0h
PRO
0
360
夢の無限スパゲッティ製造機 -実装篇- #phpstudy
o0h
PRO
0
240
夢の無限スパゲッティ製造機 #phperkaigi
o0h
PRO
0
490
PHPer Book Revue 「雑に作る」 #phperkaigi
o0h
PRO
0
370
俺にも私がAIと作った オススメの個人ツールを語らせてくれ
o0h
PRO
0
66
手軽に積ん読を増やすには?/読みたい本と付き合うには?
o0h
PRO
1
280
Other Decks in Programming
See All in Programming
ふつうのFeature Flag実践入門
irof
7
3.5k
Modding RubyKaigi for Myself
yui_knk
0
870
ReactとSvelteのその先、Ripple-TS / Beyond React and Svelte: Ripple-TS
ssssota
3
2k
New "Type" system on PicoRuby
pocke
1
430
生成AI時代にこそ効くGo | Why Go Works in the Age of Generative AI
mom0tomo
8
3.1k
SPMマルチモジュールで テストカバレッジを取得する技法
yosshi4486
0
140
Migrations : C'est une question d'hygiène !
vinceamstoutz
0
3k
関係性から理解する"同一性"の型用語たち
pvcresin
2
630
Oxlintのカスタムルールの現況
syumai
5
980
LLM本来の能力を解き放つサンドボックス技術とAI民主化への適用
yukukotani
3
2k
サーバーレスで作る、動画データ管理基盤
oyasumipants
0
350
inferと仲良くなる10分間
ryokatsuse
1
350
Featured
See All Featured
Thoughts on Productivity
jonyablonski
76
5.2k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.3k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.5k
Code Review Best Practice
trishagee
74
20k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
380
GitHub's CSS Performance
jonrohan
1033
470k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
310
Utilizing Notion as your number one productivity tool
mfonobong
4
310
Facilitating Awesome Meetings
lara
57
6.9k
Designing for Timeless Needs
cassininazir
1
240
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Transcript
あ〜忘れたい、思い出したくもないね PHPer大忘LT会 2025 Hideki Kinjyo GitHub: o0h / X: @o0h_
[発表用] v1.1.0
世間はすっかり年の瀬。  2
世間はすっかり年の瀬。 師走、年末、年納め。  3
忘年会。 PHPer大忘LT会。  4
忘年会。 PHPer大忘LT会。  5
忘年会。 PHPer大忘LT会。  6
忘れたい記憶。 消したい記録。  7
忘れたい忘れたい忘れたい忘れたい  8
忘れたい. . .  9
と言えば、一時ファイル  10
思い出されることがあってはイケナイ  11
1. PHPで一時ファイルを使うための色々7選 2. 一時ファイルがいつ消えるのか
一時ファイル? • リクエストやプロセス処理の中で読み書きを行う • 処理が終わったら、書き込まれたデータが削除される • ↑この要件をどうやって満たしていくか、を考えるのが今日のLT  13
1. sys_get_temp_dir()を使う  14
• 「一時ファイルのディレク トリ」を取得 • `/tmp` とか • 通常のファイル作成・書き込 み操作ができる •
ファイル名を任意のものに したい場合に便利  15 $path = sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'file_no_namae_01'; $fp = fopen($path, 'r+'); // -------- // Կ͔ͷॲཧ // -------- fclose($fp); unlink($path);
2.tempnam()を使う  16
• 指定したディレクトリに、 指定したprefixでファイル を作成し、そのパスを返す • 第1引数: ディレクトリ • 第2引数: prefix
• ファイルのモードは0600 • 規則に沿った名前で、かつ 一意のファイルを作りたい 時に便利  17 $path = tempnam( sys_get_temp_dir(), 'file_no_namae_', ); $fp = fopen($path, 'r+'); // -------- // Կ͔ͷॲཧ // -------- fclose($fp); unlink($path);
3.自前のクラスの__destruct()で自動削除  18
• 自前でクラスを作成してど うにかする方式 • `$this->fp` みたいな所に ファイルハンドラを突っ込む • そのクラスのオブジェクト のdestructで削除処理が走
るようにする • 使い間違い・削除忘れなど が無くなりそうなので便利  19 public function __construct() {…} public function write( string $content ): void {…} public function __destruct() { @\fclose($this->fp); @\unlink($this->name); }
4.php://memory  20
• メモリ上にデータを展開す る記述方法 • 「ファイルを作らない」の で「ファイルを消し忘れ る」が起きない • ただし、書き込んだあと に、他のプロセスに渡すこ
とが出来ない  21 $fp = fopen( 'php://memory', 'r+', ); // -------- // Կ͔ͷॲཧ // -------- fclose($fp);
5.php://temp  22
• php://memoryと同じ使い方 • サイズが上限を超えた時に 実ファイルに書き出す • 閾値は任意に設定できる • 作成場所は `
sys_get_temp_dir()`の値 と同じ • サイズが大きいデータを扱 う時に便利 • 他のプロセスに渡せない、 はこちらでも同様  23 $fp = fopen( 'php://temp', 'r+', ); // -------- // Կ͔ͷॲཧ // -------- fclose($fp);
6.tmpfile() [+ stream_get_meta_data()]  24
• `fopen()`したのと同じリ ソースを返す • 作成されたファイルは、 処理が終わった時に自動で 削除される • 消し忘れがなくて便利 
25 $fp = tmpfile(); // -------- // Կ͔ͷॲཧ // -------- fclose($fp);
• `stream_get_meta_data()` で、その実体のファイル パスを取得することができ る • 何かしらのライブラリなど で、「パスを指定する」系 のケースにも対応できる 
26 $config = getenv('XXX_CONFIG'); $fp = tmpfile(); fwrite($fp, $config); fflush($fp); $meta = stream_get_meta_data($fp); $path = $meta['uri']; $client = new NanikaSdk( configFile: $path, ); $client->doSomething(); fclose($fp);
7.SplTempFileObject  27
• php://tempのようなやつ の、オブジェクト指向版 • インスタンスと一緒に自動 でファイルも削除される • 消し忘れがなくて便利 • 内部的には
`php://temp` `php://memory` を使ってい るっぽい • https://github.com/php/php- src/blob/9d5f2f1/ext/spl/ spl_directory.c#L2076-L2082  28 $file = new SplTempFileObject(); // -------- // Կ͔ͷॲཧ //ʢ$file->fwrite()ͳͲʣ // -------- unset($file);
1. PHPで一時ファイルを使うための色々7選 2. 一時ファイルがいつ消えるのか
システムの一時ディレクトリを使っている系 • sys_get_temp_dir(), tempnam()を使って、「普通にファイル書き出し」 を行っている場合 • あなたの書いたアプリケーションに関係なく、OS側の制御で自動的に 掃除してくれる(かも知れない) • 例:
@IT:/tmpのファイルがいつの間にか消えてしまう https://atmarkit.itmedia.co.jp/flinux/rensai/linuxtips/342deltmpdirfile.html  30
メモリ内で扱った場合 • php://memory や、php://temp(の設定値を超えない範囲)での書き込み を行っている場合 • `fclose()`や`unset()`された後やphp_request_shutdownのフェーズで 解放される、と教わりました! • まだ自分ではそこら辺の流れをちゃんと追えてないです、すみません!!
 31
tmpfile() • php://memory や、php://tempと同じように、`fclose()`,`unset()`さ れた後やphp_request_shutdownのフェーズで解放される • (ちょっとだけ見てみましょう)  32
tmpfile系 • `tmpfile()` の場合は、 `php_stdio_stream_data` 構造体に「一時ファイル覚 えておいてねフィールド」 があり、クリーンアップ時 にそれを利用している •
一時ファイルのパスが格納さ れている  33 typedef struct { FILE *file; int fd; unsigned is_process_pipe:1; unsigned is_pipe:1; unsigned cached_fstat:1; unsigned is_pipe_blocking:1; unsigned no_forced_fstat:1; unsigned is_seekable:1; unsigned _reserved:26; int lock_flag; zend_string *temp_name; zend_stat_t sb; } php_stdio_stream_data;
tmpfile系 • ステップ実行で追ってみると→  34
tmpfile系 • `tmpfile()` の場合は、 `php_stdio_stream_data` 構造体に 「一時ファイル覚えておいてね フィールド」があり、クリーンアッ プ時にそれを利用している 
35
tmpfile系 • `tmpfile()` の場合は、 `php_stdio_stream_data` 構造体に 「一時ファイル覚えておいてね フィールド」があり、クリーンアッ プ時にそれを利用している 
36
以上になります  37
最後の章
 39 嫌なこと、忘れてハッピーPHP 🍻
おしまい! お付き合いいただき ありがとうございました!!