Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
#phperbiglt のLT
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
hideki kinjyo
PRO
December 20, 2025
Programming
150
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
#phperbiglt のLT
https://connpass.com/event/372021/
でのLT資料です
hideki kinjyo
PRO
December 20, 2025
More Decks by hideki kinjyo
See All by hideki kinjyo
Composerだって音楽を奏でたい
o0h
PRO
0
13
phperだってパンチカードでコーディングしたい
o0h
PRO
0
580
Symfonyが 簡単にAI agentになる
o0h
PRO
1
160
yield再入門 #phpcon
o0h
PRO
0
1.9k
PHPで使える日時の表現と、その知り方 #frontend_phpcon_do
o0h
PRO
0
520
Composerを使ったサプライチェーン攻撃の様子を眺めてみる #phpstudy
o0h
PRO
3
420
ソースコード→AST→オペコード、の旅を覗いてみる
o0h
PRO
1
400
PCOVから学ぶコードカバレッジ #phpcon_odawara
o0h
PRO
0
690
夢の無限スパゲッティ製造機 -実装篇- #phpstudy
o0h
PRO
0
310
Other Decks in Programming
See All in Programming
作って学ぶSpring BootのAuto Configuration / JJUG Night Seminar 2026-10-19
rshindo
0
220
現場と育てるRailsモデリング 〜Spreadsheetから始めたモデル設計〜
siroemk
2
1.2k
クラウドゲーミングのパフォーマンス最適化に挑む / Cloud Gaming Performance Tuning
vivion
0
330
動画プレイヤーはなぜカクつくのか 〜Flutterのレンダリングとネイティブの境界を解剖する〜
naruogram
0
330
PumaからFalconに移行したRailsアプリケーションでの実践
falcon8823
0
350
graphql-ruby を Spinel で速くしようとした話
mtsmfm
0
140
Apple Intelligenceとオンデバイス時代の到来
yahir0
0
220
あなたの await、OS まで届いてる? strace で覗く JavaScript の非同期
hasutosasaki
1
2.2k
Будущее локальных LLM – Алексей Голобурдин, PythoNN
sobolevn
0
110
SODA - FACT BOOK(EN)
sodainc
1
210
Getting Started with Vibe Coding
miccheng
0
180
Long Living Tokens, Die, Die, Die! (or: The One Ring is Banned in Modern)
sylph01
0
410
Featured
See All Featured
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8.2k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.4k
We Are The Robots
honzajavorek
0
440
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Being A Developer After 40
akosma
PRO
92
590k
What's in a price? How to price your products and services
michaelherold
247
13k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
380
Building the Perfect Custom Keyboard
takai
2
950
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
20k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
450
Measuring & Analyzing Core Web Vitals
bluesmoon
9
1.1k
We Have a Design System, Now What?
morganepeng
55
8.4k
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 🍻
おしまい! お付き合いいただき ありがとうございました!!