読者です 読者をやめる 読者になる 読者になる

エロサイトの作り方

2013年11月から勉強しながらエロサイトを作っています。

Ubuntu 12.04のPHPを最新にする

PHP

GMO VPSのUbuntu 12.04に入っているPHPのバージョンが古いので、バージョンアップを試みました。

更新前のバージョン

OS

$ cat /etc/lsb-release

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=12.04
DISTRIB_CODENAME=precise
DISTRIB_DESCRIPTION="Ubuntu 12.04.3 LTS"

PHP

$ php -v

PHP 5.3.10-1ubuntu3.8 with Suhosin-Patch (cli) (built: Sep  4 2013 20:00:51)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies

インストール

リポジトリの追加

公式では5.3.10-1以降はリリースされていないようなので、PPA(Personal Package Archive)リポジトリにあるものを入れることになるようです。

ググったらadd-apt-repositoryコマンドでリポジトリが足せるらしい。

$ sudo add-apt-repository ppa:ondrej/php5
sudo: add-apt-repository: command not found

しかし、そんなコマンドは無いらしい。

リポジトリを追加するコマンドを入れる

python-software-propertiesパッケージを入れると、add-apt-repositoryコマンドが使えるようになるらしい。

$ sudo aptitude install python-software-properties

ちなみに、12.10以降だとパッケージが変わっているようです。

$ sudo aptitude install software-properties-common

先にこちらを入れて、not foundとか出たのでどうしようかと思った。

リポジトリの追加

$ sudo add-apt-repository ppa:ondrej/php5

今度は追加できました。

アップデート

$ sudo aptitude update
$ sudo aptitude upgrade

途中、php.iniを上書きしていいか?というダイアログが出てきたので、大して書き換えてないのでOKする。

$ php -v
PHP 5.5.7-1+sury.org~precise+1 (cli) (built: Dec 12 2013 21:37:40)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2013 Zend Technologies
    with Zend OPcache v7.0.3-dev, Copyright (c) 1999-2013, by Zend Technologies

これでアップデートできました。

が、なんかWordPressが動かなくなった。

error.logを見る

[Mon Dec 30 16:09:43.037018 2013] [:error] [pid 8572] [client ...:51733] PHP Parse error: syntax error, unexpected 'add_action' (T_STRING), expecting function (T_FUNCTION) in /var/www/wp-content/themes/mytheme/functions.php on line 113, referer: http://wordpress.local/wp-admin/widgets.php

お前が作ったテーマのfunctions.phpが悪いんじゃボケ!と言われているので、該当行を見てみると、

add_action('widgets_init', create_function('', 'return register_widget("SidePanelItem");'));

作ったウィジェットを登録しているだけでした。なぜここで落ちる?

PHP5.5からMySQLとの接続絡みで何か変わったらしいのでその影響かもとは思うのですが、今日は元気がなかったので5.5を使うのは諦めた。

PHP5.4へダウングレードする

というわけで、PHP5.4を入れることにします。

PHP5.5の残骸を消す

$ sudo apt-add-repository -r ppa:ondrej/php5

リポジトリを消して、

$ sudo aptitude remove php5 php5-cli php5-common php5-curl php5-gd php5-intl php5-json php5-mysql
     Remove the following packages:
1)     libapache2-mod-php5
2)     libphp-phpmailer
3)     libphp-simplepie
4)     libphp-snoopy

いったん削除。依存パッケージも消えるのであとで入れる。

リポジトリの追加

$ sudo apt-add-repository ppa:ondrej/php5-oldstable

php5-oldstableとすると5.4系になるみたいです。

PHP5.4をインストールする

$ sudo aptitude install php5 php5-cli php5-common php5-curl php5-gd php5-intl php5-json php5-mysql
     Remove the following packages:
1)     apache2
2)     apache2-bin
3)     apache2-data

さっき消したものをインストール。 Apache2は互換性が無いため、消して入れ直すもよう。

 * Starting web server apache2                                                                                                   apache2: Syntax error on line 210 of /etc/apache2/apache2.conf: Syntax error on line 1 of /etc/apache2/mods-enabled/access_compat.load: Cannot load /usr/lib/apache2/modules/mod_access_compat.so into server: /usr/lib/apache2/modules/mod_access_compat.so: cannot open shared object file: No such file or directory
Action 'start' failed.
The Apache error log may have more information.
                                                                                                                          [fail]

しかし、起動しなかった。

$ php -v
PHP 5.4.23-1+sury.org~precise+1 (cli) (built: Dec 12 2013 09:24:16)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies

PHP5.4はインストールされている。

Apache2の残骸を消す

ここから個別にファイルを直して復旧を試みたのですが、結局うまくいかずApache2を再インストールすることに。

$ cp /etc/apache2/sites-available/000-default.conf ~/

設定ファイルを退避。

$ sudo aptitude purge apache2

Apache2を設定ごと削除。

$ sudo aptitude instal apache2

再度インストール。

$ sudo cp ~/000-default.conf /etc/apache2/sites-available/

設定ファイルを戻して、

$ sudo service apache2 start

今度は起動しました。

依存パッケージを入れ直す

$ sudo aptitude install libapache2-mod-php5 libphp-phpmailer libphp-simplepie libphp-snoopy

先ほど削除されたパッケージを入れ、

$ cd /etc/apache2/mods-enabled
$ sudo ln -s ../mods-available/php5.load .
$ sudo ln -s ../mods-available/php5.conf .

Apache2のPHPモジュールを有効にさせる。

$ sudo service apache2 restart

Apache2を再起動したら完了。

長かった…