[PHP] セーフモードについて

とある案件で、テストサーバではメール送信が行えるが、全く同じソースを本番サーバに持っていくと、メール送信処理が動かないという現象が起きた。PHPのセーフモードが原因だということはすぐ分かったのだが、ちょっとハマりそうになったので、忘れないようにメモする。

レンタルサーバ等の共有サーバでは、PHPのセーフモードを有効にしている場合があり、通常モードでは使用できる関数が、セーフモードでは制限を受けたり無効となる場合がある。影響を受ける関数の一部を例にあげると、以下のようなものがある。

  • fopen()
  • mkdir()
  • rmdir()
  • unlink()
  • chmod()
  • header()
  • mail()

今回の件では、mb_send_mail がこの制限に引っ掛かっていた。

具体的には、セーフモードでは同関数は第5引数が無効となるが、ソースの中ではセーフモードの判定をせず、mb_send_mail で第5引数を指定していたため、メール送信が行われなかったようだ。

尚、セーフモードの判定は下記方法で行える。

if ( get_cfg_var('safe_mode') ) {
    // セーフモード
} else {
    // セーフモードではない
}

トラックバックURL

http://mashimonator.weblike.jp/mt/mt-tb.cgi/93

コメント投稿フォーム