WordPressのプラグイン、テーマ等をXAMPPのローカル環境で開発している場合の Tips を2つ紹介します
下記のようなお悩みがある方は、解決するかも知れません (^^)
- XAMPP環境でMySQLの接続が遅いと感じる場合
- WordPress にLAN内のモバイルデバイスからアクセスしたい場合
Windows10 の無償バージョンアップ期限ぎりぎりで更新しました (^^)
すると XAMPP 関連でいくつかトラブルがあったので対応方法等追記しました
Win10にしたら XAMPP Apache が使えない場合
すでにWin10に更新して同じ問題を解決したひとがいるだろうと検索するとすぐ見つかりました
Windows10にアップグレードしたらApache起動しなくなったので対策に乗り出したっていう話 | Thought is free
かんたんに説明すると、Win10にすると自動的にマイクロソフトのインターネットインフォメーションサービス(IIS)が有効化されてポート80が使われてしまうのでIISを無効化すればOK
手順はコントロールパネルから プログラムと機能 を開きます
左側に表示されている Windows の機能の有効化または無効化 をクリック
ここからインターネットインフォメーションサービスを無効化すれば、 XAMPP Apache が使えるようになります
これで Windows10 でも XAMPP が今までどおり使えるとこの時点では思ってました (^_^;)
ところがなんか遅いのです。調べると IPv6 がらみのようです
Windows10 XAMPP環境のMySQLへの接続が遅い
Windows7では、 XAMPP環境のMySQLへの接続が遅い 場合の対策を以下のように紹介していました
XAMPP環境でMySQLの接続が遅い
これは、Windows特有の事情が絡んでいるようです
私も前からなんか遅いなー と思っていましたが、それ以上は調べもせずにそのまま使っていました (^^)
MySQLの高速化について調べていた時、ふと目に止まった記事です
XAMPPでMySQL接続がやたらと遅い件 – LAZE SOFTWARE
こんな問題があったとは (^_^;)
詳しくは、リンク先の記事を見て頂ければと思いますが、簡単にいうと localhost というアクセスに対してDNSにより IPv6, IPv4 とアドレス変換で遅延が生じているようです
解決策は、hosts ファイルのコメントを取り除くだけです
エディターを管理者として実行して、C:WindowsSystem32driversetchosts ファイルを開きます
# Copyright (c) 1993-2009 Microsoft Corp. # # This is a sample HOSTS file used by Microsoft TCP/IP for Windows. # # This file contains the mappings of IP addresses to host names. Each # entry should be kept on an individual line. The IP address should # be placed in the first column followed by the corresponding host name. # The IP address and the host name should be separated by at least one # space. # # Additionally, comments (such as these) may be inserted on individual # lines or following the machine name denoted by a '#' symbol. # # For example: # # 102.54.94.97 rhino.acme.com # source server # 38.25.63.10 x.acme.com # x client host # localhost name resolution is handled within DNS itself. 127.0.0.1 localhost # ::1 localhost127.0.0.1 の前にある # (コメントマーク)を消して保存します
これだけで1秒近く速くなります (^^)
Windows7では、上記対策で速くなりましたが、Windows10になったらこの設定が効いていないような遅さです
そこでWin10に更新したときに hosts ファイルが新しく書き換えられたのかと思い確認してみると上記修正が行われたままのファイルでした。
IPv6 を無効化すればいいと思い LANネットワークドライバーの IPv6 機能を無効化してみたのですが効果ありません
ping で localhost 確認してみると IPv6 が使われたままです (^_^;)
いろいろ調べると IPv6 と IPv4 の優先度を変更すればよいらしいのがわかりました
自分自身(localhost)にpingを飛ばすとIPv6で返してくる | Windowsの機能紹介・トラブル対応のIT備忘録
ここで紹介されているように IPv4 の優先度を一番上にすればOKです
Win10のツールバー(私は左端に縦表示しています)の一番上のアイコンで右クリックすると表示されるメニューから コマンドプロンプト(管理者)をクリックします
コマンドプロンプトで下記コマンドで優先度を確認
netsh interface ipv6 show prefixpolicies
3番目に表示されている ::ffff:0:0/96 というのが IPv4 とのことなので、これを一番高い優先度に変更します
netsh interface ipv6 set prefixpolicy ::ffff:0:0/96 55 4
元記事では、他のプロトコルの優先度もすべて再設定していますが、::ffff:0:0/96 設定を最優先に変更するだけで他はそのままでOKでした
以下参考までに一連の操作結果の画像です
これで、hosts ファイルにより localhost のアドレスが、IPv4 の 127.0.0.1 になり Windows10でも XAMPP の MySQL への接続が速くなります
WordPress にLAN内の別デバイスからアクセス
次は、ローカル環境に構築した WordPress にLAN内の別デバイスからアクセスする方法です
最初は、 localhost の代わりに固定アドレス 192.168.x.xx のような形で指定すればアクセス出来ると思っていましたが、やってみるとうまく行きません (^_^;)
グーグル先生に尋ねると、いろいろ記事が見つかるのですが、なかなかビンゴという記事がなかったのですが、ようやく見つけたのがこの記事です
XAMPPにLAN内のスマフォからアクセスする | WEBPAPRIKA
ローカルに構築したWordPress のアドレスは、localhost をベースとしているので、内部に保持されているリンクアドレス等も全て localhost が使われています
従って、固定アドレスを指定して別のPCからアクセスしてもリンクが localhost を指し示している限り他のPCからのアクセスを正しく表示させることは出来ません
どうすれば良いかというと、WordPress テーマの function.php に リンクアドレスの localhost を固定IPアドレス 192.168.x.xx に置き換える仕掛けをもたせれば良いということになります
参考サイトのコードを少し修正して使用しました
/** * ローカル環境動作時の localhost を指定した固定IPアドレスに置き換える * WordPressを LAN内の別PCからアクセスするためのデバッグ用機能 *------------------------------------------------------------------------------*/ if ( defined('WP_DEBUG') && WP_DEBUG === true ) { function celtisone_replace_private_URI($content) { global $celtisone_options; $home_url = get_home_url(); if(!empty($celtisone_options[ 'fixip' ]) && false !== stripos($home_url, 'localhost')){ return str_replace('http://localhost', $celtisone_options[ 'fixip' ], $content); } else return $content; } function celtisone_get_header(){ ob_start( 'celtisone_replace_private_URI'); } function celtisone_wp_footer(){ ob_end_flush(); } add_action('get_header', 'celtisone_get_header', 1); add_action('wp_footer', 'celtisone_wp_footer', 99999); }
このコードでは、テーマ設定から固定アドレスを指定できるようにしてあるので、$celtisone_options[ ‘fixip’ ] という設定を使用していますが、直接 ‘http://192.168.1.100’ 等の固定アドレスを記述してしまってもOKです
また、デバッグ時のみ有効となるように wp-config.php に define(‘WP_DEBUG’, true); が定義してある場合のみ置き換えを行うようにしています
ローカル環境のWordPressにLAN内から固定アドレスを指定してアクセスすると、この関数によりブラウザへ出力する直前に ’http://localhost/wordpress/’ を ‘http://192.168.xxx.xx/wordpress/’に全て置き換えて出力するようになります
これで、うまくアクセスできるはずです (^^)
以上
WordPressのプラグインやテーマのデバッグ用Tipsの紹介でした