centos7.4下安裝配置PHP服務(源碼安裝)并配置nginx支持php

centos7.4下安裝配置PHP服務(源碼安裝)并配置nginx支持php

一、檢查php是否已經安裝,使用php -v,是否能夠看到版本號,或者使用rpm -qa | grep php查看是否安裝過。

# yum remove php* -y

二、依賴包安裝

Linux軟件編譯安裝都需要依賴兩個安裝包 gcc gcc-c++ make 可使用yum在線安裝

# yum -y install gcc gcc-c++? make????

準備php安裝前的前置軟件,用yum install xxxx即可安裝,當然不嫌麻煩也可以自己編譯安裝,這里就不詳細說了。

1)zlib以及zlib-devel? zlib提供數據壓縮的函數庫,也是nginx的前置軟件,由于zlib需要編譯php的zlib擴展,而編譯中會需要使用zlib.h這個頭文件,頭文件在zlib-devel中,因此也需要下載zlib-devel。

2)libxml2以及libxml-devel libxml2是一個c語言的xml程序庫,可以簡單的對xml進行各種操作,并且支持xpath查詢,以及部分支持xslt轉換等功能。

3)libxslt以及libxslt-devel 如果不安裝libxslt-devel會提示找不到xslt.config文件,xslt是轉換xml到其他格式的擴展。

4)openssl以及openssl-devel 安全套接字層密碼庫

5)jpeg IJG的jpeg庫,php的gd庫所需。

6)libpng 是c語言寫的比較底層的讀寫png文件的跨平臺的庫,可以幫助輕松的讀寫png文件的每一行像素,php的gd庫所需。

7)freetype以及freetype-devel

免費開源的且可移植的字體引擎,提供統一的接口訪問多種字體格式,這兩個都是gd庫的依賴軟件,所以如果沒有安裝,或者版本太低,在安裝php時設定的是安裝gd庫則會報錯,另外不安裝-devel也是會報錯的,因為編譯擴展的時候會缺少ft2build.h文件,報錯如下圖。

8)gd gd是php處理圖形的擴展庫

9)curl,由于我的yum里的版本太低了,所以直接自己編譯安裝的,安裝方式很簡單,也就是wget

curl下載地址后tar解壓,新建/usr/local/curl文件夾,然后進入curl解壓后的文件夾里配置./configure

--prefix=/usr/local/curl即可,最后make以及make install就安裝好了。

注意:xxx-devel是xxx軟件的開發包,包含頭文件以及靜態庫甚至源碼。

下面是部分依賴包源碼下載地址,這里圖省事,全都yum在線安裝

安裝yasm

下載地址:http://www.tortall.net/projects/yasm/releases/

http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz

# cd yasm-1.3.0

#./configure

#make&&make install

安裝libmcrypt

下載地址:https://sourceforge.net/projects/mcrypt/files/Libmcrypt/2.5.8/

https://sourceforge.net/projects/mcrypt/files/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz/download

# cd libmcrypt-2.5.8

#./configure

#make&&make install

安裝tiff

下載地址:http://download.osgeo.org/libtiff/tiff-4.0.9.tar.gz

#cd tiff-4.0.9

#./configure --prefix=/usr/local/tiff --enable-shared

# make

#make install

安裝libpng

下載地址:http://www.libpng.org/pub/png/libpng.html

https://nchc.dl.sourceforge.net/project/libpng/libpng16/1.6.35/libpng-1.6.35.tar.gz

#cd libpng-1.6.35

#./configure --prefix=/usr/local/libpng --enable-shared

#make&&make install

安裝freetype

下載地址:http://ring.u-toyama.ac.jp/archives/graphics/freetype/freetype2/

http://ring.u-toyama.ac.jp/archives/graphics/freetype/freetype2/freetype-2.7.1.tar.gz

#cd freetype-2.7.1

#./configure --prefix=/usr/local/freetype --enable-shared

#make&&make install

安裝jpeg

下載地址:http://www.ijg.org/files/

http://www.ijg.org/files/jpegsrc.v9a.tar.gz

#cd jpeg-9a

#./configure --prefix=/usr/local/jpeg --enable-shared

#make&&make install

安裝libgd

下載地址:https://github.com/libgd/libgd/releases

