○2017/8/13
●phpでMySQL(MariaDB)にアクセスできるようにする
phpおよび、MariaDBのインストール・設定の過程はこちら。
・phpのインストール
・MariaDBのインストール
参考サイト:
http://www.phpbook.jp/tutorial/mysql/index1.html
とりあえず、php.iniの、”php_mysql.dll”を有効に。
890行目:extension=php_mysql.dll のコメントアウトを外す。
で、dllファイルはどこにあるのでしょうか?
いろいろ探したけど、ない。
パッケージってインストールされてんのかな?
# aptitude search php
--- いろいろ結果が出てくる ------
の中に、
p php7.0_mysql
があった。
この最初の”p”って何?
調べてみたら、
システムにパッケージが導入されたことがない。らしい。
http://quantumfluctuation.blogspot.jp/2013/10/aptitude-search.html
ので、インストールしたらいいのかな?
よくわからんので、本に従ってやってってみようかな。
(phpインストール→DBの設定→Wordpressのインストール)
本でインストールしているphp関係のパッケージのうち、
・php (済)
・php-mbstring (未)
・php-gd (未)
・php-mysql (未)
なので、残りの3つをインストール。
# aptitude install php7.0-mbstring php7.0-gd php7.0-mysql
意地でもインストールしますw
→完了
/etc/php/7.0/mods-available/ 以下に、
mbstring.iniとかが増えてる。
/etc/php/7.0/apache2/conf.d/ 以下にも、
20-mbstring.iniとかが増えてる。
phpinfoでも確認してみようか。
apacheを再起動して、
# service apache2 restart
からの、Windowsのブラウザでphpinfoを開く。
→Additional .ini files parsed に反映されてる。
多分OKだな。
では、
●データベースの準備
phpのテスト用のデータベース、ユーザーを作成・設定
# mysql -u root -p
[rootのパスワードを入力]
[none]> create database phptest; (phpのテスト用のDBを作成)
[none]> grant all privileges on phptest.* to "user"@"localhost" identified by "password";
(localhostの"user"に、データベース"phptest"の全てのテーブルに対する、全ての権限を持たせる。パスワードは"password"。)
参考:https://www.dbonline.jp/mysql/user/index6.html
[none]> flush priviledges;
確認する。
[none]> show grants for "user"@"localhost"\g
→いろいろ出てくる。
「GRANT ALL PRIVILEGES ON `phptest`.* TO ‘user’@’localhost’」
もあるので、多分OK
試しに、設定してないユーザー名も見てみよう。
[none]> show grants for "test"@"localhost"
→エラー
OKですね。
どうでもいいけど、つい成り行きで”user”にしちゃったけど、
ユーザー名を”phpuser”にしときたい。
https://www.dbonline.jp/mysql/user/index3.html
> rename user "user"@"localhost" to "phpuser"@"localhost";
> show grants for "phpuser"@"localhost"\g
→↑と同じ結果:OK
一応、ユーザー一覧の確認も。(←SQLいじりたいだけ)
[none]> select user,host from mysql.user;
→phpuser , localhost も出てくる:OK
以下、↓のサイトに従ってやっていく。
参考サイト:http://www.phpbook.jp/tutorial/mysql/
・テーブルの作成とデータ入力
[none]> use phptest;
[phptest]> create table hanbai(
-> id int not null primary key,
-> shouhin_id int,
-> uriage int);
[phptest]> create table shouhin(
-> id int not null primary key,
-> name varchar(20));
テーブル"hanbai":
1列目をint型の項目"id"とし、プライマリキーに設定。
2列目をint型の項目"shouhin_id"とする。
3列目をint型の項目"uriage"とする。
テーブル"shouhin"も同様。
データの入力
[phptest]> insert into shouhin values
-> (1, "テレビ"),
-> (2, "DVD"),
-> (3, "パソコン");
[phptest]> insert into shouhin values
-> (1, 1, 320000),
-> (2, 2, 160000),
-> (3, 3, 180000),
-> (4, 1, 128000),
-> (5, 3, 98000),
-> (6, 2, 140000),
-> (7, 1, 175000);
確認
[phptest]> show tables;
→"shouhin"と"hanbai"が出てくる。:OK
[phptest]> select * from shouhin;
[phptest]> select * from hanbai;
→入力したデータが出てくる。:OK
で、MySQL終了
[phptest]> exit
●テスト用phpファイルの作成
参考サイトの”test1.php”をコピペ(ユーザー名とパスワードは変える)
して、/var/www/html/php/以下に保存。
Windowsのブラウザから確認。
→このページは動作していません。
apacheを再起動してもう一度。
→このページは動作していません。
MySQLを再起動してもう一度。
→このページは動作していません。
phpで、データベース使えるようになってないな。
何かが足りない。
最初にやった、extension=php_mysql.dll のコメントアウト戻す。
apacheを再起動。MySQLを再起動。
→このページは動作していません。
apacheのエラーログを見てみる。
/var/log/apache2/error.log によると、
「定義されていない関数”mysql_connect()”が呼び出されている」
らしい。
いろいろよくわからんので、
いったんWindows版で試してみよう。
○2017/8/16
Windowsでやってみていろいろわかったので、
もう一度設定してみる。
まず、phpの拡張モジュールがどこにあるか。
php.ini 内の”extension_dir”を検索。
719行目付近
“; Directory in which the loadable extensions (modules) reside” の下
; exteision_dir = "./"
コメントアウトのままだった。
じゃあ、どこかデフォルトで指定されてるはず。
phpinfo で確認すると、
exteision_dir : /usr/lib/php/20151012/
って出てきた。
なので、↑のディレクトリを確認。
いろいろ、”.so”のファイルが入っている。
“mysqli.so”もある。(“mysql.so”はない。)
そしたら、php.ini のextensionでこのファイルを指定してあげればいいのかな?
(Windowsでは”.dll”だけど、Linuxでは”.so”らしい。←php.ini 856行目付近より)
php.ini の890行目付近に以下を追記
extension=mysqli.so
で、Apache再起動。
Windowsで成功したファイルをDebianにコピーして、ブラウザで確認。
→Success… localhost via UNIX socket
よし、OK。
ところで、phpinfoのページで、
他の拡張モジュールの項目も表示されてたんだけど、
もしかして、この作業要らない?
(“exteision_dir”に含まれる”.so”ファイルは元々読み込まれる設定?)
php.ini に、さっき書き足した行をコメントアウト。
; extension=mysqli.so
Apache再起動して、ブラウザで確認。
→Success… localhost via UNIX socket
やっぱり、必要のない作業をしてたみたいw
なので、php.ini は元に戻しておきます。
結局、存在しないモジュールの関数を使ってたっていうだけで、
実際はインストールするだけで使えた。
っていう感じだな。
というわけで、
ひとまず、phpからMySQLに接続できるようになった。