日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

PHP编译安装

發(fā)布時(shí)間:2023/11/27 生活经验 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PHP编译安装 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

#wget http://museum.php.net/php5/php-5.2.6.tar.gz (下載php源碼)

http://cn.php.net/releases/ ?可以找到

#tar zxvf php-5.2.6.tar.gz

#cd php-5.2.6

#./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-apxs2=/usr/local/apache/bin/apxs

#make

#make install

說(shuō)明:with-mysql就是你的mysql安裝路徑

===================================================

總是有人反復(fù)問(wèn)我這樣一個(gè)菜鳥(niǎo)php在CentOS等Linux系統(tǒng)下的安裝問(wèn)題,甚至同是一個(gè)人,幾個(gè)月內(nèi)安裝PHP數(shù)次竟問(wèn)我?guī)资畟€(gè)相關(guān)問(wèn)題,但是我保證:他每一次問(wèn)的問(wèn)題都不重樣。這讓我不禁停下來(lái)思考“無(wú)數(shù)次”的原因是什么? 我初步總結(jié)兩點(diǎn):
引用
1.未對(duì)linux原理進(jìn)行系統(tǒng)學(xué)習(xí)
2.Linux太靈活

由于安裝php的人目的不同,我們不能要求每個(gè)人都如此這般精通Linux再去安裝php,特別是有些php程序員僅僅是想搭建一個(gè)完整的Php環(huán)境,然后就要迅速轉(zhuǎn)入編程工作,自然對(duì)linux環(huán)境不甚熟悉。所以本文的目的就是想從菜鳥(niǎo)理解問(wèn)題的角度(特別是面向windows下的Php程序員)闡述linux下安裝php環(huán)境遇到的種種問(wèn)題的緣故和解決思路.(本文的安裝也是基于一個(gè)Linux發(fā)行版: CentOS5.2)

開(kāi)始之前,普及一些必要的Linux安裝軟件的知識(shí),一般來(lái)說(shuō):

1.不管任何linux系統(tǒng),只要代碼開(kāi)源, 都可以通過(guò)tar源碼包方式安裝軟件,即源碼編譯運(yùn)行。
2.如果你基于某個(gè)Linux發(fā)行版工作,那么現(xiàn)代版的Linux套件都提供便捷的工具來(lái)安裝軟件。如CentOS使用yum,Ubuntu使用apg-get.

回到php安裝上來(lái): php通常都是用來(lái)做web應(yīng)用,所以安裝php也意味著安裝apache和mysql。
既然我們使用CentOS套件,不妨先體驗(yàn)一把CentOS的yum工具如何便捷地安裝軟件.
假設(shè)此時(shí)CentOS主機(jī)已經(jīng)裝好,能夠SSH登錄上去,那么開(kāi)始安裝Apache,PHP, Mysql(認(rèn)為以下有些只是點(diǎn)初學(xué)者能容易通過(guò)其他渠道掌握的省略),安裝不必順序進(jìn)行:
1). 安裝Apache
sudo yum install httpd mod_ssl
2). 安裝php
sudo yum install php php-common php-gd php-mcrypt php-pear php-pecl-memcache php-mhash php-mysql php-xml
3). 安裝mysql
sudo yum install mysql-server
4). 啟動(dòng)mysql,
sudo service mysqld start
5). 啟動(dòng)apache
sudo service httpd start
在瀏覽器中訪問(wèn)http://youhost/,看看apache歡迎頁(yè)是不是出來(lái)了.接下來(lái)寫(xiě)一個(gè)php腳本,鏈接數(shù)據(jù)操作,放到apache主目錄下,看看能否訪問(wèn).

一般來(lái)說(shuō),很多人都是可以做到的,即便遇到一點(diǎn)問(wèn)題也都可以通過(guò)google找到資料解決,讓人對(duì)Linux學(xué)習(xí)充滿信心.

那么,真正的問(wèn)題在于: 你無(wú)法安于yum工具默認(rèn)為你做的設(shè)置,yum傻瓜式幫你把軟件裝好,一旦你需要任何對(duì)軟件、特別是對(duì)服務(wù)器軟件的定制時(shí),你發(fā)現(xiàn)你都必須面對(duì)Yum下面的復(fù)雜性!

案例1: 我發(fā)現(xiàn)默認(rèn)裝好的php是5.1.6,但是我想升級(jí)到5.2.10,但是yum服務(wù)器沒(méi)有提供package怎么辦?
看看前面提到的源碼tar包方式,現(xiàn)在是面對(duì)的時(shí)刻了,去網(wǎng)站下載php源代碼,在本地編譯.
tar包安裝軟件基本分三步走:
Shell代碼
  1. 1.?configure ??
  2. 2.?make ??
  3. 3.?make?install??