https://github-production-release-asset-2e65be.s3.amazonaws.com/29669711/cb5172f2-8d93-11e7-9615-92822f694ebf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20181003%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20181003T090125Z&X-Amz-Expires=300&X-Amz-Signature=0d2408ac593ecefea66b1ed8435a5cb05ec0743c2bd1369c0c3b88faf8e9fa2d&X-Amz-SignedHeaders=host&actor_id=0&response-content-disposition=attachment%3B%20filename%3Dlibgd-2.2.5.tar.gz&response-content-type=application%2Foctet-stream

#cd libgd-2.2.5

#./configure

--prefix=/usr/local/libgd --enable-shared --with-jpeg=/usr/local/jpeg

--with-png=/usr/local/libpng --with-freetype=/usr/local/freetype

--with-fontconfig=/usr/local/freetype --with-xpm=/usr/

--with-tiff=/usr/local/tiff --with-webp=/usr/local/libwebp/

#make&&make install

yum -y install wget vim pcre pcre-devel openssl openssl-devel libicu-devel gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel ncurses ncurses-devel curl curl-devel krb5-devel libidn libidn-devel openldap openldap-devel nss_ldap jemalloc-devel cmake boost-devel bison automake libevent libevent-devel gd gd-devel libtool* libmcrypt libmcrypt-devel mcrypt mhash libxslt libxslt-devel readline readline-devel gmp gmp-devel libcurl libcurl-devel openjpeg-devel

為了安全保險的給make出來,先更新依賴庫以防萬一:

yum -y install libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel? pcre-devel

# yum -y install php-mbstring (自行選擇安裝)?

三、下載PHP安裝包

首先打開php官網http://php.net/點擊導航欄的Downloads進入下載頁面:http://php.net/downloads.php,選擇合適的版本并選擇對應國家鏡像進行下載wgethttp://php.net/get/php-7.2.10.tar.gz/from/a/mirror,我下載的是php-7.2.10.tar.gz

tar -zxvf php-7.2.10.tar.gz

cd php-7.2.10

新建待會要安裝php的文件夾:mkdir /usr/local/php

創建用戶useradd -s /sbin/nologin php

編譯安裝,實際上這里的配置項比上述還多,可以使用 ./configure --help命令查看所有選項,以上這些選項在正常的php開發中完全夠用了,后期如果需要,可以選擇手動開啟相應的模塊

注意:編譯的配置項是根據前面源碼安裝的依賴包的安裝路徑配置的路徑,如果改為yum安裝的依賴包,則無須寫路徑

嫌麻煩的可以從這一步起參考PHP官方安裝說明:http://php.net/manual/zh/install.unix.nginx.php

編譯???./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mcrypt=/usr/include --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-gd --with-iconv --with-zlib --enable-xml --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --enable-mbregex --enable-fpm --enable-mbstring --enable-ftp --with-openssl --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --without-pear --with-gettext --enable-session --with-curl --with-jpeg-dir --with-freetype-dir --enable-opcache--enable-gd-native-ttf[php7.2版本無須此選項]

make-j2 && make install

四、配置PHP環境變量

在Linux

CentOS系統上 安裝完PHP和Nginx后,一般需要執行查看版本命令’php -v’和’nginx

-v’,確認是否安裝成功,如果在沒有添加到環境變量之前,執行“php

-v”命令查看當前php版本信息時,則會提示命令不存在的錯誤。不配置環境變量的前提下執行php命令需直接轉到php的安裝目錄bin下,執行’./php

-v’即可。

[root@Anwar01 bin]# ./php -v

PHP 7.2.10 (cli) (built: Sep 30 2018 17:18:20) ( NTS )

Copyright (c) 1997-2018 The PHP Group

Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

直接轉到到nginx的安裝目錄sbin下,執行’./nginx -v’即可

# cd /usr/local/nginx/sbin/

# ./nginx -v

[root@Anwar01 sbin]# ./nginx -v

nginx version: nginx/1.15.4

?1、在profile文件末尾添加環境變量路徑,即可對所有系統用戶生效

# vi /etc/profile

export PATH=$PATH:/usr/local/php/bin

執行命令source /etc/profile修改生效

通過echo $PATH命令查看是否添加成功?? ?

