_fake (お題:納涼!ほんとにあった怖いコード)
納涼!ほんとにあった怖いコード(by CodeIQ×はてな)
↓↓↓ ここに君が見たクソコードを書こう!! ↓↓↓
(日本語版のソース中)
htmlspecialchars_decode_fake();
(英語版のソース中)
htmlspecialchars_decode();
↑↑↑ここまで!!↑↑↑
むかし、ある同僚が私に言った。
外注したPHPコードのバグが取れない。
「日本語版」は動くのに「英語版」は動かない。
「業者の開発環境」ではどちらも動くのに、「本番環境」では、『英語版だけ』が動かない。
業者は「鋭意調査中ですが、原因不明です」の繰り返し。
埒が明かない。
数週間が過ぎてしまった。
・・とのことだった。(直接の担当ではなかったが、私はPHPを少しかじっていた。その場には、ほかにPHPコードが読める人は、いなかった。)
とりあえず見てみる・・・エラー発生箇所を探してみると、
htmlspecialchars_decode();
なる関数を発見!
この関数はマニュアル↓
http://php.net/manual/ja/function.htmlspecialchars-decode.php
にあるとおり、PHP 5 >= 5.1.0 で使える関数。
業者の開発環境はPHP5だが、当時「本番環境」はPHP4だったので、この関数呼び出しがエラーを起こしていたわけだ。
ではなぜ「日本語版」は動いていたのか。
※該当箇所を探してみると
htmlspecialchars_decode_fake();
なる自作関数が呼ばれていた。
"_fake"
いや、fakeでも何でもいいのだが・・。
これで「鋭意調査中」「原因不明」と繰り返すような業者に依頼していることが怖かった。