注:這里的前提是apache, mysql已經(jīng)安裝在你的機(jī)器上了.那么升級(jí)之前是否要卸載當(dāng)前的php5.1.6呢? 當(dāng)然要?jiǎng)h(不要手工刪除,yum安裝的就用yum刪除),執(zhí)行yum remove php即可.

現(xiàn)在解壓縮php源碼到 php-5.2.10目錄,進(jìn)入該目錄執(zhí)行
Shell代碼
  1. ./configure?--prefix=/my/php ??
  2. make ??
  3. make?install??

這是一個(gè)最簡(jiǎn)化的安裝步驟,如果不出意外,你的php所有相關(guān)的文件都被安裝在/my/php目錄下. 源碼安裝方式的有點(diǎn)在于,你能控制一個(gè)軟件安裝后所有的文件在一個(gè)相關(guān)目錄下,缺點(diǎn)是你必須手工地配置它和apache與mysql的關(guān)聯(lián).
/my/php/bin/php 就是Php程序,在httpd.conf中配置其以CGI方式運(yùn)行(google容易搜到不贅述).重新啟動(dòng)apache, 運(yùn)行一個(gè)Php腳本,現(xiàn)在應(yīng)該已經(jīng)可以執(zhí)行了.

運(yùn)行一個(gè)數(shù)據(jù)庫(kù)連接的php腳本,通過(guò)IE運(yùn)行,結(jié)果如何? 很遺憾,他可能告訴你mysql_connect找不到. 想想這個(gè)結(jié)果蠻合理的,apache和php通過(guò)前面的設(shè)置綁定好了,但是好像從來(lái)沒(méi)設(shè)置過(guò)php和mysql的綁定啊?

其實(shí),這里我們可以引申出一個(gè)基本概念: php如何使用第三方軟件!
本例是: php(mysql_connect()函數(shù))使用mysql(第三方軟件).

觀察上圖,php能使用大量的第三方非php庫(kù)(典型性是C語(yǔ)言寫(xiě)庫(kù)), 為了達(dá)到此目的,你必須具備兩個(gè)條件:
Shell代碼
  1. 條件I.??安裝第三方庫(kù)(軟件) ??
  2. 條件II.?安裝了該軟件的php擴(kuò)展??


前面的情況是: mysql裝了,滿足條件I,但是條件II不滿足, 為了滿足條件二, 我們需要了解php安裝擴(kuò)展的知識(shí).
安裝php, 大的方面還可以分為兩種方式:
引用 方式1. 將擴(kuò)展編譯到php
方式2. 將擴(kuò)展單獨(dú)編譯成動(dòng)態(tài)連接庫(kù)so文件

方式1的優(yōu)點(diǎn)是運(yùn)行速度快,但是為了一個(gè)擴(kuò)展需要重新安裝整個(gè)php;方式2靈活,但是運(yùn)行速度稍慢. windows平臺(tái)下的php程序員大多只熟悉方式2,因?yàn)榉绞?是windows下安裝Php擴(kuò)展的唯一方式.

這里,我想教大家熟悉一方式1. 因?yàn)橹安皇前惭bphp了嗎? 如果沒(méi)有刪除php-5.2.10目錄,重新進(jìn)入該目錄, 那么此時(shí)重新編譯運(yùn)行將采用增量方式,實(shí)際上比方式2還更方便些.仍然3步走:
Shell代碼
  1. ./configure?--prefix=/my/php?--with-mysql ??
  2. make ??
  3. make?install??


和第一次安裝php有什么差別? 是不是僅僅多了一個(gè)--with-mysql? 沒(méi)錯(cuò),php源碼包包括了大量的Php擴(kuò)展,也包括mysql的php擴(kuò)展,只要加一個(gè)--with-mysql指示符, 編譯的Php就支持mysql訪問(wèn)了

不幸的是, 很多人加了--with-mysql參數(shù)后出項(xiàng)提示找不到頭文件(*.h)文件,這是為什么呢?..h文件屬于c語(yǔ)言知識(shí)范疇了, 不過(guò),一個(gè)基本知識(shí)是: X軟件的php擴(kuò)展的源代碼在編譯時(shí)必然可能依賴X軟件的某些東西,好比mysql的php擴(kuò)展源代碼編譯時(shí)不僅僅要求你安裝mysql sever, 而一定要它的開(kāi)發(fā)包相關(guān)文件(.h文件). 因此一般的思路就是: 下載mysql開(kāi)發(fā)包并安裝. 不過(guò)不要擔(dān)心, 不到非必要,我們都盡可能使用yum工具來(lái)安裝所有能安裝的東西.通常有個(gè)命名管理,就是x軟件的開(kāi)發(fā)包,往往相應(yīng)的yum包名都是x-devel. 不例外地,安裝mysql開(kāi)發(fā)包的命令則是: yum install mysql-devel.一路yes安裝完畢. 重新運(yùn)行--with-mysql的configure, 現(xiàn)在應(yīng)該順利重裝了php, 而且數(shù)據(jù)庫(kù)連接也應(yīng)該正常工作了.

