2012-07-24 8 views
7

PHP整頓拡張子は例えば、コールバックとしてPHP output bufferingDocsで動作する機能ob_tidyhandlerDocsがありますob_tidyhandlerを動的に設定する方法は?

ob_start('ob_tidyhandler'); 

私はしかし、私はその出力バッファ用のセットアップのデフォルト設定オプションへの道ブロックに当たっています、Tidyのがa lot of configuration settingsDocsを持っていることを知っています折り返し電話。

TidyのPHP関数のほとんどは、整然とした文書やオブジェクトを参照していますが、出力バッファリングではアクセスできないものがあります。

構成設定はtidy.default_configですが、実行時には変更できないため、あまり動的ではありません。

コールバックを動的に設定できるかどうかは誰にも分かりますか?私は自分自身でコールバックを書いたことを覚えています。すべての出力を集めて、tidy_repair_stringDocsへの呼び出しでそれを修復し、配列としての設定を受け入れます。しかし、私はそれを行う必要はありませんし、出力バッファの設定を渡すだけでいいと思った。

答えて

10

私はきちんとした拡張機能のコードを簡単に見てきました。出力バッファハンドラの設定を変更する方法があります。

つまり、それはいいえ方法ではありません。明らかに将来のバージョンで変更されるかもしれないコードの機能を利用しています。

バッファ処理を処理する関数はphp_tidy_output_handlerで、line 1191ではマクロTIDY_SET_DEFAULT_CONFIGを呼び出します。

tidy.default_configが設定されていない場合、マクロは何も行いません。設定されている場合は、設定ファイルがディスクから読み込まれ、オプションが解析されます。

設定ファイルは出力バッファの解析中にをロードされているので、解析が始まる前に、あなたのPHPスクリプトから設定ファイルを変更することが可能です。

これは、tidy.default_config = /file/writable/by/phpを作成し、必要なオプションを含むようにこのファイルを動的に更新する必要があることを意味します。 (私はそれが素敵な方法ではなかったあなたに言った)。


すぐに問題が発生することがあります。潜在的な競合状態があります。

2つのスクリプトが異なるオプションを必要とし、両方が同時に実行される場合、スクリプトの1つが間違った設定を受け取る可能性があります。

ファイルは明らかに随時変更されるようには設計されておらず、拡張オプションコードに続く可能性があるため、設定オプションを挿入するための他の利用可能なパスはありません。

  • 新しいTidyDocが作成されます。
  • 複数の設定フラグが設定され、+ default_configがロードされました。
  • バッファが解析されます。

申し訳ありませんが、私は悪い知らせを送っています。

最適な解決策は、ドキュメントオプションを完全に制御できるカスタムのob_startコールバックを使用することです。

編集:

は、ブレーンストーミングのビットを持っていたし、これを回避するためにいくつかのことを試してみました。すべてが失敗で満たされています。

スクリプトごとの値を返すためにregistering a custom stream wrapperを試してみました。tidy.default_config = tidy://configを設定しました。ストリームラッパーはconfigローダーによって解決されず、これは機能しません。

正しくテストできなかったことは、ディレクトリ単位の設定.user.iniまたは[PATH=] iniセクションです。これらは両方ともCGI/FastCGI SAPI(FPMではなく)でのみ利用可能です。私はこれがおそらくあなたを助けないと思う。

+1

悪い知らせを届けるのはそうではありません。すでに私が期待していたドキュメントからはうまくいきませんでしたので、私はあなたに大きな貢献をした第二の意見を得ることも尋ねました。これを調べる時間をとってくれてありがとう。機能要求としてそのコールバックへのオプションに対する新しい設定/コンテキスト/方法を尋ねることを考えるのはおそらく価値があります。そうすれば、実行時にこれをよりよく制御することができます。 – hakre

+0

X-Ref:https://github.com/leight/php-src/commit/42ba66ff4e427a28e2e652692a4a10cec8b79df2 – hakre

関連する問題