linux安裝php與memcache過程記錄

來源:互聯網
上載者:User

linux安裝php與memcache過程記錄

安裝環境是Ubuntu13.10版本i386,已經安裝好nginx伺服器和mysql伺服器,現在的任務是需要安裝php和memcache。直接乾貨,多餘的不說。

1、php安裝及錯誤排查

由於php安裝前需要安裝很多庫檔案,因此需要耐心得按照一定的順序來安裝。我按照如下順序安裝:

zlib -> freetype -> libxml2 -> libpng -> libgd2 -> libmcrypt

其中的也有依賴關係的是,安裝gd2需要用到zlib、freetype、libpng(libjpeg)等,因此需要先安裝這些之後再安裝gd2。這裡的安裝按照通用目錄配置到/usr/local/xxx目錄下,一般不會出現問題,可能在安裝freetype時會出現問題:

 

注意,安裝freetype時有可能提示如下錯誤: either set the LIBPNG_CFLAGS and LIBPNG_LDFLAGS environment variables 這是提示找不到libpng的安裝位置,所以需要將libpng的bin目錄配置到環境變數中:解決方案:編輯:vi /etc/profileLIB_PNG=/usr/local/libpng/binPATH=$LIB_PNG:$PATH  export PATH 生效:.  /etc/profile
這裡我想記錄一下的是我安裝GD2的時候沒有報錯,安裝成功了。但是後來安裝php的時候,在配置中配置好GD2的安裝目錄後,出現錯誤,而且configure是沒問題,是在安裝的時候出錯的,要知道安裝php的時候configure本來就要很久,然後沒錯,make的時候也要很久,這樣等了很久很久之後突然說編譯出錯,真的是有點崩潰。錯誤如下:
/usr/local/src/php-5.5.6/ext/gd/gd.c:57:22: error: X11/xpm.h: No such file or directorymake: *** [ext/gd/gd.lo] Error 1
說明:這是提示沒有安裝libXpm庫,是在安裝gd2庫的時候沒有配置開啟。

這樣我去查之前配置安裝gd2的時候提示,確實發現對libXpm庫不支援,如下:

** Configuration summary for libgd 2.1.0:   Support for Zlib:                 yes   Support for PNG library:          yes   Support for JPEG library:         no   Support for VPX library:          no   Support for TIFF library:         no   Support for Freetype 2.x library: yes   Support for Fontconfig library:   no   Support for Xpm library:          no   Support for pthreads:             yes

因此,解決辦法就是去下載libXpm庫安裝:

sudo apt-get install libXpm-dev
這樣安裝後本以為可以了,就去重新安裝gd2庫,在配置gd2的時候多加一條 --with-xpm=/usr/lib。

但是配置時會提示找不到xpm庫,這裡我上網找到瞭解決辦法,在/usr/lib下面建立軟串連檔案到真實的xpm庫檔案,如下:

ln -s /usr/lib/ (x86_64 or i386 ) /libXpm.a  /usr/lib/libXpm.a ln -s /usr/lib/ (x86_64 or i386 ) /libXpm.so  /usr/lib/libXpm.so ln -s /usr/lib/ (x86_64 or i386 ) /libXpm.so.4  /usr/lib/libXpm.so.4 ln -s /usr/lib/ (x86_64 or i386 ) /libXpm.so.4.11  /usr/lib/libXpm.so.4.11

操作完成之後,就可以重新安裝gd2庫了,配置完成成功:

會發現 "Support for Xpm library : yes"這一項,說明配置成功,然後make && make install即可完成安裝gd2庫。

接著安裝所有庫檔案完成後,可以配置php安裝了,由於之前,配置成功,編譯出錯,因此這次配置的時候需要加入 --with-xpm-dir=/usr/lib/這一項才能編譯成功。完整配置如下:

 ./configure \    --prefix=/usr/local/php5.5 \      --with-libxml-dir=/usr/local/libxml2/ \    --with-png-dir=/usr/local/libpng/ \    --with-freetype-dir=/usr/local/freetype/ \    --with-gd=/usr/local/gd2/ \    --with-zlib-dir=/usr/local/zlib/ \    --with-mcrypt=/usr/local/libmcrypt/ \    --with-xpm-dir=/usr/lib/ \    --with-mysql \    --with-mysqli \    --enable-pdo \    --with-pdo-mysql \     --with-iconv \   --enable-soap \    --enable-mbstring=all \    --enable-sockets \  --enable-fpm
