【PHP】超優良入門書『いきなりはじめるPHP』をMAMPで完走するために知っておくべき5つのこと【Mac】

超優良入門書『いきなりはじめるPHP』をXAMPPではなくMAMPでやる方法

東京のすみっこより愛をこめて。fummyです😊💡

Webデザイナーとしてレベルアップするために、サーバーサイドの動きも把握しておきたい…! と思い、PHPの勉強をはじめました。

そして、PHPの入門書として非常に評価の高い『いきなりはじめるPHPをやり終えましたー!(ノ*>∀<)ノ

ただし、ここで注意点が。

本書ではPHPの開発環境を構築するために、XAMPPを使うことが推奨されていて、その操作方法が懇切丁寧に説明してあります。

ですが、わたしはPCにインストール済みであったMAMPを使ってやってしまいました。

MAMPでもできます。

しかし、MAMPでの「文字コードの設定方法」や「MySQLの停止などの操作」は、本に載っていないので自分で解決しなければなりません。

というわけで、本記事では『いきなりはじめるPHP』をMAMPでやったときに生じた問題や、その際の対処法(MAMPの設定・操作方法)などをまとめました。

本記事にまとめた内容で、問題はすべて解決しています。

ので、参考にしていただければと思います( *´꒳`*)

SPONSORED LINK

『いきなりはじめるPHP』とは?

いきなりはじめるPHP表紙

谷藤賢一『いきなりはじめるPHP』、リックテレコム、2011年、表紙より。

ちなみにですが、わたしが『いきなりはじめるPHP』を手に取ったのは、そこそこ古い本で、版数を重ねていて、Amazonの評価がとても高かったから。笑

PHPで何かつくってみようと思って参考書を探したときに、Amazonレビューで90件以上のカスタマーレビューがついており、「プログラミング初心者でももっともとっつきやすい本」として高評価だったため、購入してみました。

本書は、「プログラミング自体が未経験」というレベルの初心者向けの入門書なのですが、「Webアプリケーションをつくりながら、手を動かしてPHPを習得しよう」というのがコンセプトのため、使えるプログラムをいきなり作成します。(まさに『いきなりはじめるPHP』!)

作るのは、Webサイトにおくアンケートフォーム

Web上でアンケートの回答を入力して「送信」ボタンを押すと、回答内容をデータベースに保存することができます。よくあるやつですね。

わたし自身もPHPは初めてでしたが、書かれている説明がとても丁寧なので、ちゃんとアンケートフォームが完成しましたし、正常に動作することが確認できました╰(*´︶`*)╯

まあ、MAMPでやったせいで、途中で5回ほどつまづきましたけどね。笑
というわけで、MAMPで本書をやる方は、以下を読み進めて参考にしてみてください!

SPONSORED LINK

開発環境

MAMPでの対処のお話に入る前に、わたしの今回の開発環境について、記載しておきます。

これ以外の環境の場合は、表示される画面や、行う操作などが異なってくる場合がありますので、ご了承くださいませ(。>人<。)

今回の開発環境
  • PHP: 7.1.8
  • MySQL: 5.6.35
  • MAMP: Ver4.2

SPONSORED LINK

『いきなりはじめるPHP』をMAMPでやるときに知っておくべき5つのこと

超優良入門書『いきなりはじめるPHP』をXAMPPではなくMAMPでやる方法

それではここから、いきなりはじめるPHP』をMAMPでやったときに生ずる問題や、その際の対処法(MAMPの設定・操作方法)をみていきましょう!

①MySQLの文字化け対策の方法(my.cnfの作成と格納)

いきなりはじめるPHP, データベースの文字化け対策

いきなりはじめるPHP』、p.107より。

まずは、MySQLの文字コードの設定。
データの文字化けを防ぐ、とても重要な設定です。

もしもデータベース(MySQL)の文字コードが正しく設定されていなかったら、お客さまからのアンケートの回答内容をデータベースに格納したときに、データが文字化けをしてしまう可能性があります。そうなるとそのデータを取り出しても理解できません。使えないデータになってしまいます。

そこで本書では、データベースを一番はじめに扱う箇所で、「文字化け対策」の方法を説明しています。(p.107〜)

具体的には、XAMPPの/Application/xampp/etc/my.cnfというファイルの内容を修正する手順が書かれているのですが、MAMPPにはmy.cnfというファイルがデフォルトでは存在しないため、ユーザが作成し、然るべき場所に格納する必要があります。

