ローカル環境のMySQL接続遅延とWordPressのLANアクセスについてのTips

WordPressのプラグイン、テーマ等をXAMPPのローカル環境で開発している場合の Tips を2つ紹介します

下記のようなお悩みがある方は、解決するかも知れません (^^)

  1. XAMPP環境でMySQLの接続が遅いと感じる場合
  2. WordPress にLAN内のモバイルデバイスからアクセスしたい場合

Windows10 の無償バージョンアップ期限ぎりぎりで更新しました (^^)
すると XAMPP 関連でいくつかトラブルがあったので対応方法等追記しました

Win10にしたら XAMPP Apache が使えない場合

すでにWin10に更新して同じ問題を解決したひとがいるだろうと検索するとすぐ見つかりました

Windows10にアップグレードしたらApache起動しなくなったので対策に乗り出したっていう話 | Thought is free
Windows7 から Windows10 にアップグレードしたでござる。 正直言って Windows10 は気に入らん部分が多すぎて、アップグレードしたくなかったのだが、 Wi…
Windows10にアップグレードしたらApache起動しなくなったので対策に乗り出したっていう話 | Thought is free

かんたんに説明すると、Win10にすると自動的にマイクロソフトのインターネットインフォメーションサービス(IIS)が有効化されてポート80が使われてしまうのでIISを無効化すればOK

手順はコントロールパネルから プログラムと機能 を開きます

win10-プログラムと機能

左側に表示されている Windows の機能の有効化または無効化 をクリック

win10-windowsの機能

ここからインターネットインフォメーションサービスを無効化すれば、 XAMPP Apache が使えるようになります

これで Windows10 でも XAMPP が今までどおり使えるとこの時点では思ってました (^_^;)

ところがなんか遅いのです。調べると IPv6 がらみのようです

Windows10 XAMPP環境のMySQLへの接続が遅い

Windows7では、 XAMPP環境のMySQLへの接続が遅い 場合の対策を以下のように紹介していました

XAMPP環境でMySQLの接続が遅い

これは、Windows特有の事情が絡んでいるようです

私も前からなんか遅いなー と思っていましたが、それ以上は調べもせずにそのまま使っていました (^^)

MySQLの高速化について調べていた時、ふと目に止まった記事です

XAMPPMySQL接続がやたらと遅い件 – 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             localhost

127.0.0.1 の前にある # (コメントマーク)を消して保存します

これだけで1秒近く速くなります (^^)

Windows7では、上記対策で速くなりましたが、Windows10になったらこの設定が効いていないような遅さです

そこでWin10に更新したときに hosts ファイルが新しく書き換えられたのかと思い確認してみると上記修正が行われたままのファイルでした。

IPv6 を無効化すればいいと思い LANネットワークドライバーの IPv6 機能を無効化してみたのですが効果ありません

ping で localhost 確認してみると IPv6 が使われたままです (^_^;)

いろいろ調べると IPv6 と IPv4 の優先度を変更すればよいらしいのがわかりました

自分自身(localhost)にpingを飛ばすとIPv6で返してくる | Windowsの機能紹介・トラブル対応のIT備忘録
マイクロソフトWindows製品を中心に、トラブル対応の記録、機能紹介、最新情報を発信しています。

ここで紹介されているように IPv4 の優先度を一番上にすればOKです

Win10のツールバー(私は左端に縦表示しています)の一番上のアイコンで右クリックすると表示されるメニューから コマンドプロンプト(管理者)をクリックします

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でした

以下参考までに一連の操作結果の画像です

IPv4プロトコルの優先度変更

これで、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 が使われています

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の紹介でした

 


まとめ記事紹介

go-to-top