さくらのVPSプラン乗り換え計画(13)

PHP をインストールする。

[takatoh@tk2-254-36564 ~]$ sudo yum install php-cli php-mysql php-common php php-cgi php-fpm php-dg php-mbstring

「パッケージ php-dg は利用できません。」て出たけど、php-dg って確か画像処理のライブラリだよな。たぶん画像使わないからいいか。
インストールの確認。

[takatoh@tk2-254-36564 ~]$ php -v
PHP 5.3.3 (cli) (built: Mar 22 2017 12:27:09) 
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

設定ファイルを編集。

[takatoh@tk2-254-36564 ~]$ sudo cp /etc/php.ini /etc/php.ini.orig
[takatoh@tk2-254-36564 ~]$ sudo vi /etc/php.ini

エラーログの場所を変更。

日本語の設定。

http_input。

detect_order。

expose_php を Off に。

最後にタイムゾーン。

php-fpm の設定。
設定ファイルは /etc/php-fpm.d/www.conf。
使用するポート。デフォルトのまま。

許可するクライアントの IP アドレス。これも localhost だけなのでデフォルト。

php-fpm サービスの実行ユーザとグループ。nginx としたので、あとで作る。

php-fpm のプロセス数を定量にする。

最大子プロセス数の設定。

php-fpm が受け付ける最大要求数。これを超えると子プロセスが再起動する。

これで編集は終了。
実行ユーザを nginx としたので作る。

[takatoh@tk2-254-36564 ~]$ sudo useradd nginx
[sudo] password for takatoh: 
useradd: ユーザ 'nginx' は既に存在します

あれ、あった。
じゃあ、php-fpm を起動。ついでに自動起動するように設定。

[takatoh@tk2-254-36564 ~]$ sudo /etc/init.d/php-fpm start
php-fpm を起動中:                                          [  OK  ]
[takatoh@tk2-254-36564 ~]$ sudo chkconfig php-fpm on
[takatoh@tk2-254-36564 ~]$ sudo chkconfig --list php-fpm
php-fpm        	0:off	1:off	2:on	3:on	4:on	5:on	6:off

よし、最後にテストしてみよう。Nginx のデフォルトのデータ置き場が /usr/share/nginx/html になってるので、そこに phpinfo.php ファイルを置く。

これでブラウザでアクセスしてみると……あれ?ダメだ。
そうか。Nginx に PHP 用の設定をしてないからか。デフォルトの設定ファイルに追記。

これでどうだ!
OK。ちゃんと表示された。

[追記]

インストールできなかった php-dg、dg じゃなくて gd だった。php-gd。
ま、どっちにしろいいか。

[更に追記]

とりあえず、php-gd もインストールしておいた。

PHPをインストールしてNginxで動くようにする

このページが参考になった。
 cf. nginx + php-fpmでphpを動かす – Qiita

インストール

takatoh@wplj $ sudo apt install php-fpm

php-fpmサービスの確認