こちらは別記事で手順を説明しましのたで、ご覧ください!

②データベース接続のためのソースコードの記述方法

いきなりはじめるPHP, 接続・指令・切断でデータベースに自動保存する機能を追加

いきなりはじめるPHP』、p.124より。

次に、アンケートの入力内容をデータベースに自動保存する機能を実装するところ。(同書、p.122〜)

このとき、サーバー上のデータベースと接続し、データベースとのやり取りを行うことになります。

『いきなりはじめるPHP』では、データベースとのやり取りは「接続・指令・切断」という方法で行うと記載があります(同書、p.124)が、MAMPで行う際は、この「接続」の記述方法に修正が必要です。

『いきなりはじめるPHP』でのDB接続の記述方法と発生した問題

下記が『いきなりはじめるPHP』でのデータベース接続の記述方法(p.124)ですが、この方法ですと接続エラーが発生します。データベースに接続できません。

修正すべき点は、3行目、5行目、7行目です。

修正方法

以下のように修正します。

まずは5行目。一番重要です。『いきなりはじめるPHP』ではデータベースに接続するときのパスワードは空欄(未設定)でしたが、MAMPは初期パスワードが”root”なので、これを記載しないとデータベースに接続できません。

7行目は削除しました。元々は”$dbh->query(‘SET NAMES utf8′)”と書かれていました。7行目の代わりに、3行目に書いたような”charset=utf8’;”と書く方法が良いそうなので、7行目の代わりに3行目に追記しています。

これはMAMP特有の修正ではないのですが、PHP5.3.5よりも後のverでは、SET NAMESはなるべく使わない方がよく、上記のように記述するのが主流だということです。

なぜSET NAMESを使わないのか?

なぜSET NAMESをなるべく使わない方がいいの・・・?ということについては、PHPを始めたばかりの入門者が深追いすると、挫折するかハマって抜け出せなくなるかしてしまうと思うので、いまは「PHPのあるバージョン以降はこのように書くのが普通になったんだな」と認識しておく程度に留めておくのがよいと思います。(何を隠そう、わたしがハマりかけました。笑)

一応参考サイトを記載しますの、ご興味のある方は読んでみてください。

③エラーが発生したときのログの格納場所

MAMPのエラーログの格納場所も、ここで(早いうちに)確認しておきましょう。

プログラム開発にはエラーがつきものです。期待どおりにプログラムが動かなかったとき、エラーが発生したときは、エラーログをヒントにして、ソースコードの誤りを探していくことになります。

MAMPではエラーが発生したときには、以下の場所にログファイルが生成されます。

エラー発生時のログの格納場所とファイル名
/Applications/MAMP/logs/php_error.log

ログファイルの中身はこんなかんじ

“php_error.log”というファイルを開くと、エラーの内容が記載されています。どこでエラーが発生しているかがわかるため、解析しやすくなります。

こんなかんじで表示されます。(スペルミスなので恥ずかしいですが。。)

[14-Jan-2018 05:02:01 Europe/Berlin] PHP Fatal error: Uncaught Error: Call to undefined function html_entitiy_decode() in /Applications/MAMP/htdocs/survey/thanks.php:38
Stack trace:
#0 {main}
thrown in /Applications/MAMP/htdocs/survey/thanks.php on line 38

「thanks.phpというファイルの38行目で呼び出している関数が定義されてませんよ」と怒られています。赤字で示しましたが、正しくはentityですね。とても単純なミスですね(((;°Д°;))))←恥

こんなかんじで、プログラムがうまく動かない時には、エラーログの内容を確認して、対処してみてください( • ̀ω•́ )ゞ

④MAMPでMySQLだけ停止させる方法

いきなりはじめるPHP, MySQLを停止する, サーバーダウン

いきなりはじめるPHP』、p.144より。

これが、MAMPで本書をやるにあたっての一番の罠です。笑

『いきなりはじめるPHP』でつくるWebアンケートフォームでは、データベースサーバがダウンしたときに、「ただいま障害により大変ご迷惑をおかけしております」のようなお詫び画面を表示させる、という処理を実装しています。(同書、p.144)

