安裝PHP5和PHP7(資源)

PHP總共有三個模塊:內核、Zend引擎、以及擴展層;
PHP內核用來處理請求、文件流、錯誤處理等相關操做;
Zend引擎(ZE)用以將源文件轉換成機器語言,而後在虛擬機上運行它;
擴展層是一組函數、類庫和流,PHP使用它們來執行一些特定的操做。好比,咱們須要mysql擴展來鏈接MySQL數據庫;php

php-fpm是一個徹底獨立的程序,不依賴php-cgi,也不依賴php.由於php-fpm是一個內置了php解釋器的FastCGI服務,啓動時可以自行讀取php.ini配置和php-fpm.conf配置.
附:PHP FastCGI進程管理器PHP-FPM的架構
一個master進程,支持多個pool,每一個pool由master進程監聽不一樣的端口,pool中有多個worker進程.
每一個worker進程都內置PHP解釋器,而且進程常駐後臺,支持prefork動態增長.
每一個worker進程支持在運行時編譯腳本並在內存中緩存生成的opcode來提高性能.
每一個worker進程支持配置響應指定請求數後自動重啓,master進程會重啓掛掉的worker進程.
每一個worker進程能保持一個到MySQL/Memcached/Redis的持久鏈接,實現"鏈接池",避免重複創建鏈接,對程序透明.
master進程並不接收和分發請求,而是worker進程直接accpet請求後poll處理.
master進程不斷調用epoll_wait和getsockopt是用來異步處理信號事件和定時器事件.
這裏提一下,Nginx也相似,master進程並不處理請求,而是worker進程直接處理,
不過區別在於Nginx的worker進程是epoll異步處理請求,而PHP-FPM仍然是poll.
若是worker進程不夠用,master進程會prefork更多進程,
若是prefork達到了pm.max_children上限,worker進程又全都繁忙,
這時master進程會把請求掛起到鏈接隊列backlog裏(默認值是511).
Nginx跟PHP-FPM分開,實際上是很好的解耦,PHP-FPM專門負責處理PHP請求,一個頁面對應一個PHP請求,
頁面中全部靜態資源的請求都由Nginx來處理,這樣就實現了動靜分離,而Nginx最擅長的就是處理高併發.
PHP-FPM是一個多進程的FastCGI服務,相似Apache的prefork的進程模型,
對於只處理PHP請求來講,這種模型是很高效很穩定的.html

 

一、 安裝PHP5

安裝PHP5與PHP7參考連接:https://my.oschina.net/u/3707523/blog/1593424mysql

• PHP官網www.php.netlinux

• 當前主流版本爲5.6/7.1nginx

• cd /usr/local/src/                      # 安裝軟件存放的目錄算法

 

• 安裝插件預防安裝過程碰見問題sql

• yum install openssl openssl-devel bzip2-devel libjpeg-devel libpng-devel libmcrypt-devel fretype freetype-devel epel-release libmcrypt-devel expat-devel                                                             #安裝插件數據庫

•wget http://cn2.php.net/distributions/php-5.6.30.tar.gzapache

• tar -zvxf php-5.6.30.tar.gzvim

• cd php-5.6.30

• ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2.4/bin/apxs --with-config-file-path=/usr/local/php/etc  --with-mysql=/usr/local/mysql --with-pdo-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-bz2 --with-openssl --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-mbstring --enable-sockets --enable-exif

