2011-12-21 12 views
1

私の開発サーバはPHP 5.3.8でスムーズにPHP Webアプリケーションを実行します。 5.3.8にPHP 5.2.6から生産サーバーを私のPHPをアップグレードするときPHPコードが別のサーバで動作していない

はしかし、私は、このアプリケーションでいくつかの問題を得た5.2へのロールバックを注文する私を強制的に(非推奨機能ereg_replacedate.timezone設定が行方不明についての苦情) .6。

1つの5.3.8サーバで同じPHPコードを正常に動作させるにはどうすればいいですか?この動作の一般的な原因は何ですか?助言がありますか?

+5

おそらくエラー処理のレベルがPRODサーバVSあなたのdevの上で異なっている - つまり、同じ問題、DEV上のほんの一部は表示されません。 – ChelseaStats

答えて

2

両方のサーバーでphp.ini(PHP構成ファイル)にアクセスしてください。 "; display_errors"行を探します

それ以降の行を比較してください。

これらの変数の3つの設定で使用可能なオプションは次のとおりです。

; display_errors 
; Default Value: On 
; Development Value: On 
; Production Value: Off 

; display_startup_errors 
; Default Value: Off 
; Development Value: On 
; Production Value: Off 

; error_reporting 
; Default Value: E_ALL & ~E_NOTICE 
; Development Value: E_ALL | E_STRICT 
; Production Value: E_ALL & ~E_DEPRECATED 
+1

注:私たちがOPで読んだことから、設定は間違った方法です。プロダクションサーバーはサイレントでなければなりませんが、開発サーバーには激しいエラー報告が必要です。 – Kaii

+0

ありがとうございます。プロダクションサーバには 'display_errors = On'があります。明らかに、それは誤った設定のようです。しかし、私が経験しているように、 'STDOUT'へのこれらのメッセージがアプリケーションを実際にクラッシュさせるかどうかはわかりません。彼らは単にコンソールメッセージとして表示されませんか? – Gruber

+1

ログファイルにエラーを記録できます。ロギングエラーの設定は、 "php.ini"のエラー報告行のすぐ下にあります。設定のオプション値に従います。 '; log_errors ;デフォルト値:オフ ;開発値:On ;製造値:On ' – IvenMS

1

PHPはJavaやC#でも同じように進化する言語なので、一部の機能が廃止予定でない場合はドキュメントをチェックし、それに応じてコードを更新する必要があります。

また、両方のサーバーでPHPの設定が同じであることを確認する必要があります。

あなたがereg_replaceドキュメントをチェックした場合、この宣伝文句があります:警告この関数

はPHP 5.3.0で非推奨となりました。 に依存すると、この機能は非常にお勧めできません。

+0

はい、設定ファイル 'php.ini'は主要な疑わしいものです。私はこれを調査するのにもっと時間をかけます。プロダクションサーバのロールバックを避けるために、_new_サーバにアプリケーションをデプロイし、アップグレードが正常に終了したら古いものを廃止します。 – Gruber

3

お客様のエラーレベル設定はお使いのコンピュータでは異なります。

FYI:

  • ereg_replaceは廃止し、それを使用しているが、高度

  • を推奨された日付/時刻関数を呼び出すたびに/ タイムゾーンが有効でない場合にE_NOTICEを発生させます。あるいはE_WARNINGメッセージシステムを使用している場合 設定やTZ環境変数

+0

はい、これが可能です。残念ながら、私は事態が激しくなったときに速すぎると考える必要があったので、ロールバック前に 'php.ini'の設定がどのように見えるか調べる時間がありませんでした。しかし、設定をアップグレードする前に 'error_reporting = E_ALL&〜E_NOTICE'となっていましたが、アップグレードによってその設定が変更されることはありません。助けてくれてありがとう! – Gruber

1

は、あなたが完全にありますあなたの開発サーバーがPHP 5.3.8を実行しているということは確実ですか? ereg_*すべての関数はPHP 5.3.Xでは推奨されていません。したがって、警告なしでPHP 5.3でコードを実行するべきではありません。その場合は、開発サーバーが運用サーバーより多くの警告(例:E_ALL)を生成する必要があるため、それは不思議です。 php.iniのエラー報告設定を確認してください。 (display_errorserror_reporting

はあなたが本当にereg_*のいずれかのoccuranceを検索し、preg_*同等でこれらの式を置き換える必要があり、それが飛ぶようにします。

date.timezoneはphp.iniに設定できます。その後、私はあなたのPHP 5.2.6コードが5.3.6で動作すべきではない理由はそれほどありません。

+3

ereg_関数は依然として利用可能です。PHPは近い将来に関数が実際に削除されるため、警告を出します。 – RageZ

+1

@RageZは "廃止予定"の正しい定義です。それにもかかわらず、エラーメッセージを単に抑制するのではなく、関数呼び出しをpregに置き換えることにより、実際に廃止予定に反応するのは正しい行動コースです。 – Kaii

+0

ありがとうございます。私が見たことから、 'ereg_replace'はPHP 5.3.8でも利用可能ですが、非常に落胆しました。私はそれを当然取り除きます。 – Gruber

関連する問題