PHP MySQL


あるサーバーに設置してあるPHPスクリプトから外部のMySQLサーバーに mysql_query()関数で接続&実行しようとしています。

その際、PHPスクリプトが利用するIPアドレスを知りたいのですが、どうすれば良いでしょうか?
サーバーのIPアドレスではないようで、MySQL接続は別のIPで接続しているようです。

MySQL側のアクセスログやコマンド操作できればいいのですが、それは出来ない状態です。

PHPスクリプト側で接続時に利用しているIPアドレスを知る方法を教えて下さい。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/07/21 22:55:04
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:dawakaki No.1

回答回数797ベストアンサー獲得回数122

ポイント25pt

mysql_queryを実行する前に、mysql_connectまたはmysql_pconnectが実行されているはずで、そこにデータベースのIPアドレスまたはホスト名が記述されています。

ホスト名からIPアドレスを調べるのは、
Windowsなら

nbtstat -a ホスト名

Linuxなら

nslookup ホスト名
id:JULY No.2

回答回数966ベストアンサー獲得回数247

ポイント25pt

もし、接続できているのであれば、

select host from information_schema.processlist WHERE ID=connection_id()

というクエリーを投げると、接続中のクライアントに対するサーバ側から見たホスト名、または、IP アドレスが分かると思います。

ただ、
MySQL :: MySQL 5.1 リファレンスマニュアル :: 21.22 INFORMATION_SCHEMA PROCESSLIST テーブル

PROCESSLIST テーブルは非標準のテーブルです。それは MySQL 5.1.7 に追加されています。

なので、古い MySQL だとダメかもしれません。

id:webtomake

>もし、接続できているのであれば、
接続できていません

2013/07/15 07:55:50
id:JULY

う~ん、だとすれば、

> MySQL側のアクセスログやコマンド操作できればいいのですが、それは出来ない状態です。

この状況ではかなり難しいかと...。

ひとつ考えられるのは、2つのサーバの間で NAT されている場合です。経路中のルータ等で NAT されている場合、クライアント側では、自分自身がどんな IP アドレスに変換されているかは、原理的に知りようがありません。何らかの接続が出来てしまえば、サーバ側が「この接続はどこそこからの IP アドレスからの接続だよ」と教えてもらうことで、NAT 後の IP アドレスを知る事ができ、私の回答もこのシナリオを想定したものです。

Web サイトで、「あなたのグローバルアドレスはこれこれです」というのを教えてくれるサイトがありますが、PHP を置いているサーバからこれらのサーバにアクセスし、表示される IP が、MySQL のサーバから見た時のアドレスと同じ可能性はありますが、2つのサーバのネットワーク上の経路も分からないですし、そもそも、インターネット側へ繋がらなければ意味が無い方法ですし....。

PHP のあるサーバ側に複数の IP アドレスがあって、というのであれば、そのサーバでパケットキャプチャしてみるのが早いと思いますが、経路中で NAT されている場合だと意味が無いし...。

2013/07/16 09:30:38
id:kaji0120 No.3

回答回数59ベストアンサー獲得回数13

ポイント25pt

>PHPスクリプト側で接続時に利用しているIPアドレスを知る方法を教えて下さい。
PHPで

<?php
print_r($_SERVER);
?>

の出力結果に書かれていませんか?

id:TransFreeBSD No.4

回答回数668ベストアンサー獲得回数268

ポイント25pt

ifconfigコマンドで割り当てられているアドレスが得られます。

<?php
echo "<pre>";
system("/sbin/ifconfig");
echo "</pre>";

こんなスクリプト作って確認してみてください。
ズラズラっと色々な情報が書かれていますが「inet addr:」または「inet6 addr:」の後のが割り当てられているアドレスです。
通常2つ以上あります。
127.0.0.1は所謂localhostなので除外します。
::1/128も所謂localhostなので除外します。
設定してダメだったというIPアドレスもあるかもしれません。それも除外します。
SQLサーバのIPアドレスがIPv4ならこちらもIPv4(inet addr:)、IPv6ならIPv6(inet6 addr:)になります。
SQLサーバのIPアドレスが分かるなら、それと一番似ている(前のほうが同じ)アドレスがあれば、多分それです。
たぶん、「10.」または「192.168.」で始まるのではないかと予想しています。

ところで、PHP中ではSQLサーバをIPアドレスで指定していますか?
もし違うなら、そもそもそのホスト名でSQLサーバにアクセス出来ていますか?
コントロールパネルの一番下のあたりにあるNetwork Toolsを使ってIPアドレスを確認してみてください。
さらにそのIPアドレスでコントロールパネルにアクセスして目的のSQLサーバか確認してみてください。
さらにrouge_2008さんも書かれていますが、そのSQLサーバのMySQLにユーザとパスワードが正しく登録されているか確認してみてください。
そしてそのIPアドレスは「10.」または「192.168.」で始まっていますか?WebサーバのIPアドレスとくらべてどうですか?
WebサーバもSQLサーバもskynethostingならどちらも似たようなIPアドレスになるはずです。
「10.」または「192.168.」で始まっているなら前述の方法で調べてみてください。
Webサーバとして割り当てているはずのグローバルIPアドレスに近いなら、そのWebサーバのアドレスでアクセスしているはずです。

それでもダメならJULYさんの言うようにNAT越しの可能性もあるかも知れません。
そうなると普遍的な確認方法は無いと思いますが、ただ、その可能性は低いのではと思います。
どちらにせよ、特別設定が必要ならどこかに確認方法が書かれたドキュメントがあると思うのですが……

  • id:rouge_2008
    > あるサーバーに設置してあるPHPスクリプトから外部のMySQLサーバーに mysql_query()関数で接続&実行しようとしています。
    > その際、PHPスクリプトが利用するIPアドレスを知りたいのですが、どうすれば良いでしょうか?
    > サーバーのIPアドレスではないようで、MySQL接続は別のIPで接続しているようです。

    その外部のMySQLサーバーは、外部からのアクセスを許可しているのでしょうか?
    なぜPHPスクリプトが動作するサーバーのIPアドレスではないと思ったのですか?
    良ければPHPスクリプトを設置しているレンタルサーバーサービスを教えてください。


    ※mysql_query()関数は古いので、可能ならmysqli_query()関数を利用した方がいいと思います。
    http://php.net/manual/ja/function.mysql-query.php
  • id:rouge_2008
    > WebサーバーのIPアドレスを許可IPとして登録したのですが、Denyされました。

    何かエラーメッセージが表示されたのでしょうか?
    どのようなメッセージでしたか?
    MySQLサーバーのデータベースにユーザーを追加したでしょうか?
    phpMyAdminが利用できるのでしたら、使用可能なデータベースを選択して「特権」タブを確認してみてください。
    そのデータベースにアクセス可能なユーザーが確認できます。
    ※「ユーザー名@SkyNetHosting.Netでサーバーに割り当てられたIPアドレス」あるいは「ユーザー名@SkyNetHosting.Netのサーバーで利用中のドメイン名」のユーザーが存在しなければ、自分で作成する必要があるのだと思います。


    ※スクリプトを実行しているサーバのIPアドレスは「$_SERVER['SERVER_ADDR']」で確認できます。(サーバー名は「$_SERVER['SERVER_NAME']」)
    http://php.net/manual/ja/reserved.variables.server.php


    ※SkyNetHosting.NetでもMySQLが利用できるようですが、サービス付属のMySQLには接続できていますか?

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません