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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

PHP安装指南

發布時間:2024/9/3 php 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PHP安装指南 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、PHP介紹

PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本預處理器”)是一種通用開源腳本語言。語法吸收了C語言、Java和Perl的特點,利于學習,使用廣泛,主要適用于Web開發領域。PHP 獨特的語法混合了C、Java、Perl以及PHP自創的語法。它可以比CGI或者Perl更快速地執行動態網頁。用PHP做出的動態頁面與其他的編程語言相比,PHP是將程序嵌入到HTML(標準通用標記語言下的一個應用)文檔中去執行,執行效率比完全生成HTML標記的CGI要高許多;PHP還可以執行編譯后代碼,編譯可以達到加密和優化代碼運行,使代碼運行更快。

優點:靈活,上手快,易修改,發布快捷,環境好部署

PHP主要用在服務器端上用于Web開發,約占網站總數的80%。 Facebook最初使用的就是PHP,PHP在WordPress內容管理系統中扮演的角色讓它很受歡迎。

官網

https://www.php.net

#軟件包獲取

https://www.php.net/distributions/php-7.3.4.tar.bz2

二、PHP安裝

1)依賴包安裝

yum install gcc-c++ libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel gmp gmp-devel libmcrypt libmcrypt-devel readline readline-devel libxslt libxslt-devel gd net-snmp-*

libzip版本低問題處理

libzip要求1.1及以上,系統提供1.0需要升級

官方網站:?https://libzip.org/

[root@apache_251 ~]# wget?https://libzip.org/download/libzip-1.5.2.tar.gz

[root@apache_251 ~]# tar xf?libzip-1.5.2.tar.gz

[root@apache_251 ~]# cd?libzip-1.5.2

[root@apache_251 libzip-1.5.2]# mkdir build

[root@apache_251 build]# cd build

[root@apache_251 build]#cmake ..

[root@apache_251 build]#make

[root@apache_251 build]#make install

2)配置

[root@apache_251 ~]# tar xf php-7.3.4.tar.bz2

[root@apache_251 php-7.3.4]# ./configure —prefix=/usr/local/php —with-config-file-path=/usr/local/php/etc —with-mysqli=mysqlnd —enable-pdo —with-pdo-mysql=mysqlnd —with-iconv-dir=/usr/local/ —enable-fpm —with-fpm-user=www —with-fpm-group=www —with-pcre-regex —with-zlib —with-bz2 —enable-calendar —disable-phar —with-curl —enable-dba —with-libxml-dir —enable-ftp —with-gd —with-jpeg-dir —with-png-dir —with-zlib-dir —with-freetype-dir —enable-gd-jis-conv —with-mhash —enable-mbstring —enable-opcache=yes —enable-pcntl —enable-xml —disable-rpath —enable-shmop —enable-sockets —enable-zip —enable-bcmath —with-snmp —disable-ipv6 —with-gettext —disable-rpath —disable-debug —enable-embedded-mysqli —with-mysql-sock=/usr/local/mysql/

配置參數說明 ---prefix=/usr/local/php 安裝路徑 --with-config-file-path=/usr/local/php/etc 配置文件路徑 --with-mysqli=mysqlnd --enable-embedded-mysqli --with-mysql-sock=/usr/local/mysql/ mysql支持及客戶端設置 --enable-pdo --with-pdo-mysql=mysqlnd 開啟php pdo,PDO一是PHP數據對象(PHP Data Object)的縮寫 --with-iconv-dir=/usr/local/ 指定轉碼工具,各種字符集間的轉換 --enable-fpm --with-fpm-user=www --with-fpm-group=www 支持php-fpm,允許以服務的方式啟動PHP --with-pcre-regex 支持pcre正則表達式 --with-zlib --with-bz2 --with-zlib-dir --enable-zip 支持壓縮 --enable-calendar 支持日歷 --disable-phar PHAR (“Php ARchive”) 是PHP里類似于JAR的一種打包文件。如果你使用的是 PHP 5.3 或更高版本,那么Phar后綴文件是默認開啟支持的. --with-curl 支持curl --enable-dba 開啟dba函數支持 --with-libxml-dir 支持xml文件庫 對xml讀取和查詢 --enable-ftp 支持ftp --with-gd --with-jpeg-dir --with-png-dir 支持圖片 --with-freetype-dir 支持字庫 --enable-gd-jis-conv 支持gd庫 --with-mhash --enable-mbstring 支持加密 --enable-opcache=yes 開啟opcache --enable-pcntl 開啟PHP進程控制支持 默認是關閉的 --enable-xml 允許xml文件 --disable-rpath 關閉額外的運行庫文件 --enable-shmop 開啟Shmop 是一個易用的允許PHP讀取、寫入、創建和刪除Unix共享內存段的函數集 --enable-sockets 打開 sockets 支持 --enable-bcmath 增加bcmath擴展的支持,這是一個支持大整數計算的擴展。 --with-snmp 支持snmp --disable-ipv6 關閉IPV6支持 --with-gettext 打開gnu 的gettext 支持,編碼庫用到 --disable-debug 關閉調試模式

