本節書摘來自異步社群《php和mysql web開發從新手到高手(第5版)》一書中的第1章,第1.3節,作者【澳】kevin yank,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視
php和mysql web開發從新手到高手(第5版)
在本節中,我們将介紹如何在一台運作mac os x version 10.5(leopard)的mac計算機上開始運作一個安裝了php和mysql的web伺服器。如果你使用的并不是mac計算機,可以跳過本節。
mac os x将apache和php都作為标準安裝元件來安裝,它是唯一這麼做的面向消費者的os(實際上,它還附帶了ruby、python和perl,所有這些都是流行的web程式設計語言)。也就是說,隻需要幾個步驟就能啟動apache和php。但是,你還是需要一個mysql資料庫伺服器。最簡單的方法是忽略内建的軟體,并且用一個友善的、一體化的安裝包來安裝你所需要的所有部件。
mamp(表示mac、apache、mysql和php)是一款免費的、一體化的程式,它包含了apache web伺服器、php和mysql的最新版本。讓我們來看看安裝它的過程。

在本書之前的版本中,我建議你安裝mac os x所自帶的apache和php的内建版本,并且使用mysql的官方安裝包來安裝它。我認為,對于初學者來說,這是很好的做法,因為這讓你能夠很好地體會這些軟體是如何配合工作的。
遺憾的是,這意味着很多讀者的最初的幾個小時要花在“php落地”上,按照詳細安裝說明,在一個漫長的過程中跌跌撞撞地前進。更糟糕的是,有時候某一個軟體包的一些細小的變化,就意味着這些說明的細節部分變得過時了。
如今,我堅信學習php和mysql最好的方式是直接開始使用它們。安裝的過程越快速、越省力就越好。這就是為什麼在本版中我要求你使用mamp。
此外,我們有很多的機會去了解這些軟體,那又何必給計算機安裝一堆獨立且不相關,而又很難删除的軟體呢?
盡管如此,如果你是喜歡堅持自己動手的人,或者是一位技術高手,又或者如果你隻是想學完本書并看看專業人士是如何做的,那麼,我在附錄a中給出了每一個單獨軟體包的詳細安裝說明。
如果你是上述的某一類讀者,建議你按照附錄a而不是本節的介紹去做。
1.從mamp的web站點下載下傳最新版本(需要免費的mamp,而不是商業版的mamp pro)1。在下載下傳該檔案之後(在編寫本書時,mamp 2.0.5大約是116mb),輕按兩下該檔案以解壓縮安裝程式(mamp.pkg)。然後,輕按兩下它并啟動mamp安裝程式,如圖1.8所示。
下一個步驟需要一些技巧。在開始任意地單擊按鈕進行安裝之前,請務必先閱讀注意事項。
2.在安裝過程中,安裝程式會提示你選擇是否執行标準安裝。在這一步驟中,單擊customize按鈕而不是install按鈕。這會使得你有機會選擇不采用mamp pro(安裝程式會悄悄地作為預設項,希望你安裝這個版本,進而讓你決定購買該版本)。這很重要,因為如果安裝了mamp pro,在啟動免費版的mamp的時候将會顯示一條令人煩惱的警告消息。
如果你錯過了這一步,并且已經允許安裝程式在系統上安裝了mamp pro,那麼删除它也很容易。
打開applications檔案夾,輕按兩下建立的mamp pro檔案夾,輕按兩下mamp pro uninstaller以運作它。選中uninstaller視窗中的每一個複選框。一旦選中了所有這些複選框,單擊uninstall按鈕。最後退出uninstaller。
浏覽applications檔案夾,并且在那裡找到新的mamp檔案夾。打開它,輕按兩下mamp圖示以啟動mamp。當mamp啟動的時候,将會出現如下的情況:首先,出現如圖1.9所示的mamp視窗。兩個狀态訓示标志将從紅色變為綠色,表示内建的apache和mysql伺服器啟動了。接下來,mamp将會打開預設的web浏覽器,并且加載mamp的歡迎頁面,如圖1.10所示。
計算機上運作的每一個伺服器,都監聽一個唯一的端口号。通常,web站點寄存在端口80上,并且,當url沒有指定端口号的時候,浏覽器就使用80端口來連接配接伺服器。預設情況下,mamp配置為apache監聽8888端口,而mysql監聽8889端口。這就確定了如果mac已經安裝了一個web伺服器并監聽80端口,或者已經安裝了一個mysql伺服器監聽3306端口2(這是标準的mysql伺服器端口)的話,mamp将仍然能夠繼續工作。
本書後續内容中的代碼和說明,都将假設你的web伺服器在80端口上運作,并且mysql伺服器在3306端口上運作。現在是一個很好的時機,可以檢視下mamp是否使用了這些标準的端口正常運作。按照如下步驟即可。
1.在mamp視窗中,點選stop servers按鈕,等待訓示标志變為紅色。
2.單擊preferences…按鈕并導航到ports标簽頁。
3.單擊set to default apache and mysql ports按鈕,以便apache能夠使用80端口而mysql使用3306端口。單擊ok按鈕。
4.單擊start servers,mamp将會提示你輸入密碼。因為要在80這樣的一個“官方”internet端口上運作伺服器,需要有管理者權限。
如果在步驟1中,有一個或兩個訓示标志沒有變成紅色,或者如果歡迎頁面沒有正确載入,那很可能有端口沖突。在mac上的某處,有另外一個web伺服器或mysql伺服器已經使用了一個端口或兩個端口。一個需要檢查的位置是system preferences中的sharing圖示。如果web sharing是打開的,mac os x的内建apache是在運作中(通常在端口80上)的。另一個選擇是嘗試關閉各種應用。例如,在某些條件下,skype for mac會阻止mamp的mysql伺服器啟動。
對預設的mamp配置所做的最後一項修改,就是打開php錯誤顯示。預設情況下,當你在php代碼中犯下一個嚴重的錯誤的時候(相信我,我們都會犯很多錯誤),mamp的apache伺服器将會産生一個空白的web頁面。作為一名開發者,當你需要搞清楚出現了什麼樣的輸入錯誤的時候,這真的幫不上什麼忙。我更喜歡在浏覽器視窗中看到一條詳細的錯誤消息。
mamp預設關閉了錯誤顯示。其原因是,當你決定使用它寄存一個公開的、可供通路的web站點的時候,當你犯錯的時候,站點的通路者将不會看到這令人尴尬的錯誤消息。然而,實際上,一個公開web站點遭遇尴尬,這在其開發階段是很平常的事情。
要打開php錯誤顯示,你可以在mac的applications檔案夾中打開mamp檔案夾。從那裡開始,繼續向下找到bin/php/。針對mamp所附帶的每個php版本,這個php檔案夾下面都包含了一個子檔案夾。你可以在mamp的preferences下仔細檢查以确認版本。但是,有可能已經配置為運作最新的版本了。是以,打開這個最新版本的檔案夾(在我的mamp 2.0.5版本中,是php5.3.6)。然後,再打開conf子檔案夾。用你喜歡的文本編輯器打開php.ini檔案(textedit就是不錯的文本編輯器),你會看到如下幾行内容:
将最後一行的off改為on,并儲存該檔案。現在,單擊stop servers按鈕,然後在mamp中單擊start servers按鈕,以新的配置來重新啟動apache。好了,php現在将會顯示有用的(如果有點讓人精神崩潰的話)錯誤消息。
當你用完mamp的時候,通過單擊mamp視窗中的quit按鈕,關閉掉它(以及它的内建伺服器)。當你下一次需要對資料庫驅動的web站點做些事情的時候,隻要重新啟動它就好了。
在mamp中設定mysql root密碼
一旦mamp在你的mac計算機上啟動并運作,你接下來的工作應該是為mysql設定一個root密碼了。
mysql隻允許授權的使用者浏覽和操作存儲在其資料庫中的資訊。是以,你需要告知mysql,誰是經過授權的使用者而誰不是。當你初次安裝mysql的時候,它配置了一個名為“root”使用者,該使用者能夠通路mysql并且執行大部分的任務,而不需要輸入密碼。是以,你的首要任務是為該root使用者配置設定一個密碼,以使得未經授權的使用者無法操作你的資料庫。
意識到能夠通過同一網絡中的任意計算機通路mysql(就像一個web伺服器一樣)是很重要的。如果你在連接配接到網際網路上的一台計算機上工作,那麼,根據你所采取的安全性措施,世界上的任何人都可能連接配接到你的mysql伺服器。是以,顯然選擇一個難以猜測到的密碼是很有必要的。
要設定mysql root密碼,首先要確定mamp及其伺服器在運作中。然後,打開mac os x terminal應用程式(可以在applications檔案夾下的utilities檔案夾中找到),并且輸入如下的指令(在每條指令之後按下enter鍵):
這會導航到你的mamp安裝位置的library/bin/子檔案夾,這是terminal工具程式所在的位置。
用你想要配置設定給root使用者的密碼替代newpassword。
當你按下enter鍵的時候,将會提示你輸入目前的密碼: root。
3.退出terminal。
現在密碼設定好了,但是帶來了一個新的問題:mamp自身需要不受限制地通路mysql伺服器,以便能夠控制它。如果此時你在mamp中點選open start page按鈕,将會收到一條錯誤消息:“error: could not connect to mysql server!”。顯然,我們需要告知mamp新的mysql root密碼是什麼。
你必須編輯mamp檔案夾中的幾個檔案,以使其能夠再次工作。可以在textedit中(或者你喜歡的任何文本編輯器中),打開這些檔案中的每一個。
textedit有一個糟糕的習慣性錯誤,就是在打開.php檔案的時候會将其誤當作是html文檔,并且試圖将其顯示為格式化文本。為了避免這一點,你必須在open對話框中選中ignore rich text commands複選框。
/applications/mamp/bin/mamp/index.php
找到如下所示的一行:
用你的新的root密碼(即'newpassword')替換第二個'root'。
/applications/mamp/bin/phpmyadmin/config.inc.php
這是一個很大的檔案,是以,你可能需要使用文本編輯器的find功能來找到如下的内容:
同樣,用你的新的root密碼(即'newpassword')替換第二個'root'。
/applications/mamp/bin/checkmysql.sh
/applications/mamp/bin/quickcheckmysqlupgrade.sh
/applications/mamp/bin/repairmysql.sh
/applications/mamp/bin/stopmysql.sh
/applications/mamp/bin/upgrademysql.sh
小檔案中的内容都是以如下的形式開頭(這是以checkmysql.sh為例)的:
看到-proot了嗎?p表示“password”,而剩下的内容是密碼。将其更改為新的密碼(即-pnew password)。
對這5個檔案都做同樣的修改。
做了這些修改并儲存之後,mamp應該又能夠正常工作了。而mysql伺服器對于外圍的入侵來說也已經是很好、很安全的了。
哦,不要忘了這個密碼。如果忘記的話,再要修改會很困難。但是,我将在第10章中介紹如何做到這點。可以在下面記下你的mysql root密碼,以備不時之需:
2當然,無法保證另一個程式不會在你的系統上使用端口8888或8889。我在使用yazsoft的playback(一款流媒體播放軟體,可以用于xbox 360和playstation 3這樣的遊戲控制台)的時候就碰到過這種麻煩,它運作的時候就使用端口8888。如果有問題的話,請嘗試另一個不同的端口号。