站長資訊網
        最全最豐富的資訊網站

        PHP基礎及安裝過程

        PHP:Hypertext Preprocessor超文本預處理器的縮寫,是一種被廣泛應用的開發源代碼的多用途腳本語言,它可以嵌套在HTML中,尤其是web開發。

        PHP代碼塊被包含在特殊的起始符和結束符中的。

        PHP功能:

        1.服務端腳本是其主要領域,具有這項工作需要PHP解析器(CGI或服務器模塊)、web服務器、web瀏覽器支持。
        2.命令行腳本,編寫一段php腳本,不需要任何服務器和瀏覽器來運行它,僅僅需要php解析器來執行。

        3.應用程序,通過PHP-GTK來編寫。

        今天是搭建php來為今后的LNMP做個準備,所以我們的用途是web。

        一些基本概念~

        CGI:通用網關接口,為http服務器和其他機器上的程序服務通信交流的一種工具,CGI需要運行在網絡服務器上。

        傳統CGI缺點:性能差,每次HTTP服務器遇到動態程序時都需要通過重新啟動解析器來執行解析,之后結果才會被返回給HTTP服務器,這在處理高并發訪問時幾乎是不可用的。

        FastCGI:是一個可伸縮、高速的HTTP服務器和動態腳本語言之間通信的接口,在unxi下是FastCGI的接口是socket,主要優點是將動態語言和HTTP服務器分離出來。流行的HTTP服務器都支持FastCGI。

        FastCGI接口采用C/S結構。當http服務器遇到動態程序時,直接交付給FastCGI進程來執行,結果返回給瀏覽器,HTTP服務器可以專一的處理靜態請求、將動態腳本服務器的結果返回給客戶端,提升整體新能。

        FPM:FastCGI進程管理器,對高負載網站有很大幫助。功能有:支持平滑停止/啟動、可以工作于不同的 uid/gid/chroot 環境下,并監聽不同的端口和使用不同的 php.ini 配置文件、

        stdout 和 stderr 日志記錄、在發生意外情況的時候能夠重新啟動并緩存被破壞的 opcode、支持文件上傳優化、慢日志、fastcgi_finish_request()- 特殊功能:用于在請求完成和刷新數據后,繼續在后臺執行耗時的工作(錄入視頻轉換、統計處理等)、動態/靜態子進程產生、基本 SAPI 運行狀態信息(類似Apache的 mod_status)、基于 php.ini 的配置文件。

        連接器(Connector):在mysql文檔中指出,連接器是允許應用程序連接到MySQL服務器的一個軟件,mysql提供了多數語言的連接器,包括php。

        應用程序與數據庫通信,需要編寫php代碼執行連接數據服務器、查詢數據庫、與數據庫相關的其他活動,需要軟件來提供php應用程序使用api。此軟件稱為連接器,允許應用程序連接到數據庫服務器。

        Driver:驅動是一段設計用來于一種特定類型的數據庫服務器進行交互的軟件代碼。驅動可能會調用一些庫,比如MySQL客戶端庫或者MySQL Native驅動庫。 這些庫實現了用于和MySQL數據庫服務器進行交互的底層協議。

        擴展:在php文檔中指出php代碼由核心組成,具有核心功能的可選擴展。php的MySQL擴展是使用php擴展框架實現的。擴展通常會向程序員公開api以允許編程方式使用工具或者不公開api。

        API:應用程序變編程接口或API定義應用程序需要調用的類、方法、函數和變量,以執行所需要的任務。對于需要與數據庫通信的php應用程序,必要的API通常通過PHP擴展來實現。

        API可以是程序性的或者面向對象的。使用過程api可以調用函數來執行任務,使用面向對象api可以通過api實例化類,然后在結果對象上調用方法。

        在編寫需要連接到MySQL服務器的PHP應用程序時,有3個api選項(擴展)可用:

        1.php的mysql擴展:允許開發與mysql數據庫交互的PHP應用程序,僅適用于mysql4.3.1以下版本,此擴展提供一個過程api;

        通常擴展位于源碼包路徑下/ext/mysql中。(ext表示Extended file system 延伸文件系統,簡稱ext)。

        2.php的mysqli擴展:mysql的更新改進擴展,允許我們訪問MySQL 4.1及以上版本提供的功能,此擴展包含在php5以上版本,此mysqli擴展改進 面向對象的api、支持多語句、增強調試功能等等。

        通常擴展位于源碼包路徑下/ext/mysqli中。

        3.php的數據對象pdo:pdo:PHP Data Objects簡寫,用于php應用程序的數據庫抽象層。無論應用程序連接到哪種類型的數據庫,pdo都會將php應用程序提供一致的api。

        通常擴展位于源碼包路徑下/ext/pdo中。

        驅動程序:

        pdo_mysql 驅動程序:pdo_mysql是一個實現PHP數據對象(PDO)接口的驅動程序,用于實現從PHP到MySQL數據庫的訪問。

        mysqlnd驅動程序:為了與mysql服務器通信,mysqli和pdo_mysql各自使用一個實現所需協議的庫。過去唯一使用的庫是mysql客戶端庫稱為libmysqlclient。libmysqlclient未針對php應用程序的通信做優化,故而mysqlnd(mysql native本機本地 driver)被開發。MySQL Native Driver是使用PHP擴展框架實現的,位于源碼包路徑下ext/mysqlnd。它不會向PHP程序員公開API。只能與MySQL服務器版本4.1.3及更高版本一起使用。

        mysqlnd不提供api,提供api的是擴展(mysqli和pdo),這些擴展使mysqlnd和mysql server進行通信。

        mysqli擴展是在PHP 5.0.0版本中引入的。mysqlnd驅動程序包含在PHP 5.3.0版中。

        從應用的層面(上層)來看,通過php的mysql和mysqli擴展提供的API去操作數據庫;

        從底層來看,mysqlnd提供了底層和數據庫交互的支持(和mysql數據庫進行網絡協議交互);

        在linux上安裝:

        通常安裝php使用二進制版本安裝,這些二進制版本是在支持mysql擴展下構建的,但擴展庫需要附加軟件包進行安裝。

        從源代碼構建PHP可以指定要使用的MySQL擴展,以及為每個擴展選擇客戶端庫。mysqlnd驅動程序是推薦的客戶端庫,因為它可以提高性能并允許訪問使用MySQL客戶端庫時不可用的功能。

        PHP5.4以上版本默認的客戶端庫使用mysqlnd、選項配置–with-mysqli 。

        擴展和客戶端庫可自由組合使用。如下:

        ./configure

        –with-mysql=mysqlnd #使用mysql擴展并使用mysqlnd官方驅動程序

        –with-mysqli=mysqlnd #使用mysqli擴展并使用mysqlnd官方驅動程序

        –with-pdo-mysql=mysqlnd #使用pdo擴展并使用mysqlnd官方驅動程序

        安裝FastCGI,在編譯安裝php時加入 –enable-fpm配置選項來激活FPM支持。

        1.需要先檢查是否安裝nginx和mysql

        [root@WebA-136 ~]# netstat -anlutp | egrep "mysql|nginx"

        tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 4547/nginx

        tcp 0 0 :::3306 :::* LISTEN 5891/mysqld

        [root@WebA-136 ~]#

        2.檢查依賴庫,檢查后linux只默認安裝了zlib-devel庫,記得安裝以下包哦~

        [root@WebA-136 ~]# rpm -qa zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel

        zlib-devel-1.2.3-29.el6.x86_64

        [root@WebA-136 ~]#

        居然yum源里沒有libiconv-devel庫,需要手動安裝

        [root@WebA-136 ~]#wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.15.tar.gz

        [root@WebA-136 ~]# tar xf libiconv-1.15.tar.gz -C /usr/local/src/

        [root@WebA-136 libiconv-1.15]# mkdir /usr/local/libiconv

        [root@WebA-136 libiconv-1.15]# ./configure –prefix=/usr/local/libiconv

        [root@WebA-136 libiconv-1.15]# make && make install

        3.安裝epel源和libmcrypt庫(對程序運行時添加/移除算法有幫助)、mhash庫

        [root@WebA-136 ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyum.com/repo/epel-6.repo

        [root@WebA-136 ~]# yum install libmcrypt-devel mhash -y

        4.安裝mcrypt加密擴展庫

          [root@WebA-136~]#yuminstallmcrypt-y  

        5.執行./configure,一定要加入-enable-fpm配置選項來激活FPM支持的

        ./configure

        –prefix=/usr/local/php7.2.5 #安裝位置

        –enable-mysqlnd #使用mysqlnd

        –with-mysqli=mysqlnd #使用mysqli擴展并使用mysqlnd官方驅動程序

        –with-pdo-mysql=mysqlnd #使用pdo mysql擴展并使用mysqlnd官方驅動程序

        –with-iconv-dir=/usr/local/libiconv #使php支持iconv函數,用于字符編碼強制轉換

        –with-freetype-dir #打開對freetype字體庫的支持

        –with-jpeg-dir #打開對jpeg圖片支持

        –with-png-dir #打開對png圖片支持

        –with-zlib #打開對zlib庫支持

        –with-libxml-dir #打開對libxml支持

        –enable-xml #支持xml擴展

        –disable-rpath #關閉額外的運行庫文件

        –enable-bcmath #使用bcmath擴展,打開圖片大小調整,在zabbix監控會用到

        –enable-shmop

        –enable-sysvsem

        –enable-inline-optimization

        –with-curl #打開對curl工具的支持

        –enable-mbregex

        –enable-fpm #打上PHP-fpm 補丁后才有這個參數,CGI方式安裝的啟動程序

        –enable-mbstring #多字節支持

        –with-mcrypt=/usr/local/mcrypt #php7.2.5已廢棄此選項

        –with-gd #對gd庫的支持

        –enable-gd-native-ttf #php7.2.5已廢棄此選項

        –with-openssl #對openssl的支持

        –with-mhash #算法支持

        –enable-pcntl # freeTDS需要用到的,可能是鏈接mysql用到

        –enable-sockets #打開socket的支持

        –with-xmlrpc #打開xml-rpc的c語言

        –enable-soap

        –enable-short-tags

        –enable-static

        –with-xsl #打開XSLT 文件支持,擴展了libXML2庫 ,需要libxslt軟件

        –with-fpm-user=www #運行fpm的用戶

        –with-fpm-group=www #運行fpm的組名

        –enable-ftp #打開ftp的支持

        –enable-opcache=no

        其中與fpm有關的選項是:

        –enable-fpm

        –with-fpm-user=www 設置 FPM 運行的用戶身份(默認nobody)

        –with-fpm-group=www 設置 FPM 運行時的用戶組(默認nobody)

        –with-fpm-systemd 啟用 systemd 集成 (默認no)

        –with-fpm-acl 使用POSIX訪問控制列表 (默認no)

        編譯前需要做link

        [root@WebA-136 php-7.2.5]# ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib64/

        [root@WebA-136 php-7.2.5]# touch ext/phar/phar.phar

        [root@WebA-136 php-7.2.5]# make && make install

        拷貝php.ini配置文件

        [root@WebA-136 php]# cp /usr/local/src/php-7.2.5/php.ini-production /usr/local/php/lib/php.ini

        [root@WebA-136 php]# cd /usr/local/php/etc/php-fpm.d

        [root@WebA-136 php-fpm.d]# cp www.conf.default www.conf

        [root@WebA-136 ~]# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

        啟動php并查看

        [root@iZ2ze4vbp6wu2etcksvay7Z php]# ./sbin/php-fpm

        [root@iZ2ze4vbp6wu2etcksvay7Z php]# lsof -i :9000

        COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

        php-fpm 7677 root 7u IPv4 261689 0t0 TCP localhost:cslistener (LISTEN)

        php-fpm 7678 www 0u IPv4 261689 0t0 TCP localhost:cslistener (LISTEN)

        php-fpm 7679 www 0u IPv4 261689 0t0 TCP localhost:cslistener (LISTEN)

        [root@iZ2ze4vbp6wu2etcksvay7Z php]# netstat -anltup | grep php

        tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 7677/php-fpm

        [root@iZ2ze4vbp6wu2etcksvay7Z php]#

        我安裝的是php7.2.5版本、linux是阿里云的服務器、nginx是1.14.2、mysql是5.6.40,過程中所遇到的問題如下:

        1.virtual memory exhausted: Cannot allocate memory,虛擬內存用盡無法分配內存。

        查看內存情況如下:

          [root@iZ2ze4vbp6wu2etcksvay7Zphp]#free-m  totalusedfreesharedbufferscached  Mem:996895100053299  -/+buffers/cache:542453  Swap:000  [root@iZ2ze4vbp6wu2etcksvay7Zphp]#

        解決方法:

          [root@iZ2ze4vbp6wu2etcksvay7Zphp]#ddif=/dev/zeroof=/opt/swapbs=1024count=2048000  [root@iZ2ze4vbp6wu2etcksvay7Zphp]#mkswap/opt/swap  [root@iZ2ze4vbp6wu2etcksvay7Zphp]#swapon/opt/swap  安裝完php后執行  [root@iZ2ze4vbp6wu2etcksvay7Zphp]#swapoff/opt/swap  

        phpize的用法:手動編譯安裝php的擴展

        增加pdo擴展(我的已經在安裝php的時候已經增加此擴展了)

        首先進去源碼包pdo目錄下

          [root@iZ2ze4vbp6wu2etcksvay7Z ~]# cd /usr/local/src/php-7.2.5/ext/pdo  

        其次執行/usr/local/php/bin/phpize生成配置文件

          [root@iZ2ze4vbp6wu2etcksvay7Zpdo]#/usr/local/php/bin/phpize  Configuringfor:  PHPApiVersion:20170718  ZendModuleApiNo:20170718  ZendExtensionApiNo:320170718  [root@iZ2ze4vbp6wu2etcksvay7Zpdo]#  

        再使用生成的配置文件./configure –with-php-config=/usr/local/php/bin/php-config –enable-pdo=share

          [root@iZ2ze4vbp6wu2etcksvay7Zpdo]#./configure--with-php-config=/usr/local/php/bin/php-config--enable-pdo=share  

        最后執行make &&make install編譯安裝

          [root@iZ2ze4vbp6wu2etcksvay7Zpdo]#make&&makeinstall  

        成功則出現

        Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20170718/

        Installing header files: /usr/local/php/include/php/

        Installing PDO headers: /usr/local/php/include/php/ext/pdo/

        說明在/usr/local/php/lib/php/extensions/no-debug-non-zts-20170718/目錄下生成了pdo.so文件.

        增加pdo_mayslq((我的已經在安裝php的時候已經增加此擴展了)),進入源碼包pdo_mysql目錄下,執行/usr/local/php/bin/phpize生成配置文件

          [root@iZ2ze4vbp6wu2etcksvay7Zext]#cdpdo_mysql/  [root@iZ2ze4vbp6wu2etcksvay7Zpdo_mysql]#/usr/local/php/bin/phpize  

        再使用生成的配置文件–with-php-config=/usr/local/php/bin/php-config –with-pdo-mysql=/usr/local/mysql

          [root@iZ2ze4vbp6wu2etcksvay7Zpdo_mysql]#./configure–with-php-config=/usr/local/php/bin/php-config–with-pdo-mysql=/usr/local/mysql  

        最后make &&make install編譯安裝

          [root@iZ2ze4vbp6wu2etcksvay7Zpdo_mysql]#make&&makeinstall  

        成功則出現

        Installing shared extensions:/usr/local/php/lib/php/extensions/no-debug-non-zts-20170718/

        至此在此目錄下已分別生成pdo.so文件和pdo_mysql.so文件.

        最后切換到php安裝目錄下找到php.ini配置文件

          [root@iZ2ze4vbp6wu2etcksvay7Z pdo_mysql]# vim /usr/local/php/lib/php.ini  增加兩行:  extension_dir=/usr/local/php/lib/php/extensions/no-debug-non-zts-20170718/  extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20170718/pdo.so  

        需要重啟php-fpm生效

        FPM配置文件有php-fpm.conf和進程池配置文件兩個。

          [root@WebA-136php]#vimetc/php-fpm.conf  有全局配置段和線程池配置段兩部分組成。  

        全局配置部分:

        pid = string PID文件的位置。默認為空
        error_log = string 錯誤日志的位置。默認:#INSTALL_PREFIX#/log/php-fpm.log。 如果設置為 "syslog",日志將不會寫入本地文件,而是發送到 syslogd。
        log_level = string 錯誤級別??捎眉墑e為:alert(必須立即處理),error(錯誤情況),warning(警告情況),notice(一般重要信息),debug(調試信息)。默認:notice。
        syslog.facility = string 設置何種程序記錄消息,默認值:daemon
        syslog.ident = string

        為每條信息添加前綴。 如果在同一臺服務器上運行了多個 FPM 實例,可以修改此默認值來滿足需求。默認值:php-fpm。

        emergency_restart_threshold =int

        如果子進程在 emergency_restart_interval 設定的時間內收到該參數設定次數的 SIGSEGV 或者 SIGBUS退出信息號,則FPM會重新啟動。0 表示“關閉該功能”。默認值:0(關閉)。

        emergency_restart_interval =mixed

        emergency_restart_interval 用于設定平滑重啟的間隔時間。這么做有助于解決加速器中共享內存的使用問題??捎脝挝唬簊(秒),m(分),h(小時)或者 d(天)。默認單位:s(秒)。默認值:0(關閉)。

        process_control_timeout =mixed

        daemonize =boolean 設置 FPM 在后臺運行。設置“no”將 FPM 保持在前臺運行用于調試。默認值:yes。

        process.max =int Fork的最大FPM進程數。使用動態管理進程數時,此設計可以控制在一個進程池內的全局進程數量。使用需謹慎,默認值:0。
        process.priority =int 設置master進程的 nice(2) 優先級(如果設置了此值)。 可以是 -19(最高優先級)到 20(更低優先級)。默認值:不設置。
        daemonize =boolean 設置 FPM 在后臺運行。設置“no”將 FPM 保持在前臺運行用于調試。默認值:yes。
        rlimit_files =int 設置master進程的打開文件描述符rlimit數。
        rlimit_core =int 設置master進程最大core的rlimit尺寸,默認值0。
        events.mechanism =string 設置FPM使用的事件機制??捎靡韵逻x項:select、pool、epoll、kqueue (*BSD)、port (Solaris)。 默認值:不設置(自動檢測)
        systemd_interval =int 使用systemd集成的FPM時,設置間歇秒數,報告健在通知給systemd。設置為0表示禁用。默認值10

        線程池配置部分http://php.net/manual/zh/install.fpm.configuration.php

        第一個php程序hello world。

          

        helloworld ';>

        在瀏覽器輸入day/hello.php

        PHP基礎及安裝過程

        此程序僅僅使用了php的echo語句顯示了hello world。

        繼續從php獲取系統信息,如下

            

        PHP基礎及安裝過程

        輸出正在使用的瀏覽器

          echo$_SERVER['HTTP_USER_AGENT'];  >  

        PHP基礎及安裝過程

        以及以下:

          if(strpos($_SERVER['HTTP_USER_AGENT'],'MSIE')!==FALSE){  echo'正在使用InternetExplorer。  ';  }  >  

        PHP基礎及安裝過程

        處理表單略過咯~

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 久久99国产精品久久99| 亚洲天堂久久精品| 四虎国产精品免费久久久| 天天爽夜夜爽8888视频精品| 亚洲综合精品一二三区在线| 亚洲人精品午夜射精日韩| 国产精品尹人在线观看| 99精品久久精品一区二区| 亚洲综合精品香蕉久久网97| 日韩精品系列产品| 久久精品国产一区二区电影| 精品久久久久久久久中文字幕| 日韩精品无码久久久久久| 四虎精品免费永久免费视频| 大胸国产精品视频| 91精品国产福利尤物| 久久精品无码一区二区无码| 亚洲精品无码专区在线播放 | 久久精品无码一区二区日韩AV| 国内精品久久久久影院免费| 国语精品一区二区三区| 久久婷婷国产综合精品| 亚洲精品无码不卡在线播HE| 在线中文字幕精品第5页| 四虎精品影库4HUTV四虎| 精品国产成人在线| 国产欧美精品一区二区三区四区 | 国产suv精品一区二区33| 久久精品午夜一区二区福利| 欧美精品一区二区蜜臀亚洲 | www.久久精品| 国产成人精品免费视频动漫| 国产精品乱码高清在线观看| 国产精品色内内在线播放| 国产小呦泬泬99精品| 亚洲国产精品无码久久一区二区| 欧美精品一二区| 日韩精品无码永久免费网站| 久久亚洲AV永久无码精品| 久久93精品国产91久久综合| 日韩福利视频精品专区|