PHP
Linux
MySQL
CentOS
Apache

Linux(CentOS7)でWebサーバーを構築する。 -導入編Final-

More than 3 years have passed since last update.


概要

過去3回に渡り「Linux(CentOS7)でWebサーバーを構築する」シリーズを綴って参りましたが、今回が導入編の最終回となります。(多分)

-導入編Final-では、


  • php-mysqliの導入

  • 実働テスト


    • テスト用データベース及びユーザーの作成

    • テスト用テーブルの作成

    • テストデータの登録

    • サンプルページ作成

    • 動作確認



  • 注意点

について綴ります。

今までの「Linux(CentOS7)でWebサーバーを構築する」シリーズ


手順


php-mysqliの導入

phpからMySQLへのアクセスが簡単にできるように、php-mysqliを導入するよ!


1. 導入

# yum -y install php-mysqli

とっても簡単ね!


2. httpdの再起動

php-mysqliのインストールが終わったら有効化するためにhttpdを再起動してね。

# systemctl restart httpd.service


実働テスト


1. テスト用データベース及びユーザーの作成

サンプルコードを実行するためのデータベースとそれを使用するためのユーザーを作成するよ。

MySQLにログイン

# mysql -u root -p

テスト用のデータベースを作成

MariaDB [(none)]> create database testdb;

※[testdb]は任意のデータベース名を入力

testdbを操作するためのユーザーを作成

MariaDB [(none)]> grant all on testdb.* to testuser@localhost identified by 'password';

※[testuser]は任意のユーザー名を入力

※[password]は任意のパスワードを入力

ここまでできたら一旦MySQLを終了。

MariaDB [(none)]> \q

さっき作ったユーザーでログインし直してみよう!

# mysql -u testuser -p

ログインできたかな?

useでさっき作ったデータベースを選択してね!

MariaDB [(none)]> use testdb

(none)の表示が(testdb)に切り替わったらOK!

MariaDB [(testdb)]>


2. テスト用テーブルの作成

さっき作ったデータベースに新しいテーブルを作成するよ!

テーブルっていうのは、表のこと。

名簿とか帳簿をイメージしてもらえば。

+-------------+-----------------------------+--------------+

| number | name | constellatio |
+-------------+-----------------------------+--------------+
| 1 | Hoshimiya | Pisces |
+-------------+-----------------------------+--------------+
| 2 | Kiriya | Aquarius |
+-------------+-----------------------------+--------------+
| 3 | Shibuki | Leo |

こんなん。

早速作ってみるよ!

MariaDB [(testdb)]> create table testtable (number int(4), name varchar(32), constellatio varchar(32));

create tableはテーブルを作るための命令、

[testtable]には任意のテーブル名を。

後ろに続くのが、テーブルにどんなデータを格納するかを定義する文だよ。

number int(4) は4桁の数値を入れるnumberという箱を用意、

name varchar(32) は最大32文字の文字列を入れるnameという箱を用意、

constellatio varchar(32)は最大32文字の文字列を入れるconstellatioという箱を用意する文。




きちんと作られたか確認してみてね。

MariaDB [(testdb)]> show columns from testtable;

こんな結果が出たら成功!

+-----------------------------------------------------------+

| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| number | int(4) | YES | | NULL | |
+--------------+-------------+------+-----+---------+-------+
| name | varchar(32) | YES | | NULL | |
+--------------+-------------+------+-----+---------+-------+
| constellatio | varchar(32) | YES | | NULL | |
+--------------+-------------+------+-----+---------+-------+


3. テストデータの登録

せっかくテーブルを作ったので、早速データを登録してみよう!

MariaDB [(testdb)]> insert into testtable (number, name, constellatio) values (1, "Hoshimiya", "Pisces");

insert into はテーブルにデータを挿入する命令、

[testtable]には任意のテーブル名を指定してね。

続く (number, name, constellatio)(1, "Hoshimiya", "Pisces") は対の関係になっているよ!

number1

