close

在架設伺服器時,若預計的流量不大,通常會把網頁伺服器和數據伺服器設成同一台電腦上,以減低成本。

在主機上,如果我們要測試首頁,會到這個網址:

http://localhost/

又或是這一個:

http://127.0.0.1/

這兩個網址當然沒有分別啦!硬要說的話,便是 losthost 是一個 domain name,要經過解析,才會變成 127.0.0.1。然而,這一基本的解析,早已儲存和系統中,不用 DNS 也能解析到。

 

好了,有了網頁伺服器,現在要連接 MySQL 伺服器:

mysql_connect('localhost', 'user', 'password');

很間單吧!

像測試首頁時一樣,這一個也可以連到本機的 MySQL 伺服器:

mysql_connect('localhost', 'user', 'password');

這兩個做法當然沒有分別啦!其實不然。雖然上文已指出 localhost 就是 127.0.0.1 的 domain name,但就 mysql_connect 這函式來說,其運作原理是有分別的!

 

根據 PHP 的說明,當伺服器為 localhost 時,PHP 的 MySQL 函庫會以 local socket 或在 Windows 中的 named pipe 來連接 MySQL 伺服器;而當伺服器為 127.0.0.1 時,它才會以 TCP/IP 的方式來連接。

說了大半天,既然 localhost 指的是本機,127.0.0.1 指的也是本機,那分別在哪?會有用不到 local socket 而非要用到 TCP/IP 的時候嗎?有,就是當你並不是身在主機,只是用 ssh tunneling 的方式把 MySQL 伺服器的 port 調到你所在的機器上時,這時你的機器並沒有 local socket,但你要這樣才可以登入到只限本機連接的使用者中。

 (c.f. http://php.net/manual/en/function.mysql-connect.php)

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 小輝 的頭像
    小輝

    惘然

    小輝 發表在 痞客邦 留言(0) 人氣()