MySQL 互換MariaDB でWordPress の初期設定

前回の続きで、今回はMySQL 互換のMariaDB でデータベースとユーザーを作成していきます。早速、

# mysqladmin create 'databasename' -u root -p

データベース名、’databasename’ は予め考えたオリジナルの名前(例:wordpress , didital_life, casual など)で何でも良いです。

mariaDB にログインして一意のユーザー名、’username’に対してデータベースのパスワードを設定して、権限を与えていきます。

# mysql -u root -p
# mariaDB [<none>] GRANT ALL PRIVILEGES ON 'databasename'.* TO 'username'@localhost IDENTIFIED BY 'password';

Query OK , 0 rows affected と表示されればOKです。

# mariaDB[<none>] FLUSH PRIVILEGES;

Query OK 。exit または\q でプロンプトから出ます。

 

前回のページからの遷移画面、wp-admin/install.php に、WordPress のタイトル、管理ユーザー名、メールアドレスを入力、パスワードをメモ帳などに記録、[インストール] ボタンをクリックして、ユーザー名と先ほどメモしたパスワードを入力、ログインすればブログサーバーの初期設定、完了です。

 

 

参考URL: WordPress のインストール – WordPress Codex 日本語版

お使いのサーバーの PHP では WordPress に必要な MySQL 拡張を利用できないようです。

前回、構築したLAMP にWordpress をインストール。

# cd /var/www/html
# wget https://ja.wordpress.org/latest-ja.tar.gz
# tar zxvf latest-ja.tar.gz
# chown -R apache:apache wordpress/

ブラウザのアドレスバーから、http://localhost/wordpress/ でインストール画面を表示しようとして、PHP が500 サーバーエラーを吐きまくるので解決方法を見つけるまで半日掛かりました。

初めは /etc/httpd/conf/httpd.conf の

DirectoryIndex index.html index.php

を追加し忘れたと思い修正しましたが(もちろん必須の項目ですが。)500 エラー。

<Directory "/var/www/html">
  Options indexes ExecCGI

の追記はもちろん、必要ですがエラーが続きました。/etc/httpd/logs/error.log も見ましたがIE11 ではエラーが表示されず、Edge で閲覧キャッシュを削除するとブラウザに件のメッセージが表示されました。

件のキーワードで検索すると、php-mysql のインストールとphp.ini の設定が欠けていたようです。

一旦、yum remove php … してphp-mysql を再インストール。

# yum install --enablerepo=remi, remi-php70 php php-devel php-mysql php-mbstring php-pdo php-gd

/etc/php.ini に、extension = mysql.so を追記。

# systemctl restart httpd

で、httpd を再起動。すると、WordPress のwp-admin/setup-config.php が無事、表示されました。

参考URL: https://mostworks.wordpress.com/2013/02/16/2013-2-yuminstall-php-mysql-module/

CentOS7 にPHP7 MariaDB をyum でインストール

CentOS7 最新版は、CentOS Linux7.3(2017年6月11日現在)CentOS7-x86_64-DVD-1611.iso をVirtualBox にインストール。

 

インストール画面で

[ネットワークとホスト名] でネットワークアダプターを[ON] にします。

[ソフトウェアの選択] で[ベーシック Web サーバー] を選択し、

・Java プラットフォーム
・MariaDB データベースクライアント
・PHP サポート
・ Perl – Web 向け
・Python(お好みで)
・Web サーブレットエンジン
・開発環境
にチェックをして[完了] をクリックします。

[インストール先] はカスタムパーティションで、

[デバイスタイプ] 標準パーティション
[ファイルシステム] ext4

パーティションは、
/boot 1024MB sda1
/          残り全部 sda2
swap  sda3

とし、完了をクリック、ユーザーとパスワードを作成。

 

[インストールの開始] ボタンをクリックすると始まります。

Virtualbox で[起動] ボタンを押すとサーバーが起動しコンソールが表示されます。早速、epel remi リポジトリをインストール。

# yum install epel-release
# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

PHP7 をインストール

# yum install --enablerepo=remi,remi-php70 php php-devel php-mbstring php-pdo php-gd

/etc/php.ini を編集

基本は、変更すべき php.ini の設定項目 | // sakura note を参考に以下の行を修正。

mbstring.detect_order = UTF-8,SJIS,EUC-JP

(Mysql) MariaDB をインストール

# yum install mariadb mariadb-server mariadb-devel
# systemctl start mariadb
# MySQL_secure_installation

MariaDB の初期設定、基本[Yes] で。
httpd.conf を編集。

# vi /etc/httpd/conf/httpd.conf