有人質(zhì)疑: 我安裝mysql sdk,./configure命令一個(gè)--with-mysql就知道我安裝的目錄,還是有點(diǎn)神奇,難道他全硬盤(pán)搜索.h文件? 不是, 如果你用yum方式安裝sdk,那么LD_LIBRARY_PATH系統(tǒng)變量就指示了該sdk相關(guān)信息 ,如果你使用源碼(tar)安裝mysql sdk,你的--with-mysql參數(shù)不得不像這樣: --with-mysql=/your_mysql_sdk_dir/

案例2: (基于案例I)我發(fā)現(xiàn)5.2.10默認(rèn)已經(jīng)支持了很多擴(kuò)展如果dom, iconv等,根據(jù)客戶要求,現(xiàn)需要安裝如下的擴(kuò)展:
curl, gettext, bz2, mysql,? calendar,pspell, shmop, ftp, openssl, zlib, exif,gmp,sysvmsg,sockets,wddx, gd, mysqli, pdo_mysql, mcrypt, mime_magic, xsl


正像案例1描述安裝mysql擴(kuò)展的過(guò)程一樣, 這些擴(kuò)展全都可參照依法炮制.configure配置命令如下:
Shell代碼
  1. ./configure?--prefix=/usr/local/php?--with-curl?--with-gettext?--with-bz2?--with-mysql?-enable-shmop?--enable-calendar?--with-openssl?--with-pspell?--enable-ftp?--with-openssl?--with-zlib?--enable-exif?--with-gmp?--enable-sysvmsg?--enable-sockets?--enable-wddx?--with-xsl?--with-mcrypt?--with-mysqli?--with-mime_magic?--with-pdo-mysql?--with-gd?--with-apxs2=/usr/local/apache/bin/apxs?--without-sqlite?--enable-so??

我怎么知道這些參數(shù)的含義? 打開(kāi)./configure腳本,參照官方php文檔學(xué)習(xí)這些參數(shù)的含義是正宗的方法.

特別注意--with-apxs2=/usr/local/apache/bin/apxs的用法,此參數(shù)假設(shè)了apache已經(jīng)預(yù)先安裝帶有apxs,這樣apache的php模塊文件會(huì)自動(dòng)添加到httpd.conf文件中,如果是通過(guò)yum方式安裝的apxs(如:yum -y install httpd-devel),則--with-apxs2參數(shù)不要加=后面的路徑。也請(qǐng)參考另篇文章http://koda.iteye.com/blog/233412

安裝過(guò)程中一定存在可能X軟件還沒(méi)安裝,導(dǎo)致X軟件的php擴(kuò)展不可以通過(guò)configure檢查.下面列出部分軟件依賴性:
Linux代碼
  1. #?安裝apache,?mysql-server ??
  2. yum?-y?install?httpd?mod_ssl? ??
  3. yum?-y?install?mysql-server ??
  4. ??
  5. #和PHP相關(guān)的依賴 ??
  6. yum?-y?install?mysql-devel? ??
  7. yum?-y?install?perl?httpd-devel?apr-devel ??
  8. yum?-y?install?bzip2-devel? ??
  9. yum?-y?install?curl-devel? ??
  10. yum?-y?install?gmp-devel ??
  11. yum?-y?install?pspell-devel ??
  12. yum?-y?install?libmcrypt-devel ??
  13. yum?-y?install?libxslt-devel ??
  14. yum?-y?install?libjpeg-devel ??
  15. yum?-y?install?libpng-devel? ??
  16. yum?-y?install?libxml2-devel ??
  17. yum?-y?install?freetype-devel ??
  18. ??
  19. #?一些包,和部分工具軟件 ??
  20. yum?-y?install?openssl-devel ??
  21. yum?-y?install?libgssapi-devel ??
  22. yum?-y?install?krb5-devel ??
  23. yum?-y?install?make ??
  24. yum?-y?install?libtool-ltdl-devel ??
  25. yum?-y?install?sendmail?mailx?? ??
  26. yum?-y?install?subversion-devel??

假設(shè)yum包不包含該軟件怎么辦? 采用終極方法:tar包安裝,參照另文描述.