在解壓的目錄執行如下代碼,配置編譯參數:

  1. ./configure   
  2.   
  3. --prefix=/usr/local/php    #PHP安裝目錄  
  4.   
  5. --with-apxs2=/usr/local/apache2/bin/apxs    #表示使用Apache2.0以上版本  
  6.   
  7. --with-config-file-path=/usr/local/php/etc   #指定php.ini位置  
  8.   
  9. --with-mysql=/usr/local/mysql   #mysql安裝目錄,對mysql的支持   
  10.   
  11. --with-pdo-mysql=/usr/local/mysql      
  12. --with-mysqli=/usr/local/mysql/bin/mysql_config   #mysqli安裝目錄,優化支持  
  13. --with-libxml-dir   #打開libxml2庫的支持   
  14.   
  15. --with-gd   #打開gd庫的支持   
  16.   
  17. --with-jpeg-dir   #打開對jpeg圖片的支持   
  18.   
  19. --with-png-dir   #打開對png圖片的支持    
  20.   
  21. --with-freetype-dir   #打開對freetype字體庫的支持   
  22.   
  23. --with-iconv-dir   #關閉iconv函數,種字符集之間的轉換   
  24.   
  25. --with-zlib-dir    #打開zlib庫的支持  
  26.   
  27. --with-bz2   #打開對bz2文件的支持   
  28.   
  29. --with-openssl   #openssl支持,加密傳輸時用到   
  30.   
  31. --with-mcrypt   #算法   
  32.   
  33. --enable-soap   
  34.   
  35. --enable-gd-native-ttf   #支持TrueType 字符串函數庫  
  36.   
  37. --enable-mbstring   #多字節,字符串的支持   
  38.   
  39. --enable-sockets   #打開sockets支持   
  40.   
  41. --enable-exif   #圖片的元數據支持  

• make && make install

• cp php.ini-production  /usr/local/php/etc/php.ini

實例:

編譯安裝php5,        cd /usr/local/src/切換到軟件安裝目錄

查看安裝包的大小。

而後解壓縮包。tar -zvxf php-5.6.30.tar.gz,切換目錄cd php-5.6.30

到這一步就回車。

使用echo $?查看上一個命令是否正確。

安裝須要的包

安裝好,須要的包,以後再編譯一次。

安裝openssl-devel

按照上面的指示,安裝bzip軟件包。

再編譯安裝一次。  

繼續編譯。(當編譯過程出現問題時,就安裝須要的包,而後再編譯,看看是否還有錯誤。)

先安裝擴展源。命令:yun install -y epel-release。由於這個包在擴展源裏裏面。

繼續編譯。

編譯完成圖。

./configure 安裝完成了,編譯好後,下一步。

 

 


二、 安裝PHP7

• cd /usr/local/src/

• wget http://cn2.php.net/distributions/php-7.1.6.tar.bz2

• tar jxf php-7.1.6.tar.bz2

• cd php-7.1.6

• ./configure --prefix=/usr/local/php7 --with-apxs2=/usr/local/apache2.4/bin/apxs --with-config-file-path=/usr/local/php7/etc  --with-pdo-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-bz2 --with-openssl --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-mbstring --enable-sockets --enable-exif

• make && make install

• ls /usr/local/apache2.4/modules/libphp7.so

• cp php.ini-production  /usr/local/php7/etc/php.ini

實例:

安裝PHP7

[root@ocalhost ~]# cd /usr/local/src/
[root@localhost ~] # wget http://cn2.php.net/distributions/php-7.1.6.tar.bz2
[root@localhosts ~]# tar -jvf nginx-1.10.2.tar.gz
[root@localhost ~]# cd php-7.1.6
[root@localhost /php-7.1.] # ./configure --prefix=/usr/local/php7 --with-apxs2=/usr/local/apache2.4/bin/apxs --with-config-file-path=/usr/local/php7/etc  --with-pdo-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-bz2 --with-openssl --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-mbstring --enable-sockets --enable-exif
[root@localhosts php-7.1.6]# make
[root@ocalhost php-7.1.6] # make install
[root@localhost php-7.1.6] # ls /usr/local/apache2.4/modules/libphp
libphp5.so   libphp7.so
[root@localhosts php-7.1.6]# ls /usr/local/apache2.4/modules/libphp7.so
/usr/local/apache2.4/modules/libphp7.so
[root@localhosts php-7.1.6]# du -sh !$
37M     /usr/local/apache2.4/modules/libphp7.so
[root@localhosts php-7.1.6]# /usr/local/php7/bin/php -m                  #查看php7加載的模塊
[root@localhosts php-7.1.6]# /usr/local/apache2.4/bin/apachectl -M        #查看apache加載的php 
[root@ocalhost php-7.1.6]# !vim
vim /etc/init.d/mariadb
[root@localhosts php-7.1.6]# vim /usr/local/apache2.4/conf/httpd.conf
/php5.so                                                                    #搜索的內容
# LoadModule php5_module                  modules/libphp5.so              #註釋掉php5
LoadModule php_module                    modules/libphp7.so              #這兩個模塊要註釋掉其中一個

 

 