nameHoshimiya

constellatioPisces

でデータを登録する、という文になるよ!

他のレコードも追加しちゃいます。

MariaDB [(testdb)]> insert into testtable (number, name, constellatio) values (2, "Kiriya", "Aquarius");

MariaDB [(testdb)]> insert into testtable (number, name, constellatio) values (3, "Shibuki", "Len");




テーブルの中身を確認してみよう!

MariaDB [(testdb)]> select * from testdb;

ちゃんと登録されていたかな?

+-------------+-----------------------------+--------------+

| number | name | constellatio |
+-------------+-----------------------------+--------------+
| 1 | Hoshimiya | Pisces |
+-------------+-----------------------------+--------------+
| 2 | Kiriya | Aquarius |
+-------------+-----------------------------+--------------+
| 3 | Shibuki | Leo |
+-------------+-----------------------------+--------------+


4. サンプルページ作成

/var/www/html に下記のサンプルコードを作成してね!


sample.php

<html>

<head>
<title>Sample</title>
</head>
<body>
TEST PHP.<br>
<hr>
<?php
if( !isset( $_GET['number'] ) )
{
echo '[Error]require param.<br>';
exit;
}

$mysqli = new mysqli( '127.0.0.1', 'testuser', 'password', 'testdb' );
if( $mysqli->connect_errno )
{
echo '[Error]' . $mysqli->connect_error . '<br>';
exit;
}

$res = $mysqli->query( 'select name,constellatio from testtable where number=' . $_GET['number'] . ';' );
if( $res )
{
echo '[Success!]<br>';

while( $row = $res->fetch_assoc() )
{
echo $row['name'] . ' (' . $row['constellatio'] . ')<br>';
}
}
else
{
echo '[Error]failure...<br>';
}

$mysqli->close();
?>
</body>
</html>


[testuser] には任意のMySQLユーザー名を、

[password] には↑のユーザーのパスワードを、

[testdb] には任意のデータベース名を、

[testtable] には任意のテーブル名を指定してね!



解説

$mysqli = new mysqli( '127.0.0.1', 'testuser', 'password', 'testdb' );

new mysqli でMySQLへの接続を試みているよ!

testuser は上で作ったMySQLユーザー名を、

password は上で指定したパスワードを、

testdb には上で作ったデータベース名を指定してね!

$res = $mysqli->query( 'select name,constellatio from testtable where number=' . $_GET['number'] . ';' );

$mysqli->query でMySQLにクエリを送るよ!

引数にはSQL文を入力してね!

select name,constellatio はnameとconstellatioを要求、

from testtable testtableから、

where number=1 numberが1のレコードを、の意。

全部繋げると「testtableからnumberが1になっているレコードのnameとconstellatioを取得」という意味になるよ。

while( $row = $res->fetch_assoc() )

$res->fetch_assoc() は$mysqli->queryの結果から一つのレコードを取得する文だよ!

echo $row['name'] . ' (' . $row['constellatio'] . ')<br>';

$row['パラメタ名']fetch_assocの結果にアクセスできるよ!


5. 動作確認

いよいよ実働テスト!

Apache, php, MySQLはちゃんと動いてくれるかな??




http://???.???.???.???/sample.php?number=1

ブラウザにアドレスとパラメタを与えて、サンプルページにアクセスしてみてね!

[Success!]

Hoshimiya (Pisces)

こんな感じに表示されたかな?




http://???.???.???.???/sample.php?number=2

今度はnumberを2にしてみると…?

[Success!]

Kiriya (Aquarius)




http://???.???.???.???/sample.php

パラメタがないと…?

[Error]require param.




http://???.???.???.???/sample.php?number=100

登録されていないnumberを指定すると…?

[Success!]

成功はするけど何も表示されないよ。




動いたかな?


注意点

今回のサンプルはエラーチェックとか色々省いた簡易コードです。

実運用では、エラーチェックや例外処理、あとSQLインジェクション等には十分気をつけてね!