這樣configure和make、make install之後,就可以完成php的安裝。然後使用
sudo /usr/loca/php5.5/sbin/php-fpm
開啟php-fpm服務,可以將這條命令加入到/etc/rc.local檔案中作為自啟動服務。

在nginx的設定檔中添加對php的支援即可使用php開發了。

2、安裝memcache及錯誤處理

memcache分為伺服器端和php擴充,伺服器端使用memcached表示,完成所有資料的儲存刪除等各種管理,php擴充是php使用memcache的一個擴充庫,用memcache表示,用於調用和訪問系統的memcache服務,直接在php中使用new Memcache即可。

(1)首先需要安裝伺服器,這個直接使用ubuntu的預設安裝即可:

sudo apt-get install memcached

安裝完Memcache服務端以後,使用如下命令啟動服務:

memcached -d -m 128 -p 11111 -u root
memcached服務的啟動參數說明:
-p <num> TCP監聽的連接埠,預設是11211-l <addr> 串連的IP地址, 預設是本機-d 啟動memcached服務-d restart 重起memcached服務-d stop|shutdown 關閉正在啟動並執行memcached服務-d install 安裝memcached服務-d uninstall 卸載memcached服務-u <username>  運行身份 (僅在以root啟動並執行時候有效)-m <num> 最大記憶體使用量,單位MB。預設64MB-M  記憶體耗盡時返回錯誤,而不是刪除項-c <num> 最大同時串連數,預設是1024-C 禁止使用CAS-P <file> 設定PID儲存的檔案名稱,僅僅和 -d 選項一起調用-f  <factor> 塊大小增長因子,預設是1.25-n 最小分配空間,key+value+flags預設是48-t <num> 使用的線程數目,預設是4-b  設定備份日誌隊列的大小,預設是1024-R  設定每個事件的最大請求數目,預設是20-h 顯示協助

可以從查看memcached伺服器是否開啟:

可以看到11211連接埠以處於LISTEN狀態,說明memcached伺服器已經開啟。

(2)安裝memcache用戶端

這個安裝其實就是在php已經安裝完成的基礎上,給php安裝新的擴充,就類似為一個沒有配置安裝socket的php在不卸載php的前提下重新安裝一個socket的擴充的原理類似。

首先可以使用php內建的pecl安裝程式:

/usr/local/php5.5/bin/pecl install memcache
其次也可以用如下命令下載源碼包後解壓安裝:  
wget http://pecl.php.net/get/memcache-2.2.6.tgz
但是我遇到的問題是,不論使用上述哪個方法,最終的結果都是要使用phpize工具為memcache組建組態檔案,而這個需要autoconf這個庫,從之前安裝php的配置中可以看出,我並有安裝autoconf庫,因此我使用上述兩種方法安裝都會報同樣的錯:


同樣,當我使用源碼包安裝的時候,進入到memcache源碼包後,需要使用/usr/local/php5.5/bin/phpize工具來產生configure檔案,會與報同樣的錯誤。從此處也可以說明,上述兩種安裝方式都是殊途同歸,原理都一樣。

為此,我需要去安裝autoconf庫,但是在安裝這個庫的時候,同樣會報錯:

這裡可以明顯看出,就是M4版本太低,需要更新。通過查閱資料知曉,autoconf使用M4宏處理器處理configure.in檔案,從而可以產生configure檔案用於安裝配置。

然後,就是去下載M4源碼進行安裝了,這裡又有一個坑,我安裝提示的去下載推薦的 M41.4.16版本的源碼包,配置成功,但是編譯的時候會出現類似下面的問題:

