別の人が作成した古いWordPressの改修の依頼が来て、環境つくりに時間がかかったのでメモをしておきます。
レンタルサーバーで動いているサイトだったのでPHP + Apache + MySQLという構成です。
要件
<?
,<?=
という書き方が多用されているのでエラーにならないようにする- php.ini など極力触りたくない (戻すの忘れそうで面倒なので)
<?
や<?=
という書き方を今までしたことなかったので、戸惑いました。
検索してみた結果
PHP では、短い形式の開始タグ
<?
も使えます (しかしこれはおすすめしません。というのも、この形式のタグはphp.ini
で short_open_tag を有効にするか--enable-short-tags
オプションつきで PHP を configure した場合でないと使えないからです)。
7.0.0
ASP タグ (<%
,%>
,<%=
) や script タグ (<script language="php">
) が PHP から削除されました。
5.4.0
short_open_tag の設定にかかわらず、<?= は常に使えるようになりました。
出典: PHP: PHP タグ - Manual
という事のようです。
「5.4.0
short_open_tag の設定にかかわらず、<?= は常に使えるようになりました。」と書かれているのですが、
PHP7で<?=
のあるファイルの表示を試したら設定が悪いのか、<?=
がそのまま文字列として出力されてしまったので、PHP7以前に戻してshort_open_tag
をONにすれば、この古(いにしえ)のWordPressのテーマを動作させることができそうです。
phpbrewでPHP56に切替える
PHPはphpbrewでインストールしています。
インストールできるPHPのバージョンを確認
$ phpbrew known 7.3: 7.3.1, 7.3.0 ... 7.2: 7.2.14, 7.2.13, 7.2.12, 7.2.11, 7.2.10, 7.2.9, 7.2.8, 7.2.7 ... 7.1: 7.1.26, 7.1.25, 7.1.24, 7.1.23, 7.1.22, 7.1.21, 7.1.20, 7.1.19 ... 7.0: 7.0.33, 7.0.32, 7.0.31, 7.0.30, 7.0.29, 7.0.28, 7.0.27, 7.0.26 ... 5.6: 5.6.40, 5.6.39, 5.6.38, 5.6.37, 5.6.36, 5.6.35, 5.6.34, 5.6.33 ... ...
PHP5.6.40
をインストール
$ phpbrew install 5.6.40 +default +mysql +apxs2 +openssl
Apache, MySQLを使うので+apxs2
, +mysql
バリアントを合わせてインストールします。
+apxs2
オプションを付けると自動的にhttpd.conf
にlibphp
をロードする設定が追加されます。
(ビルドに時間がかかる....
PHPのバージョンを切替える
ビルドが完了したら使用するPHPのバージョンを切替えます。
インストールされているPHPの確認
$ phpbrew list * php-7.3.1 php-5.6.40
PHPを切替える
$ phpbrew use php-5.6.40 $ php -v PHP 5.6.40 (cli)
php.iniの設定
非推奨のshort_open_tag
はphp.ini
には設定せず、タイムゾーンとmysql.sockだけ設定します
php.ini
の場所を調べる
$ php --ini Configuration File (php.ini) Path: /Users/user_name/.phpbrew/php/php-5.6.40/etc
php.ini
を編集
タイムゾーン date.timezone
で検索
[Date] ; Defines the default timezone used by the date functions ; http://php.net/date.timezone date.timezone = "Asia/Tokyo"
MySQL mysql.default_socket
で検索
; Default socket name for local MySQL connects. If empty, uses the built-in ; MySQL defaults. ; http://php.net/pdo_mysql.default-socket pdo_mysql.default_socket= /usr/local/var/mysql/mysql.sock ; Default socket name for local MySQL connects. If empty, uses the built-in ; MySQL defaults. ; http://php.net/mysql.default-socket mysql.default_socket = /usr/local/var/mysql/mysql.sock ; Default socket name for local MySQL connects. If empty, uses the built-in ; MySQL defaults. ; http://php.net/mysqli.default-socket mysqli.default_socket = /usr/local/var/mysql/mysql.sock
pdo_mysql.default_socket
, mysql.default_socket
, mysqli.default_socket
の3箇所に設定をしました。
Apache httpd.conf
の設定
PHPのモジュール(libphp
)を先に入れていたPHP7をコメントアウトして、PHP5のものが使われるようにします
httpd.conf
# php7 Module # 👇 コメントアウト # LoadModule php7_module libexec/libphp7.3.1.so # php5 Module LoadModule php5_module libexec/libphp5.6.40.so
動作確認
ここまででapache上でPHPが動作しMySQLに接続できるか確認します。
Apacheを起動
$ sudo apachectl start
MySQLを起動
$ mysql.server start
localhostのディレクトリ内に次のような確認用のPHPファイルを作成します。
<?php // mysql 接続テスト define('DB_DATABASE','test'); define('DB_USERNAME','root'); define('DB_PASSWORD','root'); define('PDO_DSN','mysql:host=localhost;dbname=' . DB_DATABASE); try{ $pdo = new PDO(PDO_DSN,DB_USERNAME,DB_PASSWORD); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $pdo->query('SHOW TABLES'); while($res = $stmt->fetch(PDO::FETCH_ASSOC)) { var_dump($res); } $pdo = null; } catch(PDOException $e) { echo $e->getMessage(); } // PHP情報を表示 phpinfo();
localhostからこのPHPファイルにアクセスして、データベースのテーブルとPHPのバージョンがPHP Version 5.6.40
と表示されていればOKです。
<?
を許容する設定
問題になっているサイトのディレクトリのルートに.htaccess
を作成しshort_open_tag
を許可する設定を追加します。
php_flag short_open_tag on
これで問題になっていた<?
, <?=
が多用されていたWordPressのテーマをローカルで表示できるようになりました!
PHPのバージョンを7系に戻す場合は
- apache, mysqlを停止
- phpbrewで使用するバージョンを7に変更
phpbrew use php-7.3.1
httpd.conf
のphp7_module
のコメントアウトを外し、php5_module
をコメントアウト- apache, mysqlを起動
の手順で戻すことができます。
使用するバージョンを切替える度に都度httpd.conf
内のモジュール部分を変更しないといけないのが少しメンドクサイのですが、phpbrewを使えば比較的楽にPHPのバージョンを切替えて使うことができそうです。
[参考]
フジミ模型 1/24 インチアップシリーズ No.106 レガシィ ツーリングワゴン エアロ プラモデル ID106
- 出版社/メーカー: フジミ模型(FUJIMI)
- 発売日: 2003/05/28
- メディア: おもちゃ&ホビー
- クリック: 7回
- この商品を含むブログを見る