在架設伺服器時,若預計的流量不大,通常會把網頁伺服器和數據伺服器設成同一台電腦上,以減低成本。
在主機上,如果我們要測試首頁,會到這個網址:
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,但你要這樣才可以登入到只限本機連接的使用者中。
留言列表