Issue with ob handler context and execution in PHP
まだ誰も着手していません。
- 主要言語
- C
- スター
- 40.4k
- フォーク
- 8.2k
- 平均マージ
- 2日 13時間
- マージ済み PR(30日)
- 96
説明
Description
I am encountering an issue while working with the "ob_start" function in PHP and the callback parameter.
Description:
When utilizing ob_start("system") to initiate output buffering with the "system" callback in the provided code snippet, I've observed that the zend_get_executed_filename function fails to return the correct file name when the "system" zend function is executed.
This discrepancy occurs particularly when a flush operation happens during php_request_shutdown.
<?php
ob_start("system");
?>
Observations:
Upon debugging, I've noticed the following:
- Omission of the ob_flush() function call results in the flushing of output handlers during php_request_shutdown.
- Prior to the invocation of php_output_end_all, the EG(current_execute_data) variable is set to NULL.
- Consequently, when the "system" function is executed, it operates without the context of the current executed file name, leading to unexpected behavior.
Expected Behavior:
I expect the zend_get_executed_filename function to accurately retrieve the file name, even in scenarios involving flush operations during php_request_shutdown. Is this feasible?
PHP Version
PHP 8.3.3
Operating System
No response
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
ob_start("system") が使用されたときの php_request_shutdown から php_output_end_all までの流れを追跡することから始め、system が zend_get_executed_filename を呼び出す前に EG(current_execute_data) がどのように扱われるかを調べてください。PHP 8.3.3 の例を ob_flush(); ありとなしで再現してください。done は、シャットダウン時のフラッシュ中も実行されたファイル名が正しいままであることを意味します。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- c, php
- 領域
- backend
- issue の種類
- バグ
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 35/100