本番環境でPHPが動かない場合は,エラーを表示させます

PHPを使用して、いざ本番サーバにアップしてみたら全然動かないなんてことは、よくあります
自分の体験から実際に遭遇したトラブルをメモしておきます

開発環境では、動いていたのに本番では、画面が真っ白になる

画面が真っ白で何も表示されない」 これは、内部でエラーが発生しています
まずは、落ち着いてエラーを表示させる設定にします

エラーを表示できていない場合は、phpiniを編集するか、.htaccessを設置します

私の場合は 本番サーバで phpiniがいじれなかったので .htaccessを設置する事にしました

.htaccessに以下の2行を加えました
php_value error_reporting 30711 #NOTICE(軽度のエラー)を非表示に
php_flag display_errors on #PHPのエラーを表示する

require_onceのパスを正しく通す

エラーを表示させたら、画面が真っ白になるなどは,include_onceやreqire_onceなどでファイルが開けないとか PHPのタグの閉じ忘れなどが多いように感じます

私の場合は、reqire_once関数のパスがうまく通っていなかったようです

DBへのパスがうまく通っていなかったので
require_once('./db/db_pass.php');
というパスを
require_once realpath(dirname(__FILE__)).'./db/db_pass.php';
のように書き換えると正常に動きました

本番サーバがマルチバイト文字を正常に処理してくれない

次に遭遇したトラブルがこれ!
例えば、'あ' ← これは1文字としてカウントしてほしい
実際には、'あ' ← 2文字で計算されていました

これも「.htaccess」に書き込んで対処しました
#「mbstring」関係の設定
php_flag output_buffering OFF
php_value output_handler none
php_value default_charset UTF-8
php_value mbstring.language Japanese
php_flag mbstring.encoding_translation OFF
php_value mbstring.http_input auto
php_value mbstring.http_output UTF-8
php_value mbstring.internal_encoding UTF-8
php_value mbstring.substitute_character none
を書き加える事で対処

追記 : mb_関連の関数に文字コードをちゃんと指定していない箇所があったのでそれも修正しました

パーミッションの設定

書き込みするファイルやフォルダ」は正しいパーミッションにしてやる必要があります

私の場合 PHPファイルは 「755」で書き込むファイルは「777」で設定してます

chmod関数が使えない

パーミッションを変更する関数 chmod関数ですが・・・
私の環境で chmod関数を使うとエラーになりました

ネットで色々調べたら・・・[system関数]を使えとかいろいろ書いてありましたが
私の場合、「chmod関数」はコメントアウトして使わないことで対応しました

本番環境でのPDOでのトラブル

ローカル(windows)環境では、動いていたのに 本番環境ではデータベース(MySQL)にデータが入らないという事がありました

WINDOWS環境でPDOを使用するとINT型(数字)は'1'とかでも入るけど
LINUXでは INT型は 1 という風にしないとNG!
数字を '5' などのように シングルコーテーションで囲むとINT型のカラムには、絶対にデータが入らないようです

私の場合は テーブルを作成する時点でミスがあったようで INT型データに '5' を自動的に入れるようにしていたのが原因でした

<? ?>はサーバーによっては動きません

これは私は体験してませんが・・・・
【<?php ?>】は 省略形として 【<? ?>】のように書くことができます
しかし サーバーによっては 省略形だと動かないのでなるべく使用するのは、控えたほうがいいでしょう
 

あとがき

本番サーバと開発環境とでは、かなりの差があるのでトラブルが発生しやすく
自分の場合も いっぱいありすぎて書ききれません!
思い出したり、新たなトラブルが発生したら、このページに書き足していくことにします



Warning: mkdir() [function.mkdir]: No space left on device in /home/www/app/ad/bottom_sitemix.php on line 252