Servername localhost:80 (追記

<Directory "/var/www/html">
 AllowOverride All(追記

その他、初期設定は以下のページを参考にしました。
http://www.server-memo.net/centos-settings/centos7/hostname.html#hostnamectl

ホストネーム設定、Apacheの起動。

# hostnamectl set-hostname localhost
# systemctl restart httpd

VirtualBox の[設定]-[ネットワーク]ペインの[アダプター1]-[ポートフォワーディング]の項目を追加。

ホスト80 ゲスト80 を設定して、ホスト側のWindowsのC:\Windows\System32/Drivers/etc ファイルをメモ帳で開き、 ip addr show コマンドでDHCP取得されたアドレスをホストネームと併記して保存。ブラウザで、http://localhost/ と入力するとApacheテストページが表示されます。

 

以上、下記URLを参考にしました。

CentOS7のhttpd設定で詰まった点
http://qiita.com/sky_y/items/b92fa6ba57d926f25370

CentOS 7 で sshd のポートを変更する(firewalld, SELinuxの設定)

CentOS7にPHP7をyumでインストールする – Qiita
http://qiita.com/inakadegaebal/items/b57cf10339978d638305
LAMP環境(CentOS 7, Apache, MariaDB, PHP 7)を構築する – みそしりんぐ

WordPress の画像編集

件のキーワードで検索したブログで解決しました。ありがたや~m(_ _)m

/pass/to/wordpress/wp-include/class-wp-image-editer-gd.php の450行 switch 文の手前に、

while(@ob_end_clean());

を追加すると画像が編集できるようになりました。

参考URL:【備忘録】WordPressの画像編集で画像が表示出来なくなった場合の対応方法 – Dream Seed

PHPのバージョンアップ

コンソールから php -v と叩くとPHP 5.6.14 と表示されるのに、phpinfo で確認するとPHP 5.6.27 とバージョンが違う不思議。原因は、./configure の –bindir=/ オプションで/usr/bin と /usr/local/bin の違う場所にphpをビルド、インストールしていたからでした。めんどくさいので最新版のマイナーバージョン 5.6.30(2017年4月12日現在)をソースから–bindir=/usr/local/bin にビルド、インストール。

php -v すると、

PHP Startup: Unable to load dynamic library ...

と縦スクロールのエラーメッセージがだらだらと・・・。
ここは、/usr/lib64/php/modulesディレクトリから拡張ライブラリをまるっとコピー。

# cp /usr/lib64/php/modules/*.so /path/to/extension_dir/

再び php -v 。今度も縦スクロールのエラーが・・・。

Module 'PDO' already loaded in Unknown on line 0

./configure オプションで –with-config-file-scan-dir=/ を指定して.iniファイルがライブラリを2度読みしていたのが悪かったみたいです。

指定なしで再ビルド。

# ./configure --with-apxs2=/usr/local/apache2/bin/apxs --includedir=/usr/include --bindir=/usr/local/bin --with-openssl=/usr/local/ssl --with-mysql --with-mysqli --with-jpeg-dir=/usr --with-png-dir=/usr --with-freetype-dir=/usr --with-gd --with-zlib --with-curl --with-xsl --enable-gd-native-ttf --with-gettext --with-libxml-dir=/usr/bin/xml2-config --enable-mbstring

# make && make install

3回目の正直。php -v 今度は正常に PHP 5.6.30 と表示されました。

GDの描画とテキストの例

PHPの拡張モジュール、GDでも描画関数が用意されており$image=imagecreatefromjpeg(filename) で既存のjpegファイルを読み込めるほか、imageline, imagefilledrectangle, imagearc 関数で線、矩形、円弧などを描画できます。(例:black.php

<?php
$image = imagecreate(200,200);
$white = imagecolorallocate($image, 0xFF, 0xFF, 0xFF);
$black = imagecolorallocate($image, 0x00, 0x00, 0x00);
imagefilledrectangle($image, 50, 50, 150, 150, $black);
imagestring($image, 5, 50, 160,"A Black Box", $black);
header("Content-Type: image/png");
imagepng($image);
?>

imagestringは、imagestring(image, font-id, x, y, text, color) で定義されテキストを画像に追加します。font-idは組み込みのフォントidを[1-5] で指定します。

imagefilledrectangle とimagestring の color パラメータを$black から$white に改変してみます。(例:white.php

<?php
$image = imagecreate(200,200);
$black = imagecolorallocate($image, 0x00, 0x00, 0x00);
$white = imagecolorallocate($image, 0xFF, 0xFF, 0xFF);
imagefilledrectangle($image, 50, 50, 150, 150, $white);
imagestring($image, 5, 50, 160,"A White Box", $white);
header("Content-Type: image/png");
imagepng($image);
?>

PHP リロードしない

Google 先生にPHPでページの自動リロード方法を聞いた処、

<?php
    $rel = $_GET['reload'];
    if ($rel == 'true') {
      header("Location: " . $_SERVER['PHP_SELF']);
    }
    /*デバッグ用*/
    echo($_SERVER['PHP_SELF'].'<br/>');
    echo($_SERVER['SCRIPT_NAME'].'<br/>');
?>

header()を書き込むと良いとのことで試してみましたがダメでした。(たぶん、GETするフラグの作り方が分からないことが分かっている。迷推理)次にJavaScript でリファラを参照して特定のページからアクセスした場合にlocation.reload() するとしてみましたが、何故か無限ループになります。

var myRef = document.referrer;
if (myRef.indexOf("http://hoge.jp/foo.php") == 0) {
  location.reload();
  Object.defineProperty(document,"referrer",{value:"null"});
}

http://oshiete.goo.ne.jp/qa/77766.html で紹介されていた方法で

rload = setTimeout( "location.reload()", 100 );
 clearTimeout( rload );

も試しましたがリロードしませんでした。結局、HTMLで手動リンク

<a href="./bar.php">リロード</a>

が丸いと思いました。(粉ミカン

https://www.ipentec.com/document/document.aspx?page=php-page-reload

PHP のGDをビルド

PHP をビルドしたとき、–with-gd-sharedで拡張モジュールに追加したつもりでした、がphpinfo を確認するとGDがインストールされていないようでした。(apache error.log がImageCreateFromJpeg()でエラーを出すので。)改めてGDをビルドしました。

wget https://github.com/libgd/libgd/releases/download/gd-2.2.3/libgd-2.2.3.tar.gz
./configure --prefix=/usr/local
make && make install

してGDをビルド、PHPを–with-gd(=shared では上手く行かなかった)オプションでビルドしましたがlibwebp、gd-lastでコケます。yum でgdのパッケージが足りないのだろうと思い、remi リポジトリを導入

wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
rpm -Uvh remi-release-6.rpm

して

yum --enablerepo=epel,remi install libwebp
yum install gd-last-2.2.3-1.el6.remi.x86_64
yum install gd-devel
yum --enablerepo=remi install php56-php-gd.x86_64

して再びビルドしたところ phpinfo でGDを確認できました。

WordPressのメディアライブラリ

WordPress のメディアライブラリが表示されず、[メディアの追加]をしても画像が挿入できないことがあります。

当方の環境でWordpressの新バージョンをインストールすると発生する不具合のようです。Google先生によると、/wordpress/wp-admin/admin-ajax.php のとある行を編集すると直るそうです。

@header( 'Content-Type: text/html; charset=' . get_option( 'blog_charset' ) );
@header( 'X-Robots-Tag: noindex' );

上記コードを以下のように編集して保存します。

if(in_array($_POST['action'], array('query-attachments', 'send-attachment-to-editor'))){
@header('Content-Type: application/json; charset=' . get_option('blog_charset'));
}else{
@header( 'Content-Type: text/html; charset=' . get_option( 'blog_charset' ) );
}
@header( 'X-Robots-Tag: noindex' );

 

参考URL:WordPressの投稿時のメディアライブラリで画像が表示されない、http://karinto.in/2014/05/19/wordpress/

Amazon でポチった

本が自宅に届きましたよ。開眼! JavaScriptは読んでいて面白い。

定番のO’REILLY(オライリー)品質。他にJavaScript : The Good Parts 、JavaScriptパターンも見てみたい、見てみたくない?

JavaScript 第6版
David Flanagan
¥ 4,536javascript_

 

JavaScriptリファレンス 第6版 
David Flanagan
¥ 3,024

51hqwyi1aul__sx352_bo1204203200_

開眼! JavaScript ―言語仕様から学ぶJavaScriptの本質 
Cody Lindley
¥ 2,376

javascript

JSONを扱うならPHPの方が良いかもね。

JSON(JavaScript Object Notation) は、ブラウザとサーバー間でデータをやり取りするために使われる一般的なデータフォーマットである。JSONは本質的に軽く、使いやすく、JavaScript で解析しやすい。(jQuery クックブック p.415)

PHP のオブジェクトとJSONのオブジェクトとの間での直接の変換は出来ません。(中略) しかし、JsonSerializableインターフェイスを使えば、オブジェクトをお好みの形式のJSONデータに変換できます。(プログラミングPHP第3版 p.350)

だそうです。

プログラミングPHP 第3版
Kevin Tatroe
¥ 4,104

php