windows8.1にvagrantでCentOS6.4+php4+mysql4を作った

目的

Windows8.1(あえて64bitと明記)でvagrantでテストサーバを立てる。
都合上、php4/mysql4/apache2で構成。

用意するもの

vagrant 1.3.5(最新)
VirtualBox 4.2
現在4.3が最新ですが、Windows系64bitではVirtualBox Host-Only Ethernet Adapterがインストールできず積みます。(積みました)
ソースはここ→ https://github.com/mitchellh/vagrant/issues/2392
お好みのboxファイル
今回は http://www.vagrantbox.es から CentOS 6.4のminimalなものを探して、
https://github.com/2creatives/vagrant-centos/releases/tag/v0.1.0 構成のものを拝借。
Windows Powershell
これはお好み。コピペとサイズ変更が可能なDOS窓がほしかったんや。

やること

VirtualBoxをインストール

ダブルクリックのみ

vagrantをインストール

ダブルクリックしてインストール→再起動後、vagrant upまで。

> vagrant add box CentOS6_4 https://github.com/2creatives/vagrant-centos/releases/download/v0.1.0/centos64-x86_64-20131030.box

> mkdir CentOS6_4_php4_mysql4
> vagrant init

CentOS6_4_php4_mysql4/Vagrantfileを開いて

#書き換え
config.vm.box = "base"

↓ ↓

config.vm.box = "CentOS_6_4"

#以下は追記

config.vm.boot_timeout=60

保存したら

> vagrant up

結構待つ。

起動したら、以下の作業はすべてbox内。

> vagrant ssh

httpdほかインストール

sudo基本なので省略。

$ yum -y install httpd-devel bzip2-devel openssl-devel libjpeg-devel libpng-devel gmp-devel ncurses-devel flex gcc make

mysql4のインストール

sudo基本なので省略。

#php5用のmysql-libsが入っていて邪魔なので削除
$ yum remove mysql-libs

#perl-DBIがなくてインストールできないので先に入れる
$ yum install perl-DBI

#mysql4を入れる(チョイスはなんとなく)
$ wget ftp://ftp.pbone.net/mirror/mirror.cheetaweb.com/MySQL/4.0/MySQL-server-4.0.24-0.x86_64.rpm
$ wget ftp://ftp.pbone.net/mirror/mirror.cheetaweb.com/MySQL/4.0/MySQL-client-4.0.24-0.x86_64.rpm
$ wget ftp://ftp.pbone.net/mirror/mirror.cheetaweb.com/MySQL/4.0/MySQL-devel-4.0.24-0.x86_64.rpm
$ wget ftp://ftp.pbone.net/mirror/mirror.cheetaweb.com/MySQL/4.0/MySQL-share-4.0.24-0.x86_64.rpm

#順番に実行する
$ rpm -ivh ftp://ftp.pbone.net/mirror/mirror.cheetaweb.com/MySQL/4.0/MySQL-server-4.0.24-0.x86_64.rpm
$ rpm -ivh ftp://ftp.pbone.net/mirror/mirror.cheetaweb.com/MySQL/4.0/MySQL-client-4.0.24-0.x86_64.rpm
$ rpm -ivh ftp://ftp.pbone.net/mirror/mirror.cheetaweb.com/MySQL/4.0/MySQL-devel-4.0.24-0.x86_64.rpm
$ rpm -ivh ftp://ftp.pbone.net/mirror/mirror.cheetaweb.com/MySQL/4.0/MySQL-share-4.0.24-0.x86_64.rpm

順番に実行する。

すんなり入る。

設定ファイルはfindして、所定の位置にコピーする

$ sudo find / -name "*my*cnf"
$ sudo cp /usr/share/mysql/my-medium.cnf /etc/my.cnf

文字コードの設定など。

php4のインストール

