PHP7の影響

さくらサーバーをPHP7にしたら、このブログが動いていなかった。どうりで最近アクセスが落ちていると思っていたが・・・。

以前作ったプラグインが動作しない件

(1) クラス名と同じ名前のコンストラクタは、NG
(2) 即時stdClass生成は、NG

下記のように修正

<?php
Class MoriPower_StarRating_Comment_Admin {
    /**
    * Constructor.
    */
        var $message;
        var $errorMessage;

  // 変更
  function __construct() {
        /* function MoriPower_StarRating_Comment_Admin () { */
 
  // 追加
  $this->plugin = new stdClass();
   
        // Plugin Details
        $this->plugin->displayName = 'Moripower Star Rating Comment';
        $this->plugin->name = 'mp-starrating-comment';

                 ・・・

子テーマで使っていた親関数が、テーマアップデートとともに使えなくなる

下記の関数に変更
ページネータは、WP_PageNaviプラグインを入れて代用

the_archive_title();
wp_pagenavi();

以上です。

Vagrant+VirtualBOX+CentOS7+Nginx+PHP5.4+MySQL5.6

CentOS7にて、cakephp1.3が動作する環境を構築するという忘備録です。ただしApacheではなく、最新のNginxにしたい。

前提

・Mac(macOS Sierra)
・VirtualBOX:インストール済
・Vagrant:インストール済

仮想サーバ環境構築

・vagrantで、CentOS7までは作成済み。
・vagrant ssh

(1) Nginxインストール

最新安定板は、こちらで確認 => http://nginx.org/
nginx.repoを手動で作成する。

$ vi /etc/yum/yum.reps.d/nginx.repo

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

$ sudo yum -y --enablerepo=nginx install nginx
$ sudo systemctl enable nginx.service
$ sudo systemctl start nginx

Macプラウザから、動いているか確認 http://192.168.33.10/

ここまで楽勝

(2) php5.4 php-fpm

インストールしたてのNginxにて、rootディレクトリ確認してphp動かしてみる。
・設定ファイル: /etc/nginx/conf.d/default.conf
・rootディレクトリ: /usr/share/nginx/html
・phpinfo()を作ってアクセスしてみる。

まだ、php入れてないので、当然動かない。
phpを入れる。CentOS7はデフォルトでphp5.4が入るようです。

$ sudo yum install php php-fpm php-mbstring php-mysql php-gd php-mcrypt
$ php -v
PHP 5.4.16 (cli) (built: Nov  6 2016 00:29:02)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies

$ sudo vi /etc/php.ini
date.timezone = Asia/Tokyo
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8

続いて、php-fpm設定。新たにNginx設定ファイルを作る。

$ systemctl enable php-fpm.service
$ systemctl start php-fpm
$ cd /etc/nginx/conf.d/
$ cp default.conf php54.conf

以下の設定ファイルにしてみた。

$ vi php54.conf
server {
    listen   80;
    server_name php54.dev;

    index index.php index.html index.htm;
    set $root_path '/var/www';
    root $root_path;

    try_files $uri $uri/ @rewrite;

    location @rewrite {
        rewrite ^/(.*)$ /index.php?_url=/$1;
    }

    location ~ \.php$ {
            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include fastcgi_params;
    }

    location ~* ^/(css|img|js|flv|swf|download)/(.+)$ {
        root $root_path;
    }

    location ~ /\.ht {
        deny all;
    }
}
$ systemctl restart nginx php-fpm

忘れず、Mac本体のhostファイルに以下を追記する。

$ vi /etc/hosts
192.168.33.10   php54.dev

さっき作ったphpinfo.phpは、ルート/var/wwwに移動してね。
Macブラウザからアクセス。

http://php54.dev/phpinfo.php
タイムアウトで、繋がらない・・・・。

仮想サーバにて、確認してみる。

$ curl php54.dev/phpinfo.php
・・・・htmlコード(なんだか動いてるみたい)・・・・

ファイヤーウォールか?
Active: inactive (dead) にする

$ systemctl stop firewalld
$ systemctl status firewalld
firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled)
   Active: inactive (dead) since Thu 2017-08-24 12:41:37 UTC; 5s ago
  Process: 16622 ExecStart=/usr/sbin/firewalld --nofork --nopid $FIREWALLD_ARGS (code=exited, status=0/SUCCESS)
 Main PID: 16622 (code=exited, status=0/SUCCESS)

$ systemctl disable firewalld.service
$ systemctl is-enabled firewalld
disabled


繋がった!

*それでも繋がらない場合は、ブラウザキャッシュをクリアすると良いかも。

(3) MySQL5.6インストール

CentOS7には、既にmariadbが入っている可能性があるので削除する。

$ yum remove mariadb-libs
$ rm -rf /var/lib/mysql/

下記のサイトにて該当リボジトリを探す。(Red Hat Enterprise Linux)
https://dev.mysql.com/downloads/mysql/
ペンギンのと絵ころをクリックし、該当レポジトリを調べる。

Red Hat Enterprise Linux 7 / Oracle Linux 7 (Architecture Independent), RPM Package
(mysql57-community-release-el7-11.noarch.rpm)

レポジトリファイルは、MySQL5.7が有効になっているのでMySQL5.6に変更する。
yumでインストールする。

$ yum localinstall http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
$ yum repolist all
$ vi /etc/yum.repos.d/mysql-community.repo
# Enable to use MySQL 5.6
enabled=1
# Enable to use MySQL 5.7
enabled=0
$ yum install mysql mysql-devel mysql-server mysql-utilities

MySQLを起動

$ systemctl enable mysqld.service
$ systemctl start mysqld
$ mysql -uroot -p
mysql > show databases;

(4) adminerで繋げてみる

mariadbをアンイントールした時に外れたphp-mysql、その他必要なものを入れる。

$ yum install php-mysql php-gd php-pear

下記サイトにて最新バージョンを調べて、ルートディレクトリに直接ダウンロードしてしまう。
https://www.adminer.org/

$ cd /var/www
$ sudo wget https://github.com/vrana/adminer/releases/download/v4.3.1/adminer-4.3.1.php

Mac本体のブラウザからアクセスする。
http://php54.dev/adminer-4.3.1.php

以上です。

さくら WordPress サブドメインSSL化

さくらサーバで、マルチドメインでWordpressを運用して、後からSSL化したときの覚書です。(スマートな方法なのか?分からないが何となくうまく行った。)

■やりたいこと
マルチドメイン2つ(サブドメインで構成)のうち、wwwの方のみSSL化したい。
・www.XXXX.jp
・blog.XXXX.jp

(1) まずは、さくらでRapidSSLを申請してSSL化する。
注意点
・RapidSSL申請のときは、www付き(www.XXXX.jp)で申請する。
・ドメイン設定にて「XXXX.jp」の方だけSNI設定する。

(2) 取りあえず、SSLが有効か調べる。
・ワードプレスをインストールしたディレクトリ(wp-config.phpと同じディレクトリ)に、適当にhtmlファイル(test.htmlなど)を作る。
・www付、www無しでhttpsでアクセスしてみる。
 https://XXXX.jp/test.html
 https://www.XXXX.jp/test.html

(3) データベースで直接optionsテーブルを修正
・「siteurl」、「home」、「fileupload_url」のURLをhttpsにする。マルチサイトなのでoptionsテーブルは複数あるが、https化したい方のテーブルのみ変更する。

(4) .htaccessを修正
・www.XXXX.jpのときのみ、httpsにリダイレクトする。
さくら用のWordpressをSSL化プラグインからパクったのを少し修正した。

# BEGIN Force SSL for SAKURA
# RewriteしてもHTTPS環境変数を有効にする
SetEnvIf REDIRECT_HTTPS (.*) HTTPS=$1

# 常時HTTPS化(HTTPSが無効な場合リダイレクト)
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{ENV:HTTPS} !on
RewriteCond %{REQUEST_URI} !/wp-cron\.php$
RewriteCond %{HTTP_HOST} ^www\.XXXX\.jp
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
# END Force SSL for SAKURA

(5) www.XXXX.jpに接続した時にループするので、wp-config.phpを修正
参考:https://www.craneto.co.jp/archives/409/

if (isset($_SERVER['HTTP_X_SAKURA_FORWARDED_FOR']) && ($_SERVER['HTTP_HOST'] !== 'blog.XXXX.jp')) {
  // 'www.example.com' はダミーにつき置き換えください
  $_SERVER['HTTPS'] = 'on';
  $_ENV['HTTPS'] = 'on';
  $_SERVER['HTTP_HOST'] = 'www.XXXX.jp';
  $_SERVER['SERVER_NAME'] = 'www.XXXX.jp';
  $_ENV['HTTP_HOST'] = 'www.XXXX.jp';
  $_ENV['SERVER_NAME'] = 'www.XXXX.jp';
}

以上です。

※ダッシュボードもちゃんとwww.XXXX.jpは、httpsでOKでした。blog.XXXX.jpのダッシュボードは、通常のhttp接続でOK!

さくらサーバ Subversion 1.9.5

Subversion 1.9系が出ているようなので、さくらサーバにインストールしてみます。

ダウンロード先
http://subversion.apache.org/download.cgi#recommended-release

1. 最新版ダウンロード
・さくらにTelnet等でログイン
・ダウンロードして解凍

% mkdir local
% mkdir local/src
% cd local/src
% wget http://apache.mirrors.pair.com/subversion/subversion-1.9.5.tar.gz
% tar xvf subversion-1.9.5.tar.gz

2. Makefile、Subversionインストール

% cd ..
./configure -prefix=$HOME/local -without-serf -without-berkeley-db -with-apr=$HOME/local -with-apr-util=$HOME/local
% make
% make install

※aprがない場合は、こちらを参照

さくらサーバ Subversion1.8.10

3.パスを通してバージョン確認、レポジトリ作成

% cd
% vi .cshrc
--> $HOME/local/bin にパスを通す
% source .cshrc
% svn --version
svn, version 1.9.5 (r1770682)
   compiled Jun 8 2017, 11:23:02 on x86_64-unknown-freebsd9.1
% svnadmin create quicktest

CentOS グループ関連コマンド

■全てのグループ一覧、グループに所属するユーザ
$ getent group

■特定のグループ(xxxxx)に所属するユーザ
$ getent group xxxxx

■ユーザ(user)をグループ(group)に登録
$ gpasswd -a user group

■ユーザ(user)をグループ(group)から削除
$ gpasswd -d user group

■ディレクトリのみパーミッション変更
$ find . -type d -print | xargs chmod 755

■ファイルのみパーミッション変更
$ find . -type f -print | xargs chmod 755