ホーム > フォーラム > 開発 > コア開発 > stdout_buffer

stdout_buffer
投稿者: ohwada | 投稿日時: 2007/5/22 22:04 | 閲覧: 11465回
ohwada
バグ報告したら、あっさり仕様と片付けられた。

NOT output echo statement

仕様ならば、それは受け入れるとして。
これに関して、どこかに書いているんでしょうか。

あと、この機能をオフにするオプションは追加できないですか。
デバックのたびに、テンプレートを直すのは、ちと面倒。

コメント(6)

新しいものから | 古いものから | ネスト表示 | RSS feed
Re: stdout_buffer 
投稿者: tadashi | 投稿日時: 2007/5/22 22:10
tadashi
echo 書くの、便利ですけど、ちょっといまひとつなんで、
仕様として受け入れましょう。

ドキュメント整備は、これからボランティアでやりませんか?


Re: stdout_buffer 
投稿者: minahito | 投稿日時: 2007/5/22 23:29
minahito
Legacy はモジュールエリアへの描画は、すべて直表示と切り離されたレンダーバッファに出力するようにしています。そのうえで、 X2 の無法時代に可能な限りあわせて ob フィルターを使って表示を横取りしています。

しかし、しょせん再現では状況推測には限界があります。
今回のようにテンプレートを使うが echo で標準出力もしたい、ということになってくると、 Cube 的にはレンダーターゲットが2枚あるということです。これを事前推測で適切に処理するのは非常に困難です。

またこれは「機能」でもなく
流れの中で起きていることなので、ON/OFFとかいう話でもないです。

こういう命題自体、自分で想定したことがなかった...
テンプレートを使い、かつ、自由出力ね...うむむ...
元が X2 ですからね...やっぱ色々ありますね...

まっとうなドキュメントさえ追いつかなくて後回しになっているわけですが、さらにこういう想定外ケースにストライクなドキュメントがあるかといえば、「もちろん無い」です。

無いと困るでしょうけど
書いとけといわれても同じくらい困るのでユルしてください...
(ってか無理。。。)

こういう話を流さずに、みんなでまとめていくしかないと思います。(^^)

デバッグに関しては、テーマなりテンプレートなりに吐き出し口を作っておく手があります。テーマの上なり下なりにを出すようにしておくか、拡張コントロールを使って迂回出力させるなど、いくつか手はあると思います。
参考
Re: stdout_buffer 
投稿者: ohwada | 投稿日時: 2007/5/26 20:37
ohwada
引用:

デバッグに関しては、テーマなりテンプレートなりに吐き出し口を作っておく手があります。


print文デバックは、デバックの基本?なので、
標準の状態で、これが使えないと、開発者は不便じゃないですか。

最近の xoops.org 版だと、デバックモードにすると、
本来の表示の下に、いろいろ情報が表示されます。
ひとまず、そういう形を標準テンプレートにするといいのでは。

ただし、投稿フォームとかは、テンプレートでなく、
XoopsForm を使った echo 出力が多いですよね。
その場合は、本来の表示の下に、再度 投稿フォームが表示されて、混乱してしまいます。

別の考え方としては、
UNIX 風に、本来の標準出力と デバック用の出力を分けるという方法もありますね。
xoops_echo_error() というような関数を用意して、
$stderr_buffer に蓄積する。
Re: stdout_buffer 
投稿者: minahito | 投稿日時: 2007/5/27 15:41
minahito
引用:
ohwadaさんは書きました:
print文デバックは、デバックの基本?なので、


うーん、でも標準出力ですよ...?
そういうもんなんでしょうか

ohwada さんも書いてますが、 X2 でそれをやると、ひとつの出力が stdout/stderr を兼ねることになります。それが基本というのは、自分にはちょっと分かりません。PHP はそういう世界なんだと言われれば返す言葉は全くないんですが、だとすれば、今度は標準出力をキャプチャーして内部出力にする慣習を持つ X2 の実装が気になります。

PHP はもともとテンプレート的な環境ですよね。
すると標準出力は最終出力にまわす、というのが根っこのポリシーだと思います。
この最終出力にデバッグ出力を混ぜてしまうのが、デバッグの基本でしょうか?

最終出力にデバッグを乗せれば、迂回出力を準備する書く手間(5分くらい)が省略できるというのがせいぜいで、この考えは、当然各分野のプログラムに存在すると思いますが、いずれも「いいマナーとはいえない」という扱いになっており、たとえPHPでも「デバッグの基本」という格までには至らないのでは...と思うのですが...

引用:
標準の状態で、これが使えないと、開発者は不便じゃないですか。


Legacy/user/legacyRender/pm/stdCache と開発してきて、僕は特に不便とは感じなかったので、慣れた製作方法や個人の経験(要するに主観)が絡んでくると思います。自分の経験では、出力と同じレイヤーにデバッグ情報も出力する、というのは、先のとおり、モニターを組めないとき、モニターを組む時間が惜しいときには方法のひとつではあるかもしれないが、基本ではないだろう、という感覚を持っています。

PHP Web アプリケーションを、コンソールプログラムの延長ととらえるか、 Web ページというグラフィックを表示するものととらえるか、で解釈は変わるでしょう。XCubeは後者のスタンスをとっています。そのうえで Legacy は X2 の stdout を最終出力にも使うという慣習に対してフォローするために、(完全再現が不可能だったため)今の選択になっています。

引用:
UNIX 風に、本来の標準出力と デバック用の出力を分けるという方法もありますね。


そうですね、これか、ロガーだと思います。Legacy には X2 のロガーがありますが、 XCube にも簡単なロガーを持たせる考えはあります。

また、 Legacy が標準で持つより、開発者が開発用に preload 等で拡張したほうが好みにできる、というのもあると思うんですが...まぁその好みが print だ、ということになると、見事に仕様とバッティングして今回のようになるわけですけど (^^;;

でも debug_print とか作ればいい話ですしね...

あと PHP にはユーザー notice とかユーザー warning の機能がなかったでしょうか?
Re: stdout_buffer 
投稿者: ohwada | 投稿日時: 2007/6/2 15:37
ohwada
関連して、1つおかしいところに気づきました。

下記のスプリプトを実行すると、echo 文がテーマの欄外(上部)に表示されます。
XOOPS 2.0.16 JP では、OKです。

XOOPS/test.php

<?php
include 'mainfile.php';
include XOOPS_ROOT_PATH.'/header.php';

echo "XC2.1 では この行が正しい位置に表示されない";

include XOOPS_ROOT_PATH.'/footer.php';
exit();
?>
Re: stdout_buffer 
投稿者: fanrun7 | 投稿日時: 2007/6/3 9:25
fanrun7
ohwadaさん、
この件、以下で対応方法の回答をもらっていますので、紹介しておきます。

http://www.xugj.org/modules/QandA/index.php?post_id=1779

    投票(0)

    新しいものから | 古いものから | RSS feed
     
    To Top