パスワードを忘れた? アカウント作成
5096687 story
PHP

PHPのおそるべきバグレポート 34

ストーリー by hylom
ほかの言語のバグレポートでもこういうのはあるのだろうか 部門より
insiderman 曰く、

PHPの作者、Rasmus Lerdorf氏がプレゼンで「File useful bug reports」として紹介したバグレポートが面白いと話題になっている(PHPはバグレポートがバグッてる。だがそれがいい。)。

Webアプリの問題をPHPのバグとしてレポートしている、GOTOの実装をバグと主張するもの、ただの文句、仕様の変更を一方的にバグとして元に戻せと主張するものなど、どれも斜め上のものである。

ちなみに、レポートされるバグの3分の1はバグではないとのこと。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • タイムリーなことに、ちょっと前にSquirrelMail を PHP5.4 に対応させた [srad.jp]のですが、原因を一言出言うと「htmlspecialchars の仕様変更のせいで、Shift_JISやEUC-JPで表示するサイトでは、エンコーディングを明示的に指定しないhtmlspecialcharsの結果が空になる」というものです。

    機械的な置換で容易に修正対応はできましたが、そんな泥臭いパッチをSquirrelMailの方に投げる気にもなれず、もうまさにPHPの仕様の変更を「仕様バグ」だと主張したい気分です…

    EUC-JP/Shift_JISのサイトは、PHP5.3を使い続けるか、UTF-8になんとか移行するか、どちらかがまあ建設的な対応でしょうね。

    ていうか、mbstring を入れてる場合、内部に internal_encoding という設定があるんだから、文字エンコーディングに関係する処理で internal_encodingを無視するのは仕様バグ以外の何者でもないだろうに…

    • 似たような感じで、
        "09223372036854775808" == "9223372036854775808"
      の結果がマイナーバージョンアップで変更されました。 [php.net]
      実害はないしバグレポートもされてるのに、なんだかな、と思います、

      親コメント
      • 「===」では試した?
        というか元々PHPでは数値比較以外では「==」は使っちゃ駄目って常識だよね。
        (多言語から移ってきた人はまずここの比較演算子の糞仕様で苦労する。)

        親コメント
        • by Anonymous Coward

          "09223372036854775808" === "9223372036854775808" // 文字列比較
          これでFALSEが返ってくるのはそうだけど、

          "09223372036854775808" == "9223372036854775808" // 数値比較 (と思わせて、LONG型に変換できないから文字列比較)
          これで、以前はTRUEだったので、FALSEにしちゃいました…。

          もしかしたら、今後、余白が入った文字列比較で、
          " TEST" === "TEST" // 文字列比較
          の結果がTRUEになる日が来たりするのだろうか…。

    • by Anonymous Coward

      元仕様も未定義なうえ振る舞いを変更したことも明記されていない物を仕様変更と言うのは

      • いや、htmlspecialchars のリファレンス [php.net]には

        encoding
                変換に使用されるエンコーディングを指定します。 省略した場合のデフォルト値は、PHP 5.4.0 より前のバージョンでは ISO-8859-1、そして PHP 5.4.0 以降では UTF-8 となります。

        と仕様変更が明記されていますよ。その後に

        この関数を使ううえでは ISO-8859-1 と ISO-8859-15、 UTF-8、cp866、 cp1251、cp1252 そして KOI8-R は事実上同等です。 string 自体がそのエンコーディングにおける有効な文字列である限り、 これらのエンコーディングでは htmlspecialchars() の影響が及ぶ文字がみな同じ位置にあるからです。

        というもっととんでもない大嘘が書かれてたりしますが…
        日本以外でも、欧州の、ISO-8859-1で、英語以外のラテン文字(0xA0~0xFEの文字)を使ってるサイトを作っている人も同じようにはまるはず。
        でも、PHPの開発コミュニティはこれを「既存のコードに影響を及ぼさない変更」だと信じてるんでしょうねぇ…

        親コメント
      • 元仕様も未定義なうえ振る舞いを変更したことも明記されていない物を仕様変更と言うのは

        じゃあ、やっぱりPHPがバグなんだよ。

        # 元ネタに習い、糞野郎とでも付けておきましょうか?

        親コメント
      • まぁ、specialchars なんていう、仕様・定義を参照したら選びそうにない名前な時点でお察し。

        親コメント
    • by Anonymous Coward

      問題を抱える個々人に言うつもりはありませんが、
      これだけ多くの問題点が指摘されている言語で、
      これだけ需要があるんですから、
      PHPの分派を作ろうという人々が現れないんですかね。

      • by Anonymous Coward

        PHPのそういうところを気にする人は、PythonなりRubyなりに行ってしまうんかなと思います

        • by Anonymous Coward

          Rubyも行き当たりばったりな言語だけど

          • by Anonymous Coward

            Rubyは将来の方向性は行き当たりばったり感があるけど、==の仕様とか細かいところはだいぶましな感じ。

        • by Anonymous Coward

          じゃあもうPHPの分派はあり得ないということですね

          わかりました

    • by Anonymous Coward

      エンコーディングを明示的に指定すればいいじゃん

    • by Anonymous Coward

      エンコーディングを明示してないアプリが悪い。
      徳丸本に書いてあるだろ。それすらしてない糞アプリなんて使わない方が良い。

      • by Anonymous Coward

        IEみたいに閉じタグを補完してくれないのはバグだと言うような話ですな。

        • by Anonymous Coward

          公式サイトからして閉じタグ書くとバグる [php.net]とか言ってる連中ですよ。

          いや解るんですがどこまで Laziness なんだと

          # phpではなるべくシングルクォートとダブルクォートを使い分けてますがPerlでは連結演算子使いまくります(何

  • そもそも (スコア:2, おもしろおかしい)

    by Anonymous Coward on 2012年07月10日 16時12分 (#2190539)

    仕様が意図不明なんだから、バグの指摘なんてできないよ!

    • Re:そもそも (スコア:2, 興味深い)

      by Anonymous Coward on 2012年07月10日 16時33分 (#2190549)

      異常値にfalseが帰ってきてたのが突然とあるバージョンから0になったり-1になったりNULLになったりするのがなんだって言うんですか!

      親コメント
      • by Anonymous Coward on 2012年07月10日 18時14分 (#2190630)

        PHP Userはそれを仕様と言う。

        # の?
        # それとも仕様などそもそも存在しないから感じろ、ってこと?

        親コメント
    • by Anonymous Coward

      「GOTOの追加は仕様バグだ」という指摘は真っ当なものじゃないかと。

      何か合理的な説明ができる人がいれば別だけどさ。

      • by JULY (38066) on 2012年07月10日 16時50分 (#2190555)

        まぁ、全部オブジェクト指向で書けば良いのかもしれないけど、関数内で後始末の処理をしたい時に、finally が無いのでその代わりに、という要望はあるかなぁ、と。

        と思ったら、実践されている方 [hatena.ne.jp]がいらっしゃった。

        親コメント
      • by rti (659) on 2012年07月11日 0時20分 (#2190868) ホームページ

        perlやrubyとかの redo とかをつかったクソなコードを移植するときとかには有効だよ^^
        do{ }while(0);で無理もできるけど空ループが増えたりしていまいちだし。

        ようは使いようでしょ。

        --
        by rti.
        親コメント
      • by Anonymous Coward

        飛び先が関数内とかに束縛される言語であれば、余程の超絶コードでなければgotoも問題無いんですが、
        PHPという環境ではちょっとヤバそうな香りがしますね…

    • by Anonymous Coward

      標準関数の引数の一貫性の無さにぶち切れそうになるのは私だけですかね・・・

      # 慣れましたけど・・・

      • by Anonymous Coward

        歴史的な理由によりどうたらこうたら

    • by Anonymous Coward

      オンラインゲームなんて細かい仕様かいてないのにバグだって、みんな結構指摘してるよね。
      みんな脳内仕様があるに違いない

      • by Anonymous Coward

        http://www.playonline.com/ff11/polnews/news15267.shtml [playonline.com]
        戦闘中にPTを解散するのはシステムの意図に反する行為です。何処にも仕様として明記されてませんし実際に普通のクライアント使ってもPTを解散できますが、だから何だって言うんです!

        • by Anonymous Coward

          タイミングを決めてうまく解散しないとDUPできないわけだが...。なんでパーティの解散だけをことさらあげつらって言うかな。最初は不具合と気づかなかっただろうが、それに続く900人ほどのお調子者はわかっていてやったに決まっているじゃない。

          • by Anonymous Coward

            それがおまえの脳内仕様か?

  • ずいぶん優秀なバグレポートのような気がする…

  • by Anonymous Coward on 2012年07月11日 3時50分 (#2190908)

    参照先を読んだのだが、どこが「エスプリの利いたこと」なんだ?単に話がかみ合ってないだけで互いのイライラ感が伝わるだけなんだが。
    訳文だからか?英語ネイティブでないので英語読んでもおいらにはもっと伝わらんだろうが・・・
    そもそもPHPの作者が返事しているの一部じゃん。

    しかしPHPはあちこちでぼろ糞にけなされているのに、ここまで使われているのが不思議。
    お気楽お手軽なのはよいと思うけどね。

typodupeerror

にわかな奴ほど語りたがる -- あるハッカー

読み込み中...