LoginSignup
9
10

More than 5 years have passed since last update.

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

Posted at

概要

過去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インジェクション等には十分気をつけてね!

9
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
10