エラーログを出力しよう(6-23)
ログって何?
ログは、障害などが起きた時に何が起きたかを把握できるように、プログラムの実行状況・データ送受信状況などを記録しておくもの
行動履歴が分かる
↓
サイトの不具合や不審なアクセスを見つけられる
ログには主にアクセスログとエラーログがある(他のログも自分で設定できる)
PHPはエラーログ、Apacheはアクセスログとエラーログを主に出力
・ブラウザがサーバ(Apache)にリクエストし、それにApacheが答えるごとに記録される(アクセスのたびに記録)
・アクセスの履歴を確認するために使う
エラーログ
・リクエストの結果がエラーになったものだけが記録される
・サーバに問題が起きたら検知するために使う
エラーログを出力しよう
エラーログを記録するにはerror_log()を使う
error_log
・エラーメッセージをWebサーバーのエラーログに送信する
$message:エラーログに記録されるメッセージ
error_log($message)
・データベースに接続できませんと記録するなら
error_log("データベースに接続できません");
ログを確認しよう
Dockerコンテナ内のログを確認するにはdocker logsコマンドを使う
事前準備:コンテナ名を確認
docker ps
ログを確認したいとき(-f:follow。ログの出力を表示し続ける)
docker logs-f<コンテナ名>
アクセスログを確認したいとき(エラーログを捨てる)
docker logs<コンテナ名> -f 2>/dev/null
エラーログを確認したいとき(アクセスログを捨てる)
docker logs<コンテナ名> -f 1>/dev/null
docker-compose logsでも確認できるが、アクセスログとエラーログを切り分けられない
データを登録したらリダイレクトしよう(6-21)
リダイレクトって何?
リダイレクトとは、ユーザを自動的に次のページへ転送する仕組み
Q.create.phpに全部書けばいいのでは?
A.だめ。一つのファイルにつき一つの役割を持たせることが大事。
変更も楽になる。
header関数を使うとリダイレクトできる
header
・生のHTTPへヘッダを送信する
$header:ヘッダ文字列
header($header)
・リダイレクトするには"Location:"ヘッダを付ける
リダイレクト処理するとこれ以降のコードは実行されないので注意
header("Location:http://www.example.com/");
データを登録しよう(6-20)
PHPの定義済み変数を使おう
PHPで定義されている変数。外部から情報などが取得できる
定義済み変数はすべて[$_]から始まる
$_ENV
・連想配列として受け取る
$_POST
POSTされた情報
登録はこれ!
・連想配列として受け取る
$_GET
URLパラメータの情報
・連想配列として受け取る
$_SERVER
サーバや実行時の環境情報
・連想配列として受け取る
・REQUEST_METHOD:ページにアクセスする際に使用されたリクエストのメソッド名。'GET','POST'など
ex)
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
マジック定数を使おう
使われる場所によって値が変化する定数がマジック定数
__DIR__
そのファイルの存在するディレクトリ名
__FILE__
ファイルのフルパスとファイル名
__LINE__
そのファイル上の現在の行番号
外部ファイルを取り込もう
同じ処理を複数の場所で行うことがあるので
共通の処理は別ファイルに一か所にまとめて、そのファイルを読み込んで使おう
今回、外部のphpを読み込む所要がある
require
指定したファイルを読み込む
読み込みが失敗すると処理がそこで中断される
require 'somefile.php';
require_once
requireとほぼ同じだが、一度しかファイルを読み込まない
悩んだらrequire_onceを使うことを推奨
基本的に一度読み込むだけでよい、毎回読み込むと重くなる
require_once 'somefile.php';
フォームを作成しよう(6-17)
フォームを作成するときは
紙でいいので、レイアウトをメモして入れ子構造を最初に整理しておこう
HTMLのフォーム
フォームとは「お問い合わせ」「会員登録」など、ユーザが何かしらの入力と処理を行うために使用されるもの
<form action="create.php" method="post">
//formタグ:フォームを作成する
//action:送信ボタンを押した後に移動するページ
//method:データの送信方法。GETかPOSTを指定。登録系の時はPOSTを指定
<label for="name">会社名</label>
//labelタグ:フォームのラベル作成する
//for:パーツのid属性と同じ値にすることで、パーツとラベルを関連付けられる
<input type="text" name="name" id="name">
//input type="text":1行のテキストエリアを設置する
//name:パーツの名前。PHPにデータ送信する際の項目名になる
<button type="submit">登録する</button>
//submit:データを送信
</form>
ラジオボタンにすることで複数から一つ選ばせることができる
nameの名前を同じにすることでグループ化できる
<form action="create.php" method="post">
<div>
<input type="radio" name="sex" id="male" value="male">
//inputのidとlabelのforの値を同じにすることで項目とボタンを連動
//ラジオボタンのvalue属性値は、そのラジオボタンを選択した時だけ送信する値
<label for="male">男性</label>
</div>
<div>
<input type="radio" name="sex" id="female" value="female">
<label for="female">女性</label>
</div>
<button type="submit">登録する</button>
</form>
PHPでHTMLを表示しよう(6-14)
ApacheがHTMLを返す仕組み
1,ブラウザが<ドメイン名>/indexにアクセス
2,Apacheが/var/www/html/indexを探す
処理した結果のテキストをApacheに渡す
4,ApacheはindexのHTMLをブラウザに返す
(テキストファイルをHTMLとしてかえす)
*以上はappコンテナ内で行われている
要は、appコンテナ内の/var/www/html以下にファイルを置けば
置いたファイルのパスと同じファイルにアクセスする事ができる
/var/www/html以下にファイルを置くには?
src以下のファイルが/var/www/html以下に同期されるように
Dockerで設定済み
docker-compose.ymlファイル
services:
app:
volumes:
- ./src:/var/www/html
//手元のsrc以下のファイルをappコンテナの/var/www/html以下に同期する
要は、src以下にファイルを置けばOK
PHPでHTMLのテキストを返すには?
PHPは開始タグと終了タグに挟まれていない部分は単にテキストとして
出力するので、PHPタグの外側にHTMLタグを書けばOK
index.php
<?php
//PHPの処理
?>
<!DOCTYPE html>
<html lang="ja">
…
</html>
PHPの処理を実行後、テキストが出力される
PHP終了タグの下に改行を入れたりすると、改行もテキストとして出力されてしまうので入れないように注意
HTML,CSS,PHPの作成手順(6-13)
HTML 要素を表示する
↓
PHP ロジックを実装し動く状態にする
↓
CSS 見た目を整える
この順番じゃなくても実際はいいけど
同時に複数のことをやろうとしない事
HTMLを書く時の順序
1,WFを書く
2,HTMLで基本構成とheadを作成する
3,大枠のレイアウトをメモする
4,HTMLで大枠のレイアウトを作成する
5,HTMLで個別パーツを作成する
HTMLを書く時のポイントは、
レイアウトをメモして、入れ子構造を常に意識する事
PHPを書く時の順序
ロジックを一つずつ実装する事
慣れるまでは一度に実装しようとしない
CSSを書く時の順序
1,大枠のレイアウトをスタイリングする
2,大枠のレイアウトをレスポンシブ対応する
(レスポンシブ対応:PCとスマホの両方に対応できるようにする事)
3,個別パーツをスタイリングする
4,個別パーツをレスポンシブ対応する
どのパーツを、何のプロパティでスタイリングすればいいかを意識して
一つずつ実装していく