./stdio.h:477:1: error: 'gets' undeclared here (not in a function)_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");^
這個問題我在網上尋找,發現不僅僅是安裝M4會出現,很多人安裝其他的庫的時候也會出現類似問題,也找到有人更改 _GL_WARN_ON_USE進行hack,也有人說進行打補丁(這個問題的具體原因可能比較複雜,也沒弄清)。但是我覺得我的ubuntu是13.10是比較新的版本,應該會有修複吧!於是我就重新下載了一個M4的最新版本:  
wget  http://ftp.gnu.org/gnu/m4/m4-latest.tar.gztar -zxf m4-latest.tar.gz;mv m4-1.4.17  /usr/local/m4cd /usr/local/m4./configuremakemake insatll

按照上面步驟安裝的時候,奇蹟出現了,果然可以編譯安裝完成,沒有任何問題。此處得出的結論是,作為軟體使用者和開發人員我們一定要適合保持軟體的更新,盡量使用最新的穩定的版本,這樣可以避免遇到很多奇怪的問題。

安裝時把解壓包放到/usr/local/m4下,然後直接configure不指定prefix才可以安裝autoconf,否則也會同樣的找不到M4的錯誤。

安裝autoconf如下:

export  PATH=/usr/local/m4:$PATHcd autoconf./configure --prefix=/usr/local/autoconfmakemake install
按照上述命令安裝就完成了autoconf的安裝。

然後接著去安裝memcache,此時,使用export將/usr/local/autoconf/bin匯入到PATH並不起作用,因此我嘗試使用了如下的命令:

sudo ln -s /usr/local/autoconf/bin/autoconf autoconfsudo ln -s /usr/local/autoconf/bin/autoheader autoheadersudo ln -s /usr/local/autoconf/bin/autom4te autom4tesudo ln -s /usr/local/autoconf/bin/autoreconf autoreconfsudo ln -s /usr/local/autoconf/bin/autoscan autoscansudo ln -s /usr/local/autoconf/bin/autoupdate autoupdatesudo ln -s /usr/local/autoconf/bin/ifnames ifnames

做了這些符號連結之後,我重新進入memcache源碼檔案使用phpize工具就沒問題了,成功產生了configure檔案:

安裝過程如下:
./configure  \ >--with-php-config=/usr/local/php5.5/bin/php-config \ >--enable-memcache=/usr/bin/memcachedmakemake install
安裝完成如所示,最後出現的installed shared extensions是在php的設定檔中進行配置memcache時候需要使用到的,需要儲存下來。



配置php.ini檔案,在/usr/local/php5.5/lib/php.ini,找到extension_dir這一行:

;extension_dir = "./" 改為extension_dir = "安裝memcache完成後的目錄路徑"extension = "memcache.so" ;添加此行用於添加memcache擴充
使用如下的php代碼進行測試:
<?php//Test memcache$mem = new Memcache;$mem->connect('127.0.0.1', 11211);echo '<pre>';var_dump($mem);var_dump(class_exists("Memcache"));?>
結果


 

通過上述的種種艱辛,不僅是完成了安裝的任務,也讓我進一步熟悉了linux下安裝軟體的各種值得注意的地方。安裝gd2庫的時候需要依賴Xpm庫,這個問題其實是在安裝好了gd2後安裝php的時候出現的,然後又重新安裝gd2,特別是安裝Xpm後,使用了符號連結之後,就可以安裝帶有Xpm的gd2庫了。這個方法是一個啟示!在後面安裝autoconf完成後,使用PATH變數失效時是當時突然想起符號連結這個方法,因此就自己嘗試性使用並解決了問題。還有就是安裝M4的時候,版本問題可能牽涉出很多底層的問題,這個我也沒弄清楚,當時也是嘗試性的使用最新版本安裝就可以解決了。最後安裝memcache的時候就比較順利了。同時也發現網上有很多安裝php的時候就使用配置選項--with-autoconf選項直接一步安裝了autoconf,這樣就可以直接使用phpize工具了,但是我這裡沒有安裝,雖然讓我費了周折,但是最後單獨安裝了autoconf之後,使用符號連結指定安裝的autoconf路徑,然後phpize就可以從PATH中的/usr/bin這個路徑下找到,因此這也說明了安裝php是指定配置選項應該就是指定了php對這個依賴項需要調用時的一個尋找路徑。晚飯時間到了,折騰了一天,看到一切都可以使用的時候還是感覺蠻不錯的!希望有前輩可以解答我前面提到的一些疑惑!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.