◆20200831 授業メモ PHPの設定 記述の基本・変数・ヒアドキュメント
本日の授業内容
要約
○PHPの設定
板書通り。
○便利コード
nlbr2(変数名);→<br>を入れていなくてもブラウザでも改行してくれるコード。
以下板書
〇PHP環境構築
xamppフォルダをデスクトップに作成
・インストール時
xamppフォルダを対象にインストール
tomcatはチェックを外す
〇XAMPPとは
X OSを指す
A Apache(Webサーバ)
P PHP
P Perl
〇設定の仕方
☆変更する設定ファイル
☆編集前にバックアップ
設定ファイルが壊れてしまうとXAMPPが動かなくなってしまいます。いつでも
元の設定に戻れるよう、現在の設定ファイルをコピーしてバックアップを作成します。
☆コピーで作成したバックアップファイルの名前を変更します。バックアップファイル
が設定ファイルとして認識されないよう念のため拡張子も変えておきます。
例)php_日付.ini.bk
拡張子を変更してもよいか確認されるので「OK」をクリックします。
☆設定ファイルを編集
バックアップを作成した後、設定ファイル「php.ini」を編集します。
〇開始タグの短縮形に関する設定変更(187行目付近)
PHPブロックタグを短縮形で使用できるようにします。
・変更前
short_open_tag = Off
・変更後
short_open_tag = On
開始タグの短縮形
通常の記述
1
<? php echo 'Hello World !!'; ?>
短縮形
1
<? echo 'Hello World !!'; ?>
echo付き短縮形
1
<?= 'Hello World !!'; ?>
エラーレベルに関する設定変更(463行目付近)
開発時は詳細なエラーを表示させてデバッグの手がかりにします。
・変更前
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
・変更後
error_reporting = E_ALL
定数 説明
E_ERROR 重大な実行時エラー。これは、メモリ確保に関する問題のように復帰で きないエラーを示します。
スクリプトの実行は中断されます。
E_WARNING 実行時の警告(致命的なエラーではない) 。スクリプトの実行は中断さ れません。
E_PARSE コンパイル時のパースエラー。パースエラーはパーサでのみ生成されま す。
E_NOTICE 実行時の警告。エラーを発しうる状況に遭遇したことを示す。 ただし通常のスクリプト実行の場合にも
この警告を発することがありうる。
E_CORE_ERROR PHPの初期始動時点での致命的なエラー。E_ERRORに
似ているがPHPのコアによって発行される点が違う。
E_CORE_WARNING (致命的ではない)警告。PHPの初期始動時に発生する。
E_WARNINGに似ているがPHPのコアによって発行される 点が違う。
E_COMPILE_ERROR コンパイル時の致命的なエラー。E_ERRORに
似ているがZendスクリプティングエンジンによって発行される点が違う。
E_COMPILE_WARNING コンパイル時の警告(致命的ではない)。
E_WARNINGに 似ているがZendスクリプティングエンジンによって発行される点が違う。
E_USER_ERROR ユーザーによって発行されるエラーメッセージ。
E_ERROR に似ているがPHPコード上でtrigger_error()関数を 使用した場合に発行される点が違う。
E_USER_WARNING ユーザーによって発行される警告メッセージ。
E_WARNING に似ているがPHPコード上でtrigger_error()関数を 使用した場合に発行される点が違う。
E_USER_NOTICE ユーザーによって発行される注意メッセージ
。E_NOTICEに に似ているがPHPコード上でtrigger_error()関数を 使用した場合に発行される点が違う。
E_STRICT コードの相互運用性や互換性を維持するために PHP がコードの変更を提案する。
E_RECOVERABLE_ERROR キャッチできる致命的なエラー。危険なエラーが発生したが、
エンジンが不安定な状態になるほどではないことを表す。
ユーザー定義のハンドラでエラーがキャッチされなかった場合(set_error_handler() も参照ください) は、
E_ERROR として異常終了する。
E_DEPRECATED 実行時の注意。これを有効にすると、
将来のバージョンで動作しなくなるコードについての警告を受け取ることができる。
E_USER_DEPRECATED ユーザー定義の警告メッセージ。これは E_DEPRECATED と同等だが、
PHP のコード上で関数 trigger_error() によって作成されるという点が異なる。
E_ALL サポートされる全てのエラーと警告。 PHP 5.4.0 より前のバージョンでは、E_STRICT レベルのエラーは除く。
〇エラー表示に関する設定変更(480行目付近)
公開時にエラー内容が表示されるとエラーコメントから内部情報がわかってしまいます。
そのため公開時はエラー表示設定を「Off」にします。
開発時はエラー内容を表示させて修正をするため「On」にします。
公開時(エラー表示しない)
display_errors = Off
開発時(エラー表示する)
display_errors = On
〇HTTPヘッダに出力するデフォルト文字コード設定変更(709行目付近)
行頭に「; 」がついている設定はコメントとして扱われ無効化されています。
もし設定が無効化されていた場合は行頭の「; 」を削除してください。
・変更前
; default_charset = "UTF-8"
・変更後(初期状態でこちらになっているはず)
default_charset = "UTF-8"
〇マルチバイト文字に関する設定変更(1638行目付近)
マルチバイト文字で使用する言語を指定します。
行頭の「; 」を削除して設定を有効にします。
・変更前
; mbstring.language = Japanese
・変更後
mbstring.language = Japanese
〇自動文字エンコードの検出に関する設定変更(1676行目付近)
JIS, ASCII」に変更します。
・変更前
; mbstring.detect_order = auto
・変更後
〇タイムゾーンに関する設定変更(1969行目付近)
タイムゾーンを変更します。
・変更前
date.timezone = Europe / Berlin
・変更後
date.timezone = Asia / Tokyo
設定変更完了
変更後の「php.ini」を保存して設定変更完了です。
設定をXAMPPの反映
修正した設定をXAMPPに反映させます。
一度「apache」を停止させた後、もう一度開始します。
開始のタイミングで設定が読み込まれます。
〇授業で使うサンプルコードのDL場所
htdocs(別名ドキュメントルート)に。
サーバー起動
↓
ブラウザでlocalhost→接続
〇ブラウザ表示確認
URLを入力すること
〇PHP 変数展開
<? php
$name = '田中';
$today = '2019/5/26';
$text1 = " $today に $name はプログラムを勉強しています。";
// 正解
$text2 = "{$today}に{$name}はプログラムを勉強しています。";
// 正解
$text3 = '{$today}に{$name}はプログラムを勉強しています。';
//↑ シングルクォートだと記号を文字列として認識してしまう。変数展開が行われず。
// ダブルクォートで囲った文字列は変数展開が行われる。
$text4 = "$todayに$nameはプログラムを勉強しています。";
// ↑"$todayと$nameは半角スペースであけてあげないとエラーが出る
?>
// < !DOCTYPE html >
// <html lang="ja">
// <head>
// <meta charset="UTF-8">
// <meta name="viewport" content="width=device-width, initial-scale=1.0">
// <title>変数展開</title>
// </head>
// <body>
// <h1>変数展開</h1>
// <p><?</p>
// <p><?</p>
// <p><?</p>
// <p><?</p>
// </body>
// </html>
〇ヒアドキュメント
<? php
// ファイル上部でロジカルな処理を記述
// 出力用の変数に必要な値を代入
$name = '田中';
$today = date('Y/m/d');
// date関数の呼出し(処理の呼び出し)
// 日付に関する処理
// 第一引数に日付の書式をもった文字列を指定
// Y=4桁の年
// m=2桁の月
// d=2桁の日にち
// 戻り値は引数で指定した書式に日時をあてはめた文字列
// 今日の日付だったら戻り値は2020/8/31
$text = << < EOD
「<<<」の後ろで終端IDを指定し、\n
その終端IDが行頭に出てくるまでを文字列として扱います。\n
この"ヒアドキュメント"の中では'シングルクォート'や"ダブルクォート"をエスケープする必要がありません。<br>
投稿者:{$name}<br>
投稿日:{$today}
EOD;
?>
// <!DOCTYPE html>
// <html lang="ja">
// <head>
// <meta charset="UTF-8">
// <meta name="viewport" content="width=device-width, initial-scale=1.0">
// <title>ヒアドキュメント</title>
// </head>
// <body>
// <h1>ヒアドキュメント</h1>
// <p>php echo nl2br($text1); </p>
nlbr2(変数名);→<br>を入れていなくてもブラウザでも改行してくれるコード。
// </body>
// </html>
・ヒアドキュメント開始
$text=<<<EOD←終端IDと呼ばれるもの(なんでもよい)
EODで囲まれた部分は” ”で囲まれた文字列と同じ扱い
変数展開される文字列
EOD← ヒアドキュメント終了
// 長い文章を扱うのが得意なので、長めのHTMLコードやメール本文や
// 処理完了メッセージ等に使用することが多い
// 終端ID前後に余計な記述を入れるとエラーになることがあるので注意