😎

【PHP】fwrite と fread で HTTP/2 フレームを送受信する

2024/07/05に公開

コードを単純にするために fsockopen を使ったコードに書き換え。HEADERS と DATA フレームを取得できるものの、スクリプトを連打するとスクリプトがハングしたり、データを正しく得られない状況になる。

client.php
<?php
# h2c テストサーバー
# https://zenn.dev/masakielastic/articles/530f9751697ed6

# https://gist.github.com/masakielastic/8840124754b38663373f8f74d6f162d4
require_ 'h2frames.php';

$fp = fsockopen('localhost', 8000);

fwrite($fp, frames('pri'));
fwrite($fp, frames('settings'));
$ret = fread($fp, 128);
dump($ret, 'settings');

fwrite($fp, frames('ack'));
$ret = fread($fp, 128);
dump($ret, 'ack');

fwrite($fp, frames('headers'));

$ret = fread($fp, 128);
dump($ret, 'headers+data');

fclose($fp);

Discussion