だよねがエンジニアになるんだよね

プログラミング初心者の学びブログ

エラーログを出力しよう(6-23)

ログって何?

ログは、障害などが起きた時に何が起きたかを把握できるように、プログラムの実行状況・データ送受信状況などを記録しておくもの

アクセスログ

行動履歴が分かる

サイトの不具合や不審なアクセスを見つけられる

 

 

PHPApacheのログ

ログには主にアクセスログとエラーログがある(他のログも自分で設定できる)

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でも確認できるが、アクセスログとエラーログを切り分けられない

dockerのログはPHPApacheで分けられない

データを登録したらリダイレクトしよう(6-21)

リダイレクトって何?

リダイレクトとは、ユーザを自動的に次のページへ転送する仕組み

create.php(自動転送)index.php

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)

ApacheHTMLを返す仕組み

1,ブラウザが<ドメイン名>/indexにアクセス

2,Apacheが/var/www/html/indexを探す

3,それがPHPファイルならPHPの処理をして

    処理した結果のテキストを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

 

 

PHPHTMLのテキストを返すには?

PHPは開始タグと終了タグに挟まれていない部分は単にテキストとして

出力するので、PHPタグの外側にHTMLタグを書けばOK

 

index.php

<?php

    //PHPの処理

?>

<!DOCTYPE html>

<html lang="ja">

</html>

 

PHPの処理を実行後、テキストが出力される

 

PHP終了タグの下に改行を入れたりすると、改行もテキストとして出力されてしまうので入れないように注意

HTML,CSS,PHPの作成手順(6-13)

順序は「HTMLPHPCSS

HTML 要素を表示する

PHP ロジックを実装し動く状態にする

CSS 見た目を整える

 

この順番じゃなくても実際はいいけど

ポイントは、HTML,CSS,PHPをそれぞれ分けてやる事

同時に複数のことをやろうとしない事

 

 

HTMLを書く時の順序

1,WFを書く

2,HTMLで基本構成とheadを作成する

3,大枠のレイアウトをメモする

4,HTMLで大枠のレイアウトを作成する

5,HTMLで個別パーツを作成する

 

HTMLを書く時のポイントは、

レイアウトをメモして、入れ子構造を常に意識する事

 

 

PHPを書く時の順序

ロジックを一つずつ実装する事

慣れるまでは一度に実装しようとしない

 

 

CSSを書く時の順序

1,大枠のレイアウトをスタイリングする

2,大枠のレイアウトをレスポンシブ対応する

 (レスポンシブ対応:PCスマホの両方に対応できるようにする事)

3,個別パーツをスタイリングする

4,個別パーツをレスポンシブ対応する

 

どのパーツを、何のプロパティでスタイリングすればいいかを意識して

一つずつ実装していく

Webページが表示される仕組み(6-8)

Webページが表示される仕組み(今回の)

リクエストを受けて、HTMLファイルをレスポンスとして返している

1,ブラウザからのリクエストをApache(WEBサーバー)が受ける

   サイトにアクセスする事はリクエストを送る事と同義

2,Apacheが処理をPHPに任せる

3,PHPがdbコンテナとデータのやり取りをしてHTMLファイルを作る

4,PHPApacheにHTMLを渡す

5,ApacheがブラウザにHTMLを渡す

 

今回でいうと、既にappコンテナでApache2が動いているのでHTMLを表示できる