このお詫び画面を確認するためには「Apacheサーバを起動したまま、MySQLサーバだけを停止させる」必要があるのですが、MAMPでは容易にできません。

MAMPでMySQLだけ停止させるのは容易ではない理由

なぜMAMPでMySQLだけ停止させるのが難しいのかというと、MAMPの操作画面の問題です。(クレーム?笑)

MAMPの画面には「起動」ボタンがひとつあるだけ。

つまり、MAMPでは、ApacheサーバとMySQLサーバを両方同時に起動させるか、両方同時に停止させるかしかありません。ApacheサーバとMySQLサーバが同時に停止してしまうと、Webサーバ自体が停止してしまうので、そもそもアンケートフォーム自体表示されなくなります。

これだと試験ができません。

MAMPでMySQLだけ停止させる具体的方法

それでも調査の結果、MAMPでもMySQLだけ停止させる方法があることがわかったので、ご紹介します!以下の記事を参考にして、MAMPのMySQLだけを停止してみてください。

MySQL停止後に行う試験内容

さて、上記の記事を参考にして、MAMPの画面上でMySQLだけランプが消灯した状態になったら、以下の試験を実施してみてください。

データベースダウン(MySQLのみ停止)時の確認事項
  • アンケートフォーム送信後、「ただいま障害により大変ご迷惑をおかけしております」というお詫び画面が表示されること。
  • アンケートフォーム送信後、データベースには送信内容が登録されていないこと。

MySQL復旧後に行う試験内容

また、同じ記事に、MySQLを停止させた後、復旧させる方法も記載しています。

復旧後、MAMPの画面上でAppachサーバもMySQLもランプが点灯した状態で、以下も確認してみてくださいね。

データベース復旧後の確認事項
  • アンケートフォーム送信でお礼ページが表示されること。
  • データベースに送信内容が登録されること。
  • MySQLサーバダウン時にフォームを送信した回数分、データベースの整理番号が欠番になること。
ちなみに、XAMPPは画面からMySQLだけ停止できるようです。やられた気分です。笑

⑤MySQLのデータクエリ(行)の欠番発生時にインクリメントをリセットする方法

これは本書には載っていないし、本書で求められいる操作ではないので、おまけ的な位置づけです。やらなくてもプログラム的には全く問題ありません。気になる方はやってみてください!

MySQLだけ停止したときにアンケート送信すると・・・

MySQLを止めた時にアンケートの送信を行い、データベースに登録を試みると、番号だけ振られた「データが空のクエリ(行)」ができてしまいます。そのクエリを削除しても、次の数字から割り振られるため、欠番ができてしまいます。

codeにはユニークな(他にない)数字が採番されていればいいので、データベース的には欠番があったところで、特に問題はありません。個々のデータが異なるものだということが判別できればよいのです。

なので、テータベースとして問題があるわけではないのですが、欠番があることが気になってしまったので、データベース上の欠番を無くして番号を振り直す方法を調べました。以下の方法で、欠番をなくすことができます。

データベーステーブルの開始番号を強制的に変更する

phpMyAdminでデータベースを選択し、テーブルの開始番号を指定します。以下のコマンドで、アンケート結果が登録されている”survey”テーブルの開始番号を強制的に15に変更することができます。

ALTER TABLE survey AUTO_INCREMENT = 15

これで、次に登録されるデータの番号は、15になります。
(状況に応じて”15”の部分を変更して実行してください。)

以下、参考にさせていただきました。

参考サイト
まだプログラマーですが何か?「MySQL の auto_increment をリセットする」
http://dotnsf.blog.jp/archives/1062661668.html

SPONSORED LINK

おわりに

超優良入門書『いきなりはじめるPHP』をXAMPPではなくMAMPでやる方法

谷藤先生の懇切丁寧な説明と思いやりの気持ちを踏みにじるように、本書でおすすめされていたXAMPPではなくて、MAMPをつかってやってしまったのは、誠に申し訳なく思っております。。。が、これはこれでいい勉強になりました(>ω・b

でも、プログラミングが初めてという方は、XAMPPでやってくださいね。笑
まずはプログラムを動かす楽しさを味わってください!

また、PHPの勉強を始めたときに以下のような疑問をいだいたので、記事にまとめました。
PHP初心者の方は参考にしていただければと思います!

それでは、今日も素敵な一日を!

fummy

SPONSORED LINK
SPONSORED LINK