Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PHP でファイルシステムを作ろう

sji
April 13, 2021

PHP でファイルシステムを作ろう

- The slide used at a talk in PHPerKaigi 2021
- Write your own filesystems in PHP (via FFI and FUSE)

sji

April 13, 2021
Tweet

More Decks by sji

Other Decks in Programming

Transcript

  1. FUSE は(雑に分けたら) 2 パート libfuse libc libc FUSE Ext3 ...

    VFS ls -l /tmp/fuse ./hello /tmp/fuse Kernel Userspace NFS CC BY SA 3.0 Unported ( ) FUSE structure.svg ( ) User:Sven@Wikipedia ( ) https://creativecommons.org/licenses/by-sa/3.0/deed.en https://commons.wikimedia.org/wiki/File:FUSE_structure.svg https://commons.wikimedia.org/wiki/User:Sven
  2. macFUSE (Mac OS X) Mac 版の FUSE Linux の FUSE

    の API のスーパーセットを提供 Linux ⽤の FUSE 実装がわりと簡単に移植できる https://osxfuse.github.io/
  3. FUSE では OS とユーザプロセスが通信 あらためてさっきの図 libfuse libc libc FUSE Ext3

    ... VFS ls -l /tmp/fuse ./hello /tmp/fuse Kernel Userspace NFS CC BY SA 3.0 Unported (https://creativecommons.org/licenses/by-sa/3.0/deed.en) FUSE structure.svg (https://commons.wikimedia.org/wiki/File:FUSE_structure.svg) User:Sven@Wikipedia (https://commons.wikimedia.org/wiki/User:Sven) FUSE では VFS の処理振り分け先がユーザプロセスと通信 相⼿は FUSE の C ライブラリを使って作られたデーモン VFS からの open とか read とかの要求へ応答する
  4. たとえば、CData を避ける FFI で C の構造体へアクセスする際には \FFI\CData を通す \stdClass ばりに型としては何もない奴

    実⾏時 C の構造体のメンバが全部 \FFI\CData のインスタン スの動的プロパティとして⼊る IDE や静的解析などによる型の⽀援を殆ど受けられない
  5. WordPress implements Filesystem ファイルなので grep 記事データを検索できる ファイルなので sed で⼀括置き換えが可能 ファイルなので

    phpstorm から記事データを開ける ファイル操作をする全てのツールが WordPress の記事データへのアクセスに使える