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

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

Webデザイナーとしてレベルアップするために、PHPの勉強をはじめました。
そして、PHPの入門書として評価の高い『いきなりはじめるPHP』をやり終えました!

本書ではPHPの開発環境を構築するために、XAMPPを使うことが推奨されているのですが、わたしはPCにインストール済みであったMAMPをつかってやってしまいました。

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

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

本記事にまとめた内容で、問題はすべて解決していますので、参考にしていただければと思います!

SPONSORED LINK

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

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

本書は完全に初心者向けの入門書なのですが、「Webアプリケーションをつくりながら、手を動かしてPHPを習得しよう」というのがコンセプトのため、Web上で入力してデータベースに保存するアンケートフォームを実際に作成します。

このアンケートフォームの動作確認方法も、XAMMPとMAMPでは異なる操作になるため、以下を読み進めて参考にしていただければと思います!

SPONSORED LINK

開発環境

MAMPでの対処のお話に入る前に、わたしの今回の開発環境について、記載しておきます。
開発環境の状態は、バグ解析やプログラムのメンテナンスなどをするときにとても重要です。

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

SPONSORED LINK

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

それでは、ここからMAMPの設定や操作等のお話です!

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

MySQLの文字コードの設定はとても重要です。

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

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

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

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

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

アンケートの入力内容をデータベースに自動保存するときに、データベース(DB)とのやりとりを行うことになります。

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

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

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

修正すべき点は、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はなるべく使わない方がよく、上記のように記述するのが主流だということです。

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

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

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

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

エラー発生時のログの格納場所とファイル名
/Applications/MAMP/logs/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だけ停止する方法

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

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

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

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

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

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

そして、MAMPの画面上で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

おわりに

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

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

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

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

fummy

SPONSORED LINK
SPONSORED LINK