気軽に読めるPHP入門書・PHPスクリプトが動かないときの原因と対策などを紹介します。

  1. PHPエラーの原因と対策
  2. 19 view

PHPスクリプトが動かないときにチェックするphp.iniの設定

 PHP設定ファイル(php.ini)の主な設定項目をまとめます。デフォルトの設定ではうまくいかないので変更した方が良い項目や、変更してはいけない項目があります。基本的には設定に依存しないコードを書くのが理想ですが、作成したPHPスクリプトの動作がおかしい場合など、以下の設定項目を調べてみてください。

●display_errors — エラーを画面に出力するか
既定値:Off
→ レンタルサーバーでは通常はOffなのでエラーメッセージが表示されない。

【関連記事】
「HTTP 500 内部サーバー エラー」と表示されるとき


●error_reporting — エラーの出力レベル
既定値:E_ALL
→ 大量のエラーメッセージが表示されたときなどに設定。

【関連記事】
「Notice: Undefined variable:」と表示されるとき
急に大量のエラーメッセージが表示されたとき


●date.timezone — 日付・時刻関数で使われる既定のタイムゾーン
既定値:空
→ 「Asia/Tokyo」と設定しないと日付・時刻関数が日本の時刻を指しません。

○設定例
date.timezone = Asia/Tokyo

【関連記事】
date関数の時刻が正しく表示されないとき


●default_charset — 既定の文字コード
既定値:設定なし
→ 文字化け対策の1つ。

【関連記事】
PHPスクリプトが文字化けするとき


●SMTP — メール送信に使うSMTPサーバー
既定値:localhost
→ ローカルコンピュータからのメール送信に外部SMTPを使う場合はユーザー名とパスワードを追記。

【関連記事】
外部のSMTPサーバーを使いたいとき


●mbstring.internal_encoding — 内部文字エンコーディング
既定値:NULL
→ 設定しないとマルチバイト関数がうまくいかないことも。

 マルチバイト関数で使われる既定の文字コード(例:UTF-8)を指定します。mb_internal_encoding関数で設定することもできます。文字コードは、個別のマルチバイト関数のパラメータで指定することもできます。

【関連記事】
文字数のカウントがおかしいとき
mb_send_mail関数によるメールの文字化け


●mbstring.language — mb_send_mail関数で使う言語
既定値:neutral
→ mb_send_mail関数を使って日本語のメールを送信する場合は「Japanese」に設定します。


●extension — ロードする拡張モジュール
既定値:設定なし
→ コメントになっていると「Call to undefined function」エラーの原因に。

 「;extension=php_mysql.dll」のようにコメントいなっていると、そのモジュールが読み込まれず「Call to undefined function」エラーの原因になります。

【関連記事】
「Call to undefined function …」と表示されるとき


●arg_separator.output — URL生成時の各パラメータ区切り文字
既定値:「&」
→ XAMPPインストール時の「&」だとhttp_build_query関数がうまくいかないことも。

 http_build_query関数などで、URLを組み立てるときに、要素の区切り文字として使われます。一部バージョンのXAMPPのように「&」に設定されていると、URLパラメータ「test.php?p1=abc&p2=xyz&p3=999」の「&」として機能しません。

【関連記事】
http_build_query関数で作成したURLパラメータが機能しないとき


●max_execution_time — スクリプトのタイムアウト値
既定値:30
→ 短めに設定して無限ループに対処。

 スクリプトが強制終了されるまでの最大時間を秒単位で指定します。無限ループの不安がある場合は、数秒程度に制限してもよいでしょう。

【関連記事】
無限ループ癖がついてしまったとき


●short_open_tag — 開始終了タグの短縮形を有効にするか
既定値:Off
→ Offの場合は変数出力のショートタグが使えないが、Onにしないこと。

 Onの場合は変数出力を簡単に記述できる「<?= $temp ?>」形式のタグが使用可能になりますが、「<?」とXMLの相性が悪いのでOffのままにしておきましょう。「<?= $temp ?>」形式の変数出力は「<?php echo $temp; ?>」に修正しましょう。


●register_globals — 変数をグローバル変数に登録するか
既定値:Off
Onにしてはいけません。

 「register_globals = On」の前提で作成された古いPHPスクリプトは動かなくなりますが、この設定をOnにしてはいけません。設定ではなく処理の方を修正しましょう。セキュリティ面からPHP4.2.0以降、既定値はOffになりました。PHP6で廃止予定です。Onにしないようにしてください。


●include_path — インクルードファイルの格納ディレクトリ
既定値:
→ レンタルサーバーなどではインクルードファイル用のディレクトリを.htaccessで明示的に設定すると便利。

 ローカルコンピュータとレンタルサーバーでは、自前で準備したインクルードファイルを格納するディレクトリが違うはずなので、必要に応じてinclude_pathを自前で設定することになるでしょう。

○include_pathの設定例(.htaccessに記述)
php_value include_path “.;/nisi/app1/…”

※「.」は現在のディレクトリの意味。複数指定する場合は「;」で区切る。


apacheが起動しないときは、以下の記事を参考にしてください。
XAMPPでインストールしたApacheが起動しないとき

PHPエラーの原因と対策の最近記事

  1. PHPの関数や変数の前にあるアットマークの意味は?

  2. 「http:// wrapper is disabled in the server co…

  3. php.iniの場所

  4. 「Warning: array_key_exists()」と表示されるとき

  5. 「Warning: A non-numeric value encountered」と表示…

関連記事

PAGE TOP