常見問題:

一、問題:須要安裝的包名,不對。

 

二、使用yum install httpd就能夠安裝httpd,爲何還要這樣使用源碼包安裝呢?是由於有功能的差別嗎?

答:主要目的是要學習編譯安裝這個技能。 多數企業也是習慣使用編譯安裝的。

 

三、./configure是否是就是在編譯?

make就是編譯後的安裝?

make和make && make install有什麼區別?

生成makefile的做用是什麼?

答:

./config 預編譯,檢查系統是否可以知足軟件包編譯環境,系統是否存在GCC編譯器+依賴的軟件庫,生成Makefile文件。

make 是編譯,基於第一步生產的makefile文件用於指定編譯的步驟和順序,包括編譯時依賴的軟件包記錄,make生成二進制文件。

make install是安裝,將二進制文件cp或安裝到linux系統目錄中,供用戶或者程序去使用;

沒有Makefile 就沒辦法make

 

四、配置安裝的時候,提示: configure: WARNING: unrecognized options: --enable-gd-native-tty。 是說明 --enable-gd-native-tty 這個參數廢棄了嗎? 仍是有其餘的問題?

答:廢棄啦。 去掉它吧。

 

五、編譯不成功

]W8`{XGJ6DN}TR{{$3R$M{Q.png

答:apr以及apr-util都須要編譯安裝。

六、當/usr/local/apache2.4/conf/httpd.conf中,php5和php7模塊都沒註釋掉,會默認使用哪一個呢?

答:會衝突,要注視掉一個。

 

七、make編譯不了

答:缺xml解析依賴,安裝expat-devel,命令:yum install -y expat-devel,

安了expat要從新編譯apr-util

八、: configure: error: mcrypt.h not found. Please reinstall libmcrypt.
解決方案:
yum -y install epel-release
yum -y install php-mcrypt
yum -y install libmcrypt-devel

九、安裝mysql  再弄MariaDB的時候  容易衝突(緣由端口同樣 都是21端口)

答: 你把/data/mysql 整個目錄幹掉。就不會衝突了.

10.

 

答:

./configure是源代碼安裝的第一步,主要的做用是對即將安裝的軟件進行配置,檢查當前的環境是否知足要安裝軟件的依賴關係,但並非全部的tar包都是源代碼的包,樓主能夠ls看看有沒有configure這個文件,也許你下的是二進制的包,若是是二進制的包,解壓後直接就能使用。
二進制的mysql包,能夠放到任意位置,全部的命令都是解壓後目錄的bin目錄下,你要想在任意目錄都能使用mysql的命令,須要把bin目錄加到PATH環境變量中,好比你的mysql目錄是/usr/local/mysql,你能夠這樣添加環境變量,vi ~/.bash_profile在文件的最後面添加
PATH=$PATH:/usr/local/mysql/bin
export PATH
而後執行source ~/.bash_profile
這樣就能夠在任意目錄執行mysql的全部命令了

 

11.缺乏依賴的包

答案:安裝yum install -y 


php中mysql,mysqli,mysqlnd,pdo究竟是什麼   http://blog.csdn.net/u013785951/article/details/60876816
查看編譯參數  http://ask.apelearn.com/question/1295 

安裝參考連接:https://www.cnblogs.com/nfyx/p/9086038.html

 

連接 :

修改Apache配置指定php配置文件php.ini的位置方法 :https://www.jb51.net/article/106111.htm 

https://www.jb51.net/article/58872.htm

 

PHP 性能分析第一篇: Intro to Xhprof & Xhgui : https://www.cnblogs.com/thrillerz/p/5072407.html 

PHP 性能分析第二篇: Xhgui In-Depth  : https://www.cnblogs.com/thrillerz/p/5072407.html 

PHP 性能分析第三篇: 性能調優實戰  :https://www.cnblogs.com/thrillerz/p/5085307.html

PHP  : https://www.cnblogs.com/thrillerz/category/601879.html

相關文章
相關標籤/搜索