Skip to content

Instantly share code, notes, and snippets.

@masakielastic
Created July 18, 2025 10:15
Show Gist options
  • Save masakielastic/b64a171383ede02f378ddf55d811401c to your computer and use it in GitHub Desktop.
Save masakielastic/b64a171383ede02f378ddf55d811401c to your computer and use it in GitHub Desktop.
PHPビルトインサーバー改善:関数調査まとめ

PHPビルトインサーバー改善:関数調査まとめ

  1. 調査対象リスト(一次まとめ)

関数名 現状カテゴリ
normalize_vpath プレフィックス抜け
append_http_status_line プレフィックス抜け
add_response_header プレフィックス抜け
cli_header_value_dtor 責務が曖昧
get_last_error 責務が曖昧
status_comp 責務が曖昧
destroy_request_info 責務が曖昧・空実装
cli_concat_persistent_zstr_with_char 責務が曖昧・冗長名

  1. 各関数の詳細整理

1. normalize_vpath

  • 役割: 仮想パス正規化(/統一、.や..除去、デコード)

  • 呼び出し元: php_cli_server_client_read_request_on_path

  • 課題: static + プレフィックス抜け

  • 改善案:
    php_cli_server_normalize_vpath にリネーム(責務・モジュール明確化)


2. append_http_status_line

  • 役割: HTTPレスポンスのステータスライン生成

  • 呼び出し元: sapi_cli_server_send_headers, php_cli_server_send_error_page, php_cli_server_begin_send_static

  • 課題: static + プレフィックス抜け

  • 改善案:
    php_cli_server_append_http_status_line にリネーム


3. add_response_header

  • 役割: ヘッダー1件をkey/value分解しPHP配列に格納

  • 呼び出し元: PHP_FUNCTION(apache_response_headers)

  • 課題: static + プレフィックス抜け

  • 改善案:
    php_cli_server_add_response_header
    もしくはSAPI共通用途なら php_sapi_add_response_header


4. cli_header_value_dtor

  • 役割: php_cli_server_request->headers の値(zval)解放

  • 呼び出し元: php_cli_server_request_ctor(HashTable初期化時のデストラクタ登録)

  • 課題: cli_ だけでは文脈不明、プレフィックス一貫性なし

  • 改善案:
    php_cli_server_header_value_dtor
    さらに限定するなら php_cli_server_request_header_value_dtor


5. get_last_error

  • 役割: errno→文字列(strerror)変換+ヒープ複製

  • 呼び出し元: php_cli_server_content_sender_pull, php_cli_server_send_error_page

  • 課題: static汎用名、責務/用途が不明確

  • 改善案:
    php_cli_server_get_last_error
    さらに明示したければ php_cli_server_last_os_error_string


6. status_comp

  • 役割: HTTPステータスコード(int)比較(bsearch用)

  • 呼び出し元: get_status_string

  • 課題: staticユーティリティ名で意味が広い

  • 改善案:
    php_cli_server_status_code_pair_comp
    あるいは php_cli_server_http_status_code_comp


7. destroy_request_info

  • 役割: 現状空実装(歴史的経緯?)

  • 呼び出し元: php_cli_server_request_shutdown, php_cli_server_dispatch

  • 課題: 名称だけで実体が無い、TODOコメントあり

  • 改善案:
    本当に不要なら削除
    インターフェース都合で残すなら「NOPである旨」をコメントで明記+ php_cli_server_ プレフィックスに


8. cli_concat_persistent_zstr_with_char

  • 役割: persistentなzend_stringバッファの安全な拡張

  • 呼び出し元: HTTPパース関連関数(URL, ヘッダー名, ヘッダー値の連結)

  • 課題: cli_のみでモジュール特定しづらい、冗長な命名

  • 改善案:
    php_cli_server_zstr_persistent_append
    または php_cli_server_append_to_persistent_zstr


  1. 改善方針まとめ

● プレフィックス統一

  • php_cli_server_ で一貫

  • SAPI共通・将来拡張なら php_sapi_ プレフィックスも検討

● 責務・用途明示

  • データ型や構造体、目的を名前に反映(header, request, error など)

● 空実装・曖昧責務

  • 歴史的な名残・インターフェース用の空関数は本当に不要なら削除

  • 残すなら「NOP」「将来用途」などコメントで明記

● 命名ルール例

役割例 命名例
正規化 php_cli_server_normalize_vpath
ヘッダー追加 php_cli_server_add_response_header
値解放デストラクタ php_cli_server_header_value_dtor
ステータス比較 php_cli_server_status_code_pair_comp

  1. 推奨次ステップ

  • 各関数のリネーム・コメント整理(PRの準備)

  • 設計意図・命名ルールをドキュメント化
    (例:CONTRIBUTING.md や internal_api.md など)

  • 将来的なAPI/内部構造整理のたたき台として本リストを随時アップデート


  1. 今回の整理結果の活用例

  • リファクタ設計レビュー資料

  • チーム向け命名ガイドライン案

  • APIドキュメントやOSS提案時のエビデンス

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment