# 1.7 最后的微調
我們已經安裝了Linux(Ubuntu),Apache,PHP和MySQL。至此,一個基本的LAMP結構已經搭建完成。但是我們還缺少最后關鍵的幾步,將這幾個單元有機地整合起來。
## 1.7.1 對Apache的微調
我們需要對Apache進行的微調是使得它支持URL重寫規則。這個是我們日后用Symfony編寫應用并分發測試時必須的:
~~~
sudo a2enmod rewrite
~~~
該命令將使得Apache支持URL重寫。
~~~
sudo service apache2 restart
~~~
該命令將重啟Apache服務,我們剛才的改動從此生效。
## 1.7.2 對PHP的微調
對PHP的微調分為幾個方面。一個是對`php.ini`配置文件的修改,一個是添加一些PHP的掛接模塊(特別是MySQL模塊)。
一般而言,在安裝好Apache之后再安裝PHP,則PHP的安裝過程中會自動掛接一個`libapache2-mod-php5`的Apache模塊。在重啟Apache之后,Apache就開始支持PHP腳本的解析。
如果PHP的安裝沒有自動掛接該Apache模塊,我們可以手動安裝:
~~~
sudo apt-get install libapache2-mod-php5
~~~
然后重啟Apache服務使模塊生效。
### 1.7.2.1 修改`php.ini`
PHP的配置文件有兩個,分別處理PHP在命令行中執行和在Apache中作為模塊執行時的表現。由于我們是要進行Web開發,所以我們要修改的是所謂Web下的PHP配置文件。該文件位于`/etc/php5/apache2`,對其修改需要`root`權限(我們登錄時使用的`vagrant`用戶就具有`root`權限)。
一般而言,我們不用太多地修改這個文件,但是有這么幾項還是需要進行改動的:
~~~
date.timezone = Asia/Shanghai
;或者用UTC;或者你喜歡的時區
upload_max_filesize = 100M
;設置的這么大,是因為有時需要通過上傳大圖片
post_max_size = 100M
;這個值和上面這個值的設置最好保持一致
~~~
### 1.7.2.2 PHP模塊
PHP模塊又稱為PHP擴展,是一些可掛載的程序(在Linux系統下是`*.so`),為PHP語言本身提供更多的功能。有關PHP模塊的開發,已經超出了本書的范圍。有興趣的讀者可以參閱我寫的系列教程:[第一部分](http://www.sitepoint.com/getting-started-php-extension-development-via-php-cpp/),[第二部分](http://www.sitepoint.com/php-extension-development-php-cpp-object-oriented-code/),[第三部分](http://www.sitepoint.com/developing-php-extensions-c-php-cpp-advanced/)。
到底要裝哪些模塊完全是個人喜好和開發要求決定,沒有標準。
作為本書所討論的Web應用,我選擇安裝了如下擴展:

這些擴展的具體介紹可以參見相關文檔。
注意:`complex.so`是我自己開發的一個復數模塊,你在別處找不到,只能根據我的教程自己編譯。沒有這個模塊也不會影響我們后面的開發。
這些模塊的安裝都可以使用類似的方法。比如,我們要安裝`mcrypt`這個擴展,那么我們這么做:
~~~
apt-cache search mcrypt | grep php
~~~
這個命令會給出如下的信息:
~~~
php-crypt-blowfish - Allows for quick two-way blowfish encryption without requiring the MCrypt PHP extension
php5-mcrypt - MCrypt module for php5
~~~
其中的`php5-mcrypt`就是我們要安裝的擴展名。然后我們用:
~~~
sudo apt-get install php5-mcrypt
~~~
命令就可以完成安裝和配置了。
模塊安裝完成后,建議重新啟動Apache服務。
## 1.7.3 對MySQL的微調
對MySQL的微調也分為兩部分。一部分是和PHP的掛接,一部分是MySQL本身的微調。
### 1.7.3.1 和PHP的掛接
我們安裝了PHP,也安裝了MySQL,但是我們還沒有在PHP中掛接MySQL擴展。只有掛接了這個MySQL擴展,我們才能在我們的PHP程序中使用MySQL數據庫的功能。
~~~
sudo apt-get install php5-mysql
~~~
如果覺得有必要,你也可以安裝一個`phpmyadmin`來對MySQL數據庫進行管理:
~~~
sudo apt-get install phpmyadmin
~~~
但是我們也可以遠程來管理MySQL數據庫。
### 1.7.3.2 修改`my.cnf`
MySQL的配置文件是:`/etc/mysql/my.cnf`。
我們需要記住:我們在Windows機器上進行開發,通過Vagrant的文件夾共享將我們的修改直接映射到Vagrant盒子中。相對我們的Windows機器,這個盒子是“遠程”的(因為我們的盒子設置中,其IP和我們Windows機器的IP不是一個,更不在一個網段)。
缺省情況下,MySQL只對本級的MySQL請求做出響應,因此無法進行遠程管理。使用PHPMyAdmin雖然可以解決這個問題,但是我比較喜歡用本地GUI的程序來管理遠程MySQL,所以需要設置MySQL以放開遠程管理。
~~~
bind-address = 127.0.0.1
~~~
修改完畢后,使用如下命令重啟MySQL服務:
~~~
sudo service mysql restart
~~~
在終端登錄MySQL,輸入如下命令:
~~~
grant all privileges on *.* to 'root'@'%' identified by 'password' with grant option
~~~
好了。經過這些修改后,我們在Windows機器中也可以用GUI程序來管理在Vagrant運行的MySQL服務器了。我個人使用的是Valentina Studio Pro(我為這個軟件寫過一篇[測評](http://www.sitepoint.com/look-valentina/),所以獲得了一個免費的專家版授權)。還有很多免費的GUI程序可以下載使用,比如MySQL官方推薦的[MySQL Workbench](http://www.mysql.com/products/workbench/)。
至此,我們的LAMP服務器設置基本完成——只有最后一步了:我們需要設置一個虛擬服務器來使得我們可以遠程訪問我們的站點。
- 引言
- 1 LAMP
- 1.1 安裝虛擬機
- 1.2 安裝Vagrant
- 1.3 安裝Ubuntu
- 1.4 安裝Apache 2
- 1.5 安裝PHP
- 1.6 安裝MySQL服務器
- 1.7 最后的微調
- 1.8 設置一個虛擬主機
- 1.9 一個趁手的IDE
- 2 Symfony 3和重要構件
- 2.1 Symfony 3
- 2.2 Doctrine
- 2.3 Twig
- 2.4 Composer
- 3 Symfony重要概念
- 3.1 MVC
- 3.2 Bundle/包
- 3.3 Route/路由
- 3.4 Controller/控制器
- 3.5 Entity/實體
- 3.6 Repository/倉庫
- 3.7 Template/模板
- 3.8 Test/測試
- 4 藏書管理程序的結構
- 5 創建應用
- 5.1 建立版本管理
- 5.2 建立數據庫
- 5.3 應用結構
- 5.4 建立數據庫實體
- 5.5 樣本數據
- 5.6 路由
- 5.7 模板
- 5.8 開始編寫首頁
- 5.9 書籍詳情頁面
- 5.10 書籍列表頁面
- 5.11 書籍搜索
- 6 用戶和后臺
- 7 結語