3)編譯

[root@apache_251 php-7.3.4]# make

4)安裝

[root@apache_251 php-7.3.4]# make install

5)拷貝一個配置文件

[root@apache_251 php-7.3.4]# cp /usr/src/php-7.3.4/php.ini-production /usr/local/php/etc/php.ini

三、PHP配置

關于PHP工作方式

  • 作為模塊運行
  • 獨立服務運行
  • 1)作為apache模塊運行

    #if bind to apache —with-apxs2=/usr/local/apache2/bin/apxs AddType application/x-httpd-php .php#if no mysql ./configure —with-mysql=mysqlnd —with-mysqli=mysqlnd —with-pdo-mysql=mysqlnd

    2)作為服務運行

    思考問題 apache如何將PHP請求交給PHP呢 PHP是一門語言

  • 思路 CGI fastcgi
  • CGI 公共網關接口 (COMMON GATEWAY INTERFACE),是一個協議

  • 它的作用就是幫助服務器與語言通信. 就是apachephp進行通信,因為apachephp的語言不通,因此需要一個溝通轉換的過程,而CGI就是這個
  • 溝通的協議。
  • FastCGI 快速通用網關接口(FastCommonGatewayInterface),是CGI的升級版,一種語言無關的協議,FastCGI是用來提高CGI程序性能的

    缺點:傳統的cgi協議在每次連接請求時,會開啟一個進程進行處理,處理完畢會關閉該進程,因此下次連接,又要再次開啟一個進程進行處理,因此有多少個連接就有多少個cgi進程,這也就是為什么傳統的cgi會顯得緩慢的原因,因此過多的進程會消耗資源和內存。而fast-cgi則是一個進程可以處理多個請求,和上面的cgi協議完全不一樣,cgi是一個進程只能處理一個請求,這樣就會導致大量的cgi程序,因此會給服務器帶來負擔。

    php-fpm:是一個實現了FastCGI(協議)的程序

    是php提供給http前端服務器(web serve)的fastcgi協議接口程序,允許一個進程對多個連接進行處理,而不會立即關閉這個進程,而是會接著處理下一個連接。

    PHP-CGI:PHP-CGI是php自帶的Fast-CGI管理器。

    PHP-CGI的不足:

    php-cgi變更php.ini配置后需重啟php-cgi才能讓新的php-ini生效,不可以平滑重啟。

    直接殺死php-cgi進程,php就不能運行了。(PHP-FPM和Spawn-FCGI就沒有這個問題,守護進程會平滑從新生成新的子進程。)

    PHP-FPM(FastCGI Process Manager:FastCGI進程管理器)是一個PHPFastCGI管理器,對于PHP 5.3.3之前的php來說,是一個補丁包 ,旨在將FastCGI進程管理整合進PHP包中。如果你使用的是PHP5.3.3之前的PHP的話,就必須將它patch到你的PHP源代碼中,在編譯安裝PHP后才可以使用。從PHP 5.4 RC2開始,php-fpm已經轉正了

    PHP-FPM特點

    listen:The address on which to accept FastCGI requests.它支持TCP Socket和unix socket兩種通訊協議。可設置listen = [::]:9000。listen.allowed_clients:List of addresses (IPv4/IPv6) of FastCGI clients which are allowed to connect. 該配置項為逗號分隔的列表,如listen.allowed_clients = 127.0.0.1,172.17.0.5。pm:Choose how the process manager will control the number of child processes. 該配置項設置FPM管理進程池的方式,包括static、dynamic、ondemand三種。pm.max_requests:The number of requests each child process should execute before respawning. This can be useful to work around memory leaks in 3rd party libraries.設置每個子進程處理請求數的上限,對于處理第三方庫中的內存泄漏很有用。pm.status_path:The URI to view the FPM status page. 支持狀態頁面監控php-fpm

    PHP-FPM工作原理

    1、Web Server啟動時載入FastCGI進程管理器(IIS ISAPI或Apache Module)

    2、FastCGI進程管理器自身初始化,啟動多個CGI解釋器進程(可見多個php-cgi)并等待來自Web Server的連接。

    3、當客戶端請求到達Web Server時,FastCGI進程管理器選擇并連接到一個CGI解釋器。Web server將CGI環境變量和標準輸入發送到FastCGI子進程php-cgi。

    4、FastCGI子進程完成處理后將標準輸出和錯誤信息從同一連接返回Web Server。當FastCGI子進程關閉連接時,請求便告處理完成。FastCGI子進程接著等待并處理來自FastCGI進程管理器(運行在Web Server中)的下一個連接。 在CGI模式中,php-cgi在此便退出了。

    在上述情況中,你可以想象CGI通常有多慢。每一個Web請求PHP都必須重新解析php.ini、重新載入全部擴展并重初始化全部數據結構。使用FastCGI,所有這些都只在進程啟動時發生一次。一個額外的好處是,持續數據庫連接(Persistent database connection)可以工作。

    #php-fpm服務設置 pool

    每個pool可以監聽不同的sock、tcp/ip,pool池是支持定義多個pool的。所有的網站使用同一個池,那其中一個網站發生一些故障,比如程序員寫的一些程序有問題,就會把php資源耗盡,這樣的結果就是其他站點的php也會502。所以有必要把每一個站點隔離開。每個pool的名字要唯一。

    PHP服務配置

    #主配置文件

    [root@apache_251 var]# egrep -v “^;|^$” /usr/local/php/etc/php-fpm.conf[global] pid = run/php-fpm.pid error_log = log/php-fpm.log daemonize = yes include = /usr/local/php/etc/php-fpm.d/*.conf

    #子配置文件

    [root@apache_251 var]# cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf [root@apache_251 var]# egrep -v “^;|^$” /usr/local/php/etc/php-fpm.d/www.conf [www] user = www group = www listen = 127.0.0.1:9000 listen.owner = www listen.group = www listen.mode = 0660 pm = dynamic pm.max_children = 5 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3 注釋
    # 全局配置 [global] # PID、可以不填 pid = /usr/local/php/var/run/php-fpm.pid # 錯誤日志路徑、可以不填 error_log = /usr/local/php/var/log/php-fpm.log # www虛擬主機配置、可寫多個 # pool命名:www [www] # 監聽socket方式 # 可以寫成listen = 127.0.0.1:9000 listen = /tmp/php-fcgi.sock # 開啟php-fpm的執行用戶 user = www # 開啟php-fpm的所屬組 group = www # 監聽socket listen的用戶,和web服務器軟件的一致 listen.owner = nobody # 監聽socket listen的組,和web服務器軟件的一致 listen.group = nobody # 怎樣的形式啟用進程 pm = dynamic # 最大開啟子進程數 pm.max_children = 50 # 一開始啟動多少子進程 pm.start_servers = 20 # 空閑時保留多少個子進程 pm.min_spare_servers = 5 # 最多空閑子進程 pm.max_spare_servers = 35 # 進程處理多少個請求之后銷毀重建 pm.max_requests = 500 # 限定打開最大的文件數 rlimit_files = 1024

    四、PHP啟動

    [root@apache_251 ~]# cp /usr/src/php-7.3.4/sapi/fpm/php-fpm.service /etc/systemd/system/

    [root@apache_251 ~]# systemctl daemon-reload

    [root@apache_251 ~]# systemctl enable php-fpm

    [root@apache_251 ~]# systemctl start php-fpm

    五、相關知識補充

    #mysqli 說明

    MYSQL 也叫 Original MySQL,PHP4版本的MYSQL擴展,從PHP5起已經被廢棄,并別從PHP7開始已經被移除。

    MYSQLI 叫做 “MySQL增強擴展”。

    MYSQLND MYSQL NATIVE DIRVER 叫做MYSQL “官方驅動”或者更加直接點的叫做“原生驅動”

    PDO PHP Data Objects PHP數據對象,是PHP應用中的一個數據庫抽象層規范。

    #opcache

    原理:

    其實非常簡單,opcache只是把把PHP執行后的數據(opcode)緩存到內存中從而避免重復的編譯過程,能夠直接使用緩沖區已編譯的opcode代碼從而提高速度,降低服務器負載

    效果:?在實際應用當中能使QPS數大致增加3倍以上

    注意:

    啟用opcache后,典型的問題就是由于opcache的緩存加速機制導致的代碼變更后無法立即看到效果。php代碼被轉換成可立即執行的“機器碼”后會有一定的緩存時間后才會去檢查原始的PHP文件是否變動過,具體視配置項opcache.revalidate_freq設置的秒數情況而定;這樣就會導致某些情況下明明更新了PHP文件中的代碼,但執行后卻看不到改變后的效果,這就是因為opcache檢查php文件變動的間隔時間尚未結束所導致。 這個問題并不是bug,而要視具體生產環境來設定opcache.revalidate_freq值,倘若php代碼很少變動,建議該值設置的大一些,可減少opcahce由于檢查php文件變動而帶來的額外開銷,比如7200 那么在變動php文件后如何才能快速降低opcache緩存帶來的這種問題呢?最簡單的方法就是更新代碼后重啟下php-fpm(nginx fast-cgi模式)或apache(apache-handler模式)。當然還可以自己書寫一個php腳本,調用opcache_reset()函數重置所有opcache緩存字節碼,或者使用opcache_invalidate(PHPfileDir,true)重置指定php文件的緩存字節碼。

    opcache配置指令詳解

    [Zend Opcache] zend_extension = /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/opcache.so opcache.enable=1 ;啟用操作碼緩存 opcache.enable_cli=1 ;僅針對CLI環境啟用操作碼緩存 opcache.memory_consumption=128 ;共享內存大小,單位MB opcache.interned_strings_buffer=8 ;存儲臨時字符串的內存大小,單位MB opcache.max_accelerated_files=4000 ;哈希表中可存儲的腳本文件數量上限 ;opcache.max_wasted_percentage=5 ;浪費內存的上限,以百分比計 ;opcache.use_cwd=1;附加改腳本的工作目錄,避免同名腳本沖突 opcache.validate_timestamps=1 ;每隔revalidate_freq 設定的秒數 檢查腳本是否更新 opcache.revalidate_freq=60 ; ;opcache.revalidate_path=0 ;如果禁用此選項,在同一個 include_path 已存在的緩存文件會被重用 ;opcache.save_comments=1 ;禁用后將也不會加載注釋內容 opcache.fast_shutdown=1 ;一次釋放全部請求變量的內存 opcache.enable_file_override=0 ; 如果啟用,則在調用函數file_exists(), is_file() 以及 is_readable() 的時候, 都會檢查操作碼緩存 ;opcache.optimization_level=0xffffffff ;控制優化級別的二進制位掩碼。 ;opcache.inherited_hack=1 ;PHP 5.3之前做的優化 ;opcache.dups_fix=0 ;僅作為針對 “不可重定義類”錯誤的一種解決方案。 ;opcache.blacklist_filename=”” ;黑名單文件為文本文件,包含了不進行預編譯優化的文件名 ;opcache.max_file_size=0 ;以字節為單位的緩存的文件大小上限 ;opcache.consistency_checks=0 ;如果是非 0 值,OPcache 將會每隔 N 次請求檢查緩存校驗和 opcache.force_restart_timeout=180 ; 如果緩存處于非激活狀態,等待多少秒之后計劃重啟。 ;opcache.error_log=”” ;OPcache模塊的錯誤日志文件 ;opcache.log_verbosity_level=1 ;OPcache模塊的日志級別。致命(0)錯誤(1) 警告(2)信息(3)調試(4) ;opcache.preferred_memory_model=”” ;OPcache 首選的內存模塊。可選值包括: mmap,shm, posix 以及 win32。 ;opcache.protect_memory=0 ;保護共享內存,以避免執行腳本時發生非預期的寫入。 僅用于內部調試。 ;opcache.mmap_base=null ;在Windows 平臺上共享內存段的基地址

    六、FAQ

    問題一 可能遇到的問題 centos7 編譯libiconv ./stdio.h:1010:1: 錯誤: ‘gets’未聲明(不在函數內) make報錯: ./stdio.h:1010:1: 錯誤: ‘gets’未聲明(不在函數內) make[2]: *** [progname.o] 錯誤 1 make[2]:正在離開目錄 `/home/lmos/libiconv-1.14/srclib' make[1]: *** [all] 錯誤 2make[1]:正在離開目錄 `/home/lmos/libiconv-1.14/srclib' make: *** [all] 錯誤 2 cd srclib 目錄 sed -i -e '/gets is a security/d' ./stdio.in.h

    問題二 checking size of off_t... 0 configure: error: off_t undefined; check your library configuration # 添加搜索路徑到配置文件 echo '/usr/local/lib64 /usr/local/lib /usr/lib /usr/lib64'>>/etc/ld.so.conf # 更新配置 ldconfig -v

    總結

    以上是生活随笔為你收集整理的PHP安装指南的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。