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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
hideki kinjyo
PRO
December 20, 2025
Programming
0
58
#phperbiglt のLT
https://connpass.com/event/372021/
でのLT資料です
hideki kinjyo
PRO
December 20, 2025
Tweet
Share
More Decks by hideki kinjyo
See All by hideki kinjyo
手軽に積ん読を増やすには?/読みたい本と付き合うには?
o0h
PRO
1
210
symfony/mcp-bundleで、既存アプリケーションもお手軽にMCPサーバー化
o0h
PRO
1
89
組織もソフトウェアも難しく考えない、もっとシンプルな考え方で設計する #phpconfuk
o0h
PRO
10
5.4k
Composerが「依存解決」のためにどんな工夫をしているか #phpcon
o0h
PRO
1
650
Composerの依存解決 #phpstudy
o0h
PRO
0
160
「影響が少ない」を自分の目でみてみる
o0h
PRO
4
2.3k
PHPによる"非"構造化プログラミング入門 -本当に熱いスパゲティコードを求めて- #phperkaigi
o0h
PRO
0
1.8k
もう少しテストを書きたいんじゃ〜 #phpstudy
o0h
PRO
23
5.4k
『テスト書いた方が開発が早いじゃん』を解き明かす #phpcon_nagoya
o0h
PRO
9
4.3k
Other Decks in Programming
See All in Programming
今から始めるClaude Code超入門
448jp
7
8.4k
生成AIを使ったコードレビューで定性的に品質カバー
chiilog
1
240
AI Schema Enrichment for your Oracle AI Database
thatjeffsmith
0
250
LLM Observabilityによる 対話型音声AIアプリケーションの安定運用
gekko0114
2
420
Implementation Patterns
denyspoltorak
0
280
CSC307 Lecture 04
javiergs
PRO
0
660
Oxlintはいいぞ
yug1224
5
1.3k
なるべく楽してバックエンドに型をつけたい!(楽とは言ってない)
hibiki_cube
0
140
HTTPプロトコル正しく理解していますか? 〜かわいい猫と共に学ぼう。ฅ^•ω•^ฅ ニャ〜
hekuchan
2
680
CSC307 Lecture 07
javiergs
PRO
0
550
AI Agent Tool のためのバックエンドアーキテクチャを考える #encraft
izumin5210
6
1.8k
AI & Enginnering
codelynx
0
110
Featured
See All Featured
Become a Pro
speakerdeck
PRO
31
5.8k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
Believing is Seeing
oripsolob
1
53
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
200
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.8k
The Curse of the Amulet
leimatthew05
1
8.3k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
270
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
117
110k
Un-Boring Meetings
codingconduct
0
200
Optimizing for Happiness
mojombo
379
71k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
170
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
1
49
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 🍻
おしまい! お付き合いいただき ありがとうございました!!