安裝之后,php.ini默認(rèn)不存在。如果需要設(shè)置php.ini選項(xiàng),通過(guò)phpinfo()函數(shù)查看php.ini默認(rèn)存放路徑,將php源碼路徑下的php.ini-recommended復(fù)制到其目錄下更名為php.ini

./configure時(shí)發(fā)現(xiàn)如下三個(gè)32/64bit不兼容錯(cuò)誤
Linux代碼
  1. libz.so ??
  2. libcom_err.so ??
  3. libidn.so??
將/usr/lib下三個(gè)ln重新link到/usr/lib64目錄下的實(shí)際的so文件就OK,原因不明。

案例3: (基于案例I)我看yum默認(rèn)安裝的php都是以apache模塊方式安裝的,我能否也這樣做?
可以,apache的php模塊so文件是php源代碼包編譯出來(lái)的./configure加一個(gè)參數(shù):
--with-apxs2=/usr/sbin/apxs
這是什么? --with-apxs2所指向的 /usr/sbin/apxs是apache安裝的一個(gè)Perl腳本,它知道所有apache軟件的信息, 這樣編譯出來(lái)的apache的Php模塊文件(名字可能是libphp5.so)將被復(fù)制到合適的目錄,并且修改httpd.conf裝載該文件.

如果你的apache是源碼方式安裝的,那意味著apache軟件所有相關(guān)文件都在某個(gè)目錄下,如果/usr/apache,那么你也可以不用--with-apxs2而直接使用--with-apache=/usr/apache.

F.A.Q
Q1: make install出現(xiàn)警告
Warning: Cannot use a scalar value as an array in phar://install-pear-nozlib.phar/PEAR/ChannelFile.php on line 1400
不影響系統(tǒng)運(yùn)行。但是為什么呢?


Q2: 我的主機(jī)上有多個(gè)ini文件,怎樣知道那個(gè)php.ini才是我當(dāng)前有效的ini文件?
A: 運(yùn)行phpinfo()的php腳本,它會(huì)告訴你

Q3: 我想做一些php的設(shè)置,但是我不想改php.ini,怎么辦?
A: php做./configure時(shí),加參數(shù) --with-config-file-scan-dir=/etc/php.d ,那么安裝好的php運(yùn)行時(shí)會(huì)自動(dòng)檢查/etc/php.d/下所有.ini文件。你可以把你的配置信息寫(xiě)到這里。

Q4: 啟動(dòng)apachce出現(xiàn)錯(cuò)誤:libphp5.so: cannot restore segment prot after relock: Permission Denied
A: 臨時(shí)禁用SELinux.執(zhí)行命令setenforce 0. 永久生效可以執(zhí)行setup命令,更改防火墻設(shè)置。

Q5: 啟動(dòng)apache出現(xiàn)錯(cuò)誤:
Starting httpd: httpd: Syntax error on line 206 of /etc/httpd/conf/httpd.conf: Cannot load /usr/lib/httpd/modules/libphp5.so into server: /usr/lib/httpd/modules/libphp5.so: undefined symbol: sqlite3SrcListShiftJoinType

A: php做./configure是時(shí)使用參數(shù)--without-sqlite。當(dāng)然這是回避問(wèn)題,我還沒(méi)具體研究這個(gè)問(wèn)題的確切原因:)

Q5:按照你的./configure在32位機(jī)器上運(yùn)行好好的,到了64位機(jī)器就不工作了,提示mysql什么的找不到
A: ./configure增加參數(shù) -–libdir=/usr/lib64 –-with-libdir=lib64

下面是我在64bit主機(jī)上安裝php的配置參數(shù)
Shell代碼
  1. ./configure?--prefix=/usr/php?--with-apxs2=/usr/sbin/apxs?--with-config-file-path=/etc/?--with-config-file-scan-dir=/etc/php.d?--without-sqlite?--enable-mbstring?--with-curl?--with-gettext?--with-bz2?--with-mysql?-enable-shmop?--enable-calendar?--with-openssl?--with-pspell?--enable-ftp?--with-openssl?--with-zlib?--enable-exif?--with-gmp?--enable-sysvmsg?--enable-sockets?--enable-wddx?--with-xsl?--with-mcrypt?--with-mysqli?--with-mime_magic?--with-pdo-mysql?--libdir=/usr/lib64?--with-libdir=lib64?--with-gd?--with-jpeg-dir=/usr/lib64?--with-png-dir=/usr/lib64?--with-freetype-dir=/usr/lib64???


執(zhí)行./configure之前,如果php已經(jīng)make過(guò),最好make clean以保證configure指示的參數(shù)能夠正確被編譯.

總結(jié)

以上是生活随笔為你收集整理的PHP编译安装的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。