環境變量配置成功后,便可在任意目錄下執行php命令或者nginx命令了(注意下面的分號要在雙引號內部,否則會報錯)??? ?

?export PATH=$PATH:/usr/local/nginx/sbin

$ php -r “echo ‘hello’;”???? ? ?

五、它項配置,啟動配置

設置php.ini,使用: vim /usr/local/php/lib/php.ini

打開php配置文件找到cgi.fix_pathinfo配置項,這一項默認被注釋并且值為1,根據官方文檔的說明,這里為了當文件不存在時,阻止Nginx將請求發送到后端的PHP-FPM模塊,從而避免惡意腳本注入的攻擊,所以此項應該去掉注釋并設置為0

設置完畢保存并退出

另外注意一個地方就是php.ini配置文件的位置可以在編譯前配置參數中設置,編譯參數可以寫成:--with-config-file-path=/usr/local/php

這樣的話php就回去指定的目錄下讀取php.ini配置文件,如果不加這個參數默認位置就是php安裝目錄下的lib目錄,具體也可以在phpinfo()輸出界面查看,如果php.ini放到其他位置,php讀取不到,那么所有的配置修改后都是不生效的,這點要注意

配置php-fpm

cd /usr/local/src/php-7.2.10????

cp ./php.ini-production /usr/local/php/etc/php.ini//復制php配置文件到安裝目錄

rm -rf /etc/php.ini????????? //刪除系統自帶配置文件

ln -s? /usr/local/php/etc/php.ini /etc/php.ini???????? //添加軟鏈接到 /etc目錄

# ls -l? /etc/php.ini

lrwxrwxrwx. 1 root root 26 10月? 6 13:17 /etc/php.ini -> /usr/local/php/etc/php.ini

cd /usr/local/php/etc

cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf?????? //復制模板文件為php-fpm配置

cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf

ln -s /usr/local/php/etc/php-fpm.conf? /etc/php-fpm.conf?? //添加軟件鏈接到 /etc目錄

/usr/local/php/sbin/php-fpm? //啟動php-fpm

編輯php配置文件

# vim /usr/local/php/etc/php-fpm.conf

pid = run/php-fpm.pid ? ?? //如果這個選項在配置文件存在就取消掉注釋使用,如果不存在可以忽略,請勿手動添加,否則PHP啟動會報錯。

user = www

group = www

:wq!? #保存并退出

cp etc/php-fpm.d/www.conf.defaultetc/php-fpm.d/www.conf

?# cp /usr/local/src/php-7.2.10/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm//添加php-fpm腳本到啟動項

# ls -l /etc/init.d/php-fpm????

# chmod 755 /etc/init.d/php-fpmchmod +x /etc/init.d/php-fpm? //賦予php-fpm執行權限

# ls -l /etc/init.d/php-fpm

? -rwxr-xr-x. 1 root root 2405 10月? 6 13:21 /etc/init.d/php-fpm

設置php-fpm開機啟動

# chkconfig php-fpm on

# chkconfig --list php-fpm

php-fpm 0:off 1:off 2:on 3:on 4:on 5:on 6:off

/etc/init.d/php-fpm start

service php-fpm start

六、配置nginx支持php

LNMP環境中的nginx是不支持php的,需要通過fastcgi插件來處理有關php的請求。而php需要php-fpm這個組件提供該功能。在php5.3.3以前的版本php-fpm是以一個補丁包的形式存在的,而php5.3.3以后只需在編譯安裝時使用–enable-fpm加載該模塊即可,無需另行安裝。

檢查www用戶和www用戶組是否存在,不存在請手動創建

# cat /etc/passwd | grep www

# cat /etc/group | grep www

# vim /usr/local/nginx/conf/nginx.conf

user www www;

#首行user去掉注釋,修改Nginx運行組為www www;必須與/usr/local/php/etc/php-fpm.d/www.conf中的user,group配置相同,否則php運行出錯

location / {

root html;

index index.html index.htm index.php;? //添加index.php

}

location ~ \.php$ {

root html;

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

include fastcgi_params;

}

#取消FastCGI server部分location的注釋,注意fastcgi_param行的參數,改為$document_root$fastcgi_script_name,或者使用絕對路徑

