こんばんは。新人konoです。
本当はDBの全文検索比較を載せようと思っていたのですが、準備が間に合わなかったのでPHPの小ネタでも。
レコードが700万件近くあるので抽出〜INSERT〜インデックス作成にかなり時間がかかってしまいまして。
なので、全文検索ネタは次回に回すことにします。
OSSの2大DBであるMySQLとPostgres、2大商用DBのOracleとDB2のそれぞれを比較しようと思っています。
で、PHPの小ネタでお茶を濁すことにしたのですが、とりあえず最近やられたネタになります。
・PHPの閉じタグは使わないか、ちゃんと閉じましょう!
(出来れば使わないようにしましょう)
閉じタグとは ?> のことですが、閉じタグの後に文字列を挿入したり、改行やら入れているとエラーの原因になるのでやめましょう。
実際に私がハマったのは、どこかで読み込まれていたphpファイルの 「?>」 の後に「半角スペース」と「改行」が入っていたために
header() 関数使ったタイミングでエラーで落ちるという現象でした。
スタックトレースの内容見ると「Cannot modify header information」と出力されていたのですが、header() 関数を使っている箇所を見ても特に問題なさそうだしと、しばらく悩みました。
閉じタグの後に文字列があると、PHPはHTMLヘッダに出力するらしく、その後にheader() 関数でHTMLヘッダを出力しようとしてエラーになっていたようです。
プチハマりました。
とりあえず、プロジェクトのソースを全部検索して駆逐しておきましたよ。
PHPのコードのみ記述しているソースでは閉じタグは不要なので、出来れば使わない方が無難です。
HTMLやJavaScriptとPHPのコードが混在している場合は閉じタグが必要なので、その際は?>EOFとする必要があります。
・strptime()、strftime()関数はWindowsに存在しないので注意
本番サーバはLinux、ローカルでの開発はWindowsという人がかなり多いと思いますが、ローカルでの検証でWAMP使う人というのも割と多いかと思います。
そういう時に注意したいのが、Windowsには存在しない関数です。
その一つがstrptime()関数で、あるコードの中でこの関数を使用していたため、Linuxの検証サーバでは動くけど、Windows上ではエラーになるという現象に悩まされました。
他にも、あまり使わないと思いますが、sys_getloadavg()関数やdio_tcsetattr()関数などもWindowsにはない関数なので注意が必要です。
こういった関数は使わないに越したことがないのですが、気付かず使っちゃったりしますよね。