sudo基本なの(ry

configure直前まではこちらのサイト通り。

CentOS6でphp4とphp5を共存させる
(openssl.soの流れも行う)

configreオプションは

$ ./configure
 --prefix=/usr/local/php4
 --with-apxs2=/usr/sbin/apxs
 --with-mysql
 --with-gd
 --with-jpeg-dir=/usr
 --with-png-dir=/usr
 --with-zlib
 --with-bz2
 --with-openssl
 --with-gettext
 --with-gmp
 --with-iconv
 --with-ncurses
 --enable-exif
 --enable-gd-native-ttf
 --enable-memory-limit
 --enable-mbstring
 --enable-mbstr-enc-trans
 --enable-bcmath
 --enable-trans-sid
 --enable-sysvsem
 --enable-sysvshm

–enable-mbregex(これが原因でmakeコケる、たぶん使わない)と–with-sqlite(今回は使わない)を削除した。

※なお、makeまで進んでコケたときは、configre再実行前に

$ make distclean

する。

$ make

$ make install

ここから先も、前述のサイトの通りhttpd.confの書き換え、AddHandlerも行う。

php.iniの設定も忘れずに。

そのあとは

vagrant sshを抜けて、CentOS6_4_php4_mysql4/Vagrantfileを開いて

#行頭の#をとる
config.vm.network :private_network, ip: "192.168.33.10"

保存したらコンソールに戻って

> vagrant reload

httpd、mysqlの起動設定とかもろもろやって、動作確認が取れたら

> vagrant package

で、もう二度とこの面倒くさいことをせずとも、同じ環境がpackage.boxから復帰できるようになります。

めでたしめでたし。

余談

phpからmysqlに接続するときに/tmp/mysql.sock関連のエラーが出たら、mysql起動しているかどうか確認して、起きているならmy.cnfの

socket = /var/lib/mysql/mysql.sock
socket = /tmp/mysql.sock

とする。

「Client does not support authentication protocol」エラーが出たら、
こちらを参考に http://d.hatena.ne.jp/psquare/20061207/p1 なんか腑に落ちないけどテスト環境だからまあいいかな処理を施す。

wordpressの一覧ページでmoreタグで省略したくないとき。

やりたいこと

WordPress 3.7の一覧ページでmoreを無視して全文出力したい。

具体的には、

if(ログインしているか?):
//してます!
全文を表示
else:
//してません!
more以前を表示
endif;

というようなこと。

それを、

<?php include TEMPLATEPATH.'/more_content.php'; ?>

や、get_template_partで全テンプレート共通の処理として読み込もうとしていた。

イレギュラーな使い方なのは承知の上。

問題とか原因とか

index.phpやアーカイブの一覧表示では、


the_content('',false,'');

としても全文表示されず、moreタグがリンクに変換される。

WordPress Codex : the_excerpt の曰く

the_excerpt() と the_content()

敢えてthe_content() 関数を使うことに意味がある場合があります。 それはこの関数が、投稿本文内に <!--more--> タグが使用されているかどうかによって表示内容が変わるためです。<!--more--> タグは、挿入した位置で本文を2つに分けます。メインブログページやアーカイブといったリスト形式のページではこのタグより前の部分のみを表示します。個別投稿/ページでは(もちろん) <!--more--> タグが無視され、本文全てを表示します。

the_content()/get_the_content()を通すと一覧ページではmoreがリンクに変換済みの本文が返ってきて、シングルページでは素の本文が返ってくる。

そのため、[解決済み] single.phpでmoreの前後を別々に表示したい の2レス目のように切り分けたくても、一覧ページではmoreタグ以降は取得できない。

ではどうするか

echo apply_filters('the_content', $post->post_content);

なにがどうあっても、echo $post->post_content;はしたくなかった。ショートコード無視されるし。
フィルター通したら同じ事なのでは?と思っていましたが、あっさりできてしまった。

参考サイト

本当は怖い WordPress – echo $post->post_content; を避ける3つの理由