:wq! #保存并退出

啟動nginx服務

# /etc/init.d/nginx restart

#啟動php服務

# /etc/init.d/php-fpm start

測試php配置

進入nginx默認網站根目錄

# cd /usr/local/nginx/html/

# ls

50x.html index.html

刪除默認測試頁

# rm -rf /usr/local/nginx/html/*

# pwd

/usr/local/nginx/html

新建index.php文件進行測試

# vim index.php

<?php

phpinfo();

?>

:wq! #保存并退出

設置目錄所有者為 www

# chown www.www /usr/local/nginx/html/ -R

設置目錄權限

# chmod 755 /usr/local/nginx/html/ -R

打開瀏覽器輸入服務器IP地址,會看到下面的界面就是php安裝成功

PHP Version 7.2.10

SystemLinux Anwar02 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64

Build DateOct 8 2018 16:46:22

Configure Command'./configure' '--prefix=/usr/local/php'

'--with-config-file-path=/usr/local/php/etc'

'--with-mcrypt=/usr/include' '--with-mysql=mysqlnd'

'--with-mysqli=mysqlnd' '--with-pdo-mysql=mysqlnd' '--with-gd'

'--with-iconv' '--with-zlib' '--enable-xml' '--enable-bcmath'

'--enable-shmop' '--enable-sysvsem' '--enable-inline-optimization'

'--enable-mbregex' '--enable-fpm' '--enable-mbstring' '--enable-ftp'

'--enable-gd-native-ttf' '--with-openssl' '--enable-pcntl'

'--enable-sockets' '--with-xmlrpc' '--enable-zip' '--enable-soap'

'--without-pear' '--with-gettext' '--enable-session' '--with-curl'

'--with-jpeg-dir' '--with-freetype-dir' '--enable-opcache'

Server APIFPM/FastCGI

Virtual Directory Supportdisabled

Configuration File (php.ini) Path/usr/local/php/etc

Loaded Configuration File/usr/local/php/etc/php.ini

可能有的錯誤的原因是沒有創建www這個用戶,應該在服務器系統中添加www用戶組和用戶www,如下命令:

#/usr/sbin/groupadd -f www

#/usr/sbin/useradd -g www www


七、優化配置

編輯php配置文件php.ini

# vim /usr/local/php/etc/php.ini

找到:disable_functions =?????? 修改成disable_functions=passthru, exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status, ini_alter,ini_alter,ini_restore,dl,openlog,syslog,readlink, symlink,popepassthru,stream_socket_server, escapeshellcmd, dll, popen,disk_free_space,checkdnsrr,checkdnsrr,getservbyname, getservbyport,disk_total_space,posix_ctermid,posix_get_last_error,posix_getcwd,posix_getegid, posix_geteuid,posix_getgid,posix_getgrgid,posix_getgrnam, posix_getgroups, posix_getlogin, posix_getpgid,posix_getpgrp,posix_getpid,posix_getppid,posix_getpwnam,posix_getpwuid, posix_getrlimit,posix_getsid,posix_getuid,posix_isatty, posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid, posix_setpgid,posix_setsid, posix_setuid,? posix_strerror,posix_times,posix_ttyname,posix_uname//一些需要禁用的PHP危險函數,提高PHP主機安全性(disable_functions)

找到:date.timezone =?? 修改為:date.timezone = PRC?? ? ? ? ? ?? //設置時區

找到:expose_php = On???? 修改為:expose_php = Off???????????? //禁止顯示php版本的信息

找到:short_open_tag = Off??? 修改為:short_open_tag = On ? ? ? ? ? ? ? ? ? //支持php短標簽

找到opcache.enable=0?? 修改為opcache.enable=1????????????????????????? //php支持opcode緩存

找到:opcache.enable_cli=1??? 修改為:opcache.enable_cli=0???????????????????????? //php支持opcode緩存

在最后一行添加:zend_extension=opcache.so????????????????????????? //開啟opcode緩存功能 (在文本按Shift+G就能跳到最后一行)

:wq! #保存并退出

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,345評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,494評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,283評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,953評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,714評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,186評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,410評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,940評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,776評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,976評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,210評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,642評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,878評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,654評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,958評論 2 373

推薦閱讀更多精彩內容