$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
phperbiglt.pdf
Search
hideki kinjyo
PRO
December 20, 2025
Programming
0
5
phperbiglt.pdf
hideki kinjyo
PRO
December 20, 2025
Tweet
Share
More Decks by hideki kinjyo
See All by hideki kinjyo
手軽に積ん読を増やすには?/読みたい本と付き合うには?
o0h
PRO
1
170
symfony/mcp-bundleで、既存アプリケーションもお手軽にMCPサーバー化
o0h
PRO
1
54
組織もソフトウェアも難しく考えない、もっとシンプルな考え方で設計する #phpconfuk
o0h
PRO
10
5k
Composerが「依存解決」のためにどんな工夫をしているか #phpcon
o0h
PRO
1
610
Composerの依存解決 #phpstudy
o0h
PRO
0
150
「影響が少ない」を自分の目でみてみる
o0h
PRO
3
1.9k
PHPによる"非"構造化プログラミング入門 -本当に熱いスパゲティコードを求めて- #phperkaigi
o0h
PRO
0
1.8k
もう少しテストを書きたいんじゃ〜 #phpstudy
o0h
PRO
23
5.4k
『テスト書いた方が開発が早いじゃん』を解き明かす #phpcon_nagoya
o0h
PRO
9
4.2k
Other Decks in Programming
See All in Programming
令和最新版Android Studioで化石デバイス向けアプリを作る
arkw
0
410
著者と進める!『AIと個人開発したくなったらまずCursorで要件定義だ!』
yasunacoffee
0
140
AtCoder Conference 2025「LLM時代のAHC」
imjk
2
510
チームをチームにするEM
hitode909
0
340
組み合わせ爆発にのまれない - 責務分割 x テスト
halhorn
1
150
C-Shared Buildで突破するAI Agent バックテストの壁
po3rin
0
390
生成AIを利用するだけでなく、投資できる組織へ
pospome
2
350
Claude Codeの「Compacting Conversation」を体感50%減! CLAUDE.md + 8 Skills で挑むコンテキスト管理術
kmurahama
0
300
S3 VectorsとStrands Agentsを利用したAgentic RAGシステムの構築
tosuri13
6
320
dotfiles 式年遷宮 令和最新版
masawada
1
790
從冷知識到漏洞,你不懂的 Web,駭客懂 - Huli @ WebConf Taiwan 2025
aszx87410
2
2.7k
DevFest Android in Korea 2025 - 개발자 커뮤니티를 통해 얻는 가치
wisemuji
0
150
Featured
See All Featured
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.3k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.8k
Reflections from 52 weeks, 52 projects
jeffersonlam
355
21k
A better future with KSS
kneath
240
18k
Speed Design
sergeychernyshev
33
1.4k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.6k
Balancing Empowerment & Direction
lara
5
800
Building an army of robots
kneath
306
46k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
1
100
Measuring & Analyzing Core Web Vitals
bluesmoon
9
710
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.1k
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 🍻
おしまい! お付き合いいただき ありがとうございました!!