takatoh@wplj $ systemctl status php7.0-fpm
● php7.0-fpm.service - The PHP 7.0 FastCGI Process Manager
   Loaded: loaded (/lib/systemd/system/php7.0-fpm.service; enabled; vendor prese
   Active: active (running) since 土 2017-02-25 17:00:15 JST; 47s ago
 Main PID: 16510 (php-fpm7.0)
   Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/se
   CGroup: /system.slice/php7.0-fpm.service
           ├─16510 php-fpm: master process (/etc/php/7.0/fpm/php-fpm.conf)      
           ├─16514 php-fpm: pool www                                            
           └─16515 php-fpm: pool www                                            

 2月 25 17:00:15 wplj systemd[1]: Starting The PHP 7.0 FastCGI Process Manager...
 2月 25 17:00:15 wplj systemd[1]: Started The PHP 7.0 FastCGI Process Manager.

active (running) とか出てるからこれでいいのかな。

socket

/etc/php/7.0/fpm/pool.d/www.conf にソケットの記述あり。

takatoh@wplj $ ls -l /run/php/php7.0-fpm.sock
srw-rw---- 1 www-data www-data 0  2月 25 17:00 /run/php/php7.0-fpm.sock

Nginxから使えるようにする

/etc/nginx/sites-available/default を編集。

で、Nginx の設定ファイルを読みなおし。

takatoh@wplj $ sudo service nginx reload

動作確認

/var/www/html に phpinfo.php ファイルを作る。

ブラウザで確認。

OK。

PHPで$foo = ” || ‘foo’;とやると

$foo は 1 になる。
1 になるというか、真になってそれを出力すると 1 になる、といったほうがいいか。論理演算 || の結果は真偽値(この場合は真)で、echo で出力すると 1 になるということらしい。

もともとの話をすると、フォームからポストされたデータが空文字列だった場合にデフォルト値を設定しようとしたこと。こんな感じ:

上に書いたとおり、これだと $name を出力すると 1 になってしまう。

で、こう書けばいいようだ。

1行増えるのがめんどくさいな。

PHPで掲示板作った

つい先日 C++ の本を読み始めたばかりだけど、この3連休はにわかPHPerになっていた。
コトのはじめは、自宅サーバに掲示板を設置しようとしたこと。ググってみると無料で配布されている掲示板アプリはいろいろとあるんだけど、どうにも気に入ったものがない。メールやホームページのアドレスなんかいらないんだよ。文字の色を変える機能なんかもいらない。一方でメッセージにコメント(reply)を付けたい……といった希望に沿うものがなかなかなくて、おまけに 2つほど試したみたらきちんと動かない(設定のせいかもしれいけど)。
結局、それじゃちょっと自分で作ってみようか、ということになった。配布されている掲示板アプリは大抵が PHP だった(あとちょっとだけ Perl)ので、見様見真似で PHP で書いてみることにしたわけだ。
で、作ってみたのがこれ:

 cf. miniBBS – GitHub/takatoh

PHP についてほとんど何も知らないところから3日で作ったので、ホント基本的な機能しかない。メッセージがポストできて、そのメッセージにコメントが付けられるだけ。削除機能はなし。管理者用ログイン機能もなし。まあ、このへんは気が向いたらあとから実装するかも。

PHP についての印象だけど、良くも悪くも Web 用の言語だなあといったところ。もうちょっと具体的には:

  • 言語自体がテンプレートエンジンになってる感じ
  • 変数名にいちいち $ マークめんどくさい
  • 文末のセミコロンもめんどくさい
  • クラスのメンバ変数にアクセスするのにいちいち $this-> 付けなきゃいけないのめんどくさい
  • 文字列分割する関数の名前が explode ってなんだよ
  • でも $_GET や $_POST は簡単で便利

上にも書いたとおり、ほとんど何も知らない状態から始めたわりには、特に引っかかるような概念もなく、掲示板くらいは作れるようになった。取っ付き易い言語ではあるのかもね。

NginxのユーザディレクトリでPHPを動かす

Nginx の設定ファイルの server セクションで次のように設定する。

キモは User dir (PHP) のセクションを For PHP のセクションよりも前に書くこと。そうしないとブラウザで PHP のファイルにアクセスしても Not found になってしまう。なぜなら location ~ \.php$ に先にマッチしてしまってファイルが見つからないから(たぶん)。

さくらVPSにPHPをインストールする

PHPをインストール

これも yum コマンドでインストールできる。

[takatoh@www2465uo ~]$ sudo -s
[sudo] password for takatoh: 
[root@www2465uo takatoh]# yum install php-cli php-mysql php-common php php-cgi php-fpm php-gd php-mbstring
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: ftp.tsukuba.wide.ad.jp
 * epel: ftp.kddilabs.jp
 * extras: ftp.tsukuba.wide.ad.jp
 * updates: ftp.tsukuba.wide.ad.jp
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package php.x86_64 0:5.3.3-27.el6_5.1 will be installed
--> Processing Dependency: httpd-mmn = 20051115 for package: php-5.3.3-27.el6_5.1.x86_64
--> Processing Dependency: httpd for package: php-5.3.3-27.el6_5.1.x86_64
---> Package php-cli.x86_64 0:5.3.3-27.el6_5.1 will be installed
---> Package php-common.x86_64 0:5.3.3-27.el6_5.1 will be installed
---> Package php-fpm.x86_64 0:5.3.3-27.el6_5.1 will be installed
---> Package php-gd.x86_64 0:5.3.3-27.el6_5.1 will be installed
---> Package php-mbstring.x86_64 0:5.3.3-27.el6_5.1 will be installed
---> Package php-mysql.x86_64 0:5.3.3-27.el6_5.1 will be installed
--> Processing Dependency: php-pdo(x86-64) for package: php-mysql-5.3.3-27.el6_5.1.x86_64
--> Running transaction check
---> Package httpd.x86_64 0:2.2.15-31.el6.centos will be installed
--> Processing Dependency: httpd-tools = 2.2.15-31.el6.centos for package: httpd-2.2.15-31.el6.centos.x86_64
--> Processing Dependency: apr-util-ldap for package: httpd-2.2.15-31.el6.centos.x86_64
---> Package php-pdo.x86_64 0:5.3.3-27.el6_5.1 will be installed
--> Running transaction check
---> Package apr-util-ldap.x86_64 0:1.3.9-3.el6_0.1 will be installed
---> Package httpd-tools.x86_64 0:2.2.15-31.el6.centos will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package            Arch        Version                      Repository    Size
================================================================================
Installing:
 php                x86_64      5.3.3-27.el6_5.1             updates      1.1 M
 php-cli            x86_64      5.3.3-27.el6_5.1             updates      2.2 M
 php-common         x86_64      5.3.3-27.el6_5.1             updates      526 k
 php-fpm            x86_64      5.3.3-27.el6_5.1             updates      1.1 M
 php-gd             x86_64      5.3.3-27.el6_5.1             updates      107 k
 php-mbstring       x86_64      5.3.3-27.el6_5.1             updates      456 k
 php-mysql          x86_64      5.3.3-27.el6_5.1             updates       82 k
Installing for dependencies:
 apr-util-ldap      x86_64      1.3.9-3.el6_0.1              base          15 k
 httpd              x86_64      2.2.15-31.el6.centos         updates      824 k
 httpd-tools        x86_64      2.2.15-31.el6.centos         updates       73 k
 php-pdo            x86_64      5.3.3-27.el6_5.1             updates       76 k

Transaction Summary
================================================================================
Install      11 Package(s)

Total download size: 6.6 M
Installed size: 22 M
Is this ok [y/N]: y
Downloading Packages:
(1/11): apr-util-ldap-1.3.9-3.el6_0.1.x86_64.rpm         |  15 kB     00:00     
(2/11): httpd-2.2.15-31.el6.centos.x86_64.rpm            | 824 kB     00:03     
(3/11): httpd-tools-2.2.15-31.el6.centos.x86_64.rpm      |  73 kB     00:00     
(4/11): php-5.3.3-27.el6_5.1.x86_64.rpm                  | 1.1 MB     00:05     
(5/11): php-cli-5.3.3-27.el6_5.1.x86_64.rpm              | 2.2 MB     00:09     
(6/11): php-common-5.3.3-27.el6_5.1.x86_64.rpm           | 526 kB     00:02     
(7/11): php-fpm-5.3.3-27.el6_5.1.x86_64.rpm              | 1.1 MB     00:05     
(8/11): php-gd-5.3.3-27.el6_5.1.x86_64.rpm               | 107 kB     00:00     
(9/11): php-mbstring-5.3.3-27.el6_5.1.x86_64.rpm         | 456 kB     00:01     
(10/11): php-mysql-5.3.3-27.el6_5.1.x86_64.rpm           |  82 kB     00:00     
(11/11): php-pdo-5.3.3-27.el6_5.1.x86_64.rpm             |  76 kB     00:00     
--------------------------------------------------------------------------------
Total                                           193 kB/s | 6.6 MB     00:34     
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : php-common-5.3.3-27.el6_5.1.x86_64                          1/11 
  Installing : php-cli-5.3.3-27.el6_5.1.x86_64                             2/11 
  Installing : php-pdo-5.3.3-27.el6_5.1.x86_64                             3/11 
  Installing : httpd-tools-2.2.15-31.el6.centos.x86_64                     4/11 
  Installing : apr-util-ldap-1.3.9-3.el6_0.1.x86_64                        5/11 
  Installing : httpd-2.2.15-31.el6.centos.x86_64                           6/11 
  Installing : php-5.3.3-27.el6_5.1.x86_64                                 7/11 
  Installing : php-mysql-5.3.3-27.el6_5.1.x86_64                           8/11 
  Installing : php-mbstring-5.3.3-27.el6_5.1.x86_64                        9/11 
  Installing : php-gd-5.3.3-27.el6_5.1.x86_64                             10/11 
  Installing : php-fpm-5.3.3-27.el6_5.1.x86_64                            11/11 
  Verifying  : php-mbstring-5.3.3-27.el6_5.1.x86_64                        1/11 
  Verifying  : php-cli-5.3.3-27.el6_5.1.x86_64                             2/11 
  Verifying  : httpd-2.2.15-31.el6.centos.x86_64                           3/11 
  Verifying  : php-gd-5.3.3-27.el6_5.1.x86_64                              4/11 
  Verifying  : php-5.3.3-27.el6_5.1.x86_64                                 5/11 
  Verifying  : apr-util-ldap-1.3.9-3.el6_0.1.x86_64                        6/11 
  Verifying  : php-pdo-5.3.3-27.el6_5.1.x86_64                             7/11 
  Verifying  : httpd-tools-2.2.15-31.el6.centos.x86_64                     8/11 
  Verifying  : php-mysql-5.3.3-27.el6_5.1.x86_64                           9/11 
  Verifying  : php-fpm-5.3.3-27.el6_5.1.x86_64                            10/11 
  Verifying  : php-common-5.3.3-27.el6_5.1.x86_64                         11/11 

Installed:
  php.x86_64 0:5.3.3-27.el6_5.1         php-cli.x86_64 0:5.3.3-27.el6_5.1      
  php-common.x86_64 0:5.3.3-27.el6_5.1  php-fpm.x86_64 0:5.3.3-27.el6_5.1      
  php-gd.x86_64 0:5.3.3-27.el6_5.1      php-mbstring.x86_64 0:5.3.3-27.el6_5.1 
  php-mysql.x86_64 0:5.3.3-27.el6_5.1  

Dependency Installed:
  apr-util-ldap.x86_64 0:1.3.9-3.el6_0.1    httpd.x86_64 0:2.2.15-31.el6.centos
  httpd-tools.x86_64 0:2.2.15-31.el6.centos php-pdo.x86_64 0:5.3.3-27.el6_5.1  

Complete!

ちゃんとインストールできたかテスト。

[root@www2465uo takatoh]# php -v
PHP 5.3.3 (cli) (built: Aug  6 2014 05:54:27) 
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

5.3.3 がインストールされているのがわかる。

PHPの設定

/etc/php.ini ファイルを編集する。

[root@www2465uo takatoh]# cp /etc/php.ini /etc/php.ini.orig
[root@www2465uo takatoh]# vim /etc/php.ini

編集するのは次の箇所。まずはエラーログの場所を変更。

日本語の設定。

http_input。

detect_order。

expose_php を Off に。

最後にタイムゾーン。

これで PHP の設定は終了。Nginx を再起動する。

[root@www2465uo takatoh]# service nginx restart
nginx を停止中:                                            [  OK  ]
nginx を起動中:                                            [  OK  ]

php-fpmの設定

php-fpm てのは、PHP を Fast-CGI で動かすものらしい。設定ファイルは /etc/php-fpm.d/www.conf。

使用するポート。これはデフォルトのまま。

許可するクライアントの IP アドレス。これも localhost だけなのでデフォルト。

php-fpm サービスの実行ユーザとグループ。ここでは nginx としたので、あとで作る。

php-fpm のプロセス数を定量にする。

最大子プロセス数の設定。

php-fpm が受け付ける最大要求数の設定。これを超えると子プロセスが再起動する。

これで、編集は終了。

さて、実行ユーザを nginx としたので、それを作る。

[root@www2465uo takatoh]# useradd nginx
useradd: ユーザ 'nginx' は既に存在します

あれ、そうなの。Nginx をインストールした時に作られたのかな。
じゃあこのまま php-fpm を起動。ついでに自動起動するようにしておく。

[root@www2465uo takatoh]# /etc/init.d/php-fpm start
php-fpm を起動中:                                          [  OK  ]
[root@www2465uo takatoh]# chkconfig php-fpm on

Nginxの設定

今度は Nginx の設定だ。編集するファイルは /etc/nginx/nginx.conf。といっても変えたのは1行だけ。あとはデフォルトのまま。

つぎは、Fast-CGI のための設定。ファイルは /etc/nginx/fastcgi_params だけど、このデフォルトのファイルをそのまま使うので編集はなし。

さて、あとはバーチャルホストの設定なんだけど、まだドメインを取っていないので、ここでいったん終了。

参考サイト

 cf. さくらのVPS入門 – ドットインストール
 cf. CentOS,ScientificLinuxでLAMP(Nginx+MySQL+PHP)インストールからWordPressを動かすまで(Nginx編)