xampp


他のPCからxamppをインストールしたPCのmysqlに接続する

他のPCからODBC接続でxamppをインストールしたPCのmysqlに接続を試みた際、Mysql Connecterのテスト接続でエラーが発生した。

エラー内容
----------------------------------------------------------------
Host 'xxx.xxx.xxx.xxx' is not allowed to connect to this MySQL server
----------------------------------------------------------------

xamppの初期設定では、localhostからの接続だけが許可されているのでエラーになる。
他のPCから接続するには、接続の権限を持ったユーザー作る必要がある。

「mysql」という名前のデータベースに「user」という名前のテーブルがあるので、そこに新しいユーザーを加える。

書式
----------------------------------------------------------------
GRANT ALL PRIVILEGES ON 有効範囲(データベース名.テーブル名) TO ユーザー名@ホスト名 IDENTIFIED BY 'パスワード'
----------------------------------------------------------------
PRIVILEGES は、省略可。

実際のコマンド
----------------------------------------------------------------
GRANT ALL PRIVILEGES ON *.* TO testuser@'%' IDENTIFIED BY 'test'
----------------------------------------------------------------

GRANT構文については、こちら1こちら2

上のコマンドだと、以下の設定をしたことになる。
----------------------------
・ユーザー名:testuser
・パスワード:test
・ホスト名(@以降):ワイルドカード(%)← これでlocalhost以外からもアクセス可能になる。もし「localhost」と記述すれば、他のPCからはアクセスできない。
・all privileges は、「(GRANT権限以外の)すべての権限を与える」
・*.* は、「すべてのデータベースのすべてのテーブルに有効」という意味。
----------------------------

これでうまくいった。

他のPCからページが見れない場合は、こちら

参考ページ:こちら1こちら2

【xampp】LAN内の他のPCからページが見れない場合の対処法

新しいPCにxamppをインストールしたら、他のPCからページが見れなかった。
xamppをインストールしたlocalhostからなら問題なく閲覧できるが、LAN内の他のPCからIPアドレスを打っても、「見つかりません」的なタイムアウトで終わる。

【インストールした環境】
Windows7 64bit

1.問題の箇所がどこなのか探る

xamppのApacheの設定に問題があれば、Apacheのエラーログに何かしらの記述が残っているはず。
今回のケースでは、この段階ではエラーログなし。
xamppの設定以前に、ネットワークの問題である可能性が高い。

コントロールパネルから「Windowsファイアウォール」を開いてみると、「ホームネットワークまたは社内(プライベート)ネットワーク」が「未接続」になっている。

これを接続済みにするため、「コントロールパネル」→「ネットワークと共有センター」を開く。

「アクティブなネットワークの表示」を「パブリックネットワーク」から「ホームネットワーク」に切り替えた。(社内ネットワークでも可。パブリックネットワークだけが、セキュリティ上他のPCから閲覧できないようになっている)

再び、Windowsファイアウォールを開き、「ホームネットワークまたは社内(プライベート)ネットワーク」が「接続済み」となっていることを確認した。

また、「Windowsファイアウォール」→「Windowsファイアウォールを介したプログラムまたは機能を許可する」から「Apacheサーバー」の「プライベート」にチェックが入っていることも確認しておく。

2.XAMPPの設定を変更する

他のPCから改めてApacheサーバーにアクセス。
すると、公開フォルダは表示されるものの、XAMPPのトップページでは、ブラウザにエラーメッセージが表示された。

つまり
--------------------------------------------
○ 192.168.xxx.xxx/index.php ← 表示された
× 192.168.xxx.xxx/xampp/ ← エラーメッセージ
--------------------------------------------

エラーメッセージの内容
--------------------------------------------
アクセス禁止!

新しいXAMPPのセキュリティコンセプト:

は、要求のディレクトリへのアクセスは、ローカルネットワークから入手可能です。

この設定は、ファイル"で設定することができますのhttpd - xampp.conf " 。
--------------------------------------------

Apacheのエラーログはこれ
--------------------------------------------
[client 192.168.11.8:1253] AH01630: client denied by server configuration: C:/xampp/htdocs/xampp/
--------------------------------------------
192.168.11.8はアクセス元のIPアドレス。

エラーメッセージどおり、httpd - xampp.confを修正。
このとき、修正箇所はファイルの一番下の部分だった。

修正前
--------------------------------------------
#
# New XAMPP security concept
#

Require local
ErrorDocument 403 /error/XAMPP_FORBIDDEN.html.var

--------------------------------------------

↓↓↓

修正後
--------------------------------------------
#
# New XAMPP security concept
#

# Require local

Order deny,allow
Deny from all
Allow from 127.0.0.0/8
Allow from 192.168.11.0/24

ErrorDocument 403 /error/XAMPP_FORBIDDEN.html.var

--------------------------------------------
青字が追記箇所。

参考ページ:こちら

Apacheを再起動したら、ちゃんと見れるようになった。
(逆に、http://localhostと指定した場合に「アクセス禁止」が出るようになった)

他のPCからmysqlにつながらない場合は、こちら

PHPの正規表現を実行するとApacheが落ちる

windows7 64bitにインストールしたxamppのPHPにて。

特定のページを読み込もうとするとと読み込み途中で「ページが見つかりません」エラーが出る現象に遭遇。

xamppのコントロールパネルからapacheのエラーログを見る。

エラーメッセージ
----------------------------------------------
ri Feb 07 02:21:38.898457 2014] [mpm_winnt:notice] [pid 3540:tid 248] AH00428: Parent: child process 10068 exited with status 3221225725 -- Restarting.
----------------------------------------------

よくわからないが再起動している。

原因を探っていくとPHPのpreg_match_all()の実行時に問題が起こっているようで、この問題はApacheのスタックサイズが足りなくなるのが発端のよう。

スタックメモリーとは、
----------------------------------------------
そのタスクや関数内だけで使われる変数やアドレス情報なんかを置いておくためのメモリ領域だ。タスクを終了する、または関数から抜けると、スタックの内容も破棄される。
----------------------------------------------

らしい。こちらより

で、このスタックサイズを増やすには、editbinコマンドを実行すればよくて、ただ実行するにはVisual Studioに入っているeditbin.exe(Microsoft COFF Binary File Editor)が必要とのこと。

「Visual Studio Express 2012 for Windows Desktop」をダウンロード。こちら
(最新版はVisual Studio2013だったが、マイクロソフトのアカウントを作ってサインインしろと、面倒くさそうだったので手間のない前ののバージョンにした)

インストールして目的のツールを確認

editbin.exeがあるフォルダのパス
----------------------------------------------
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin
----------------------------------------------

まず、現状のメモリサイズを確認する。
xamppのapacheフォルダ内にあるhttpd.exeをeditbin.exeのあるフォルダにいれる。cdでその場所まで移動してコマンドを実行。

----------------------------------------------
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin>dumpbin /headers httpd.exe
----------------------------------------------

エラーが出た。
----------------------------------------------
コンピューターにmspdb110.dllがないため、プログラムを開始できません
----------------------------------------------

環境変数を反映させればなくなるエラーらしく、同じフォルダにある「vcvars32.bat」を実行。

----------------------------------------------
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin>vcvars32.bat
----------------------------------------------

その後先ほどのコマンドを再び実行。
----------------------------------------------
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin>dumpbin /headers httpd.exe
----------------------------------------------

たくさん表示される情報の中、
「OPTIONAL HEADER VALUES」の見出し中に該当の項目を発見

「40000 size of stack reserve」

「40000」は16進法であり、10進数にすると262144 (256×1024) → 256k

根拠はないが、4倍に増やせば十分かと「1048576」と指定してeditbinを実行。
(式: 目的のメモリ数(単位はKbyte)×1024。今回は1024×1024。)

----------------------------------------------
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin>editbin /stack:1048576 httpd.exe
----------------------------------------------

エラーがでる。
----------------------------------------------
LINK : fatal error LNK1104: ファイル 'httpd.exe' を開くことができません。
----------------------------------------------

どうも権限の都合でフォルダ内のファイルは変更できないらしい。
httpd.exeをデスクトップに移動させて再び実行する。
----------------------------------------------
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin>editbin /stack:1048576 C:\Users\PC名\Desktop\httpd.exe
----------------------------------------------

エラーは出ず。「dumpbin」でサイズ変更されていることを確認。

----------------------------------------------
100000 size of stack reserve
----------------------------------------------

PHPでApacheが落ちる問題も解消された。

参考にしたページ
こちらこちら