欧美亚洲中文,在线国自产视频,欧洲一区在线观看视频,亚洲综合中文字幕在线观看

      1. <dfn id="rfwes"></dfn>
          <object id="rfwes"></object>
        1. 站長資訊網(wǎng)
          最全最豐富的資訊網(wǎng)站

          PHP基礎(chǔ)及安裝過程

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

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

          PHP功能:

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

          3.應(yīng)用程序,通過PHP-GTK來編寫。

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

          一些基本概念~

          CGI:通用網(wǎng)關(guān)接口,為http服務(wù)器和其他機(jī)器上的程序服務(wù)通信交流的一種工具,CGI需要運行在網(wǎng)絡(luò)服務(wù)器上。

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

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

          FastCGI接口采用C/S結(jié)構(gòu)。當(dāng)http服務(wù)器遇到動態(tài)程序時,直接交付給FastCGI進(jìn)程來執(zhí)行,結(jié)果返回給瀏覽器,HTTP服務(wù)器可以專一的處理靜態(tài)請求、將動態(tài)腳本服務(wù)器的結(jié)果返回給客戶端,提升整體新能。

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

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

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

          應(yīng)用程序與數(shù)據(jù)庫通信,需要編寫php代碼執(zhí)行連接數(shù)據(jù)服務(wù)器、查詢數(shù)據(jù)庫、與數(shù)據(jù)庫相關(guān)的其他活動,需要軟件來提供php應(yīng)用程序使用api。此軟件稱為連接器,允許應(yīng)用程序連接到數(shù)據(jù)庫服務(wù)器。

          Driver:驅(qū)動是一段設(shè)計用來于一種特定類型的數(shù)據(jù)庫服務(wù)器進(jìn)行交互的軟件代碼。驅(qū)動可能會調(diào)用一些庫,比如MySQL客戶端庫或者M(jìn)ySQL Native驅(qū)動庫。 這些庫實現(xiàn)了用于和MySQL數(shù)據(jù)庫服務(wù)器進(jìn)行交互的底層協(xié)議。

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

          API:應(yīng)用程序變編程接口或API定義應(yīng)用程序需要調(diào)用的類、方法、函數(shù)和變量,以執(zhí)行所需要的任務(wù)。對于需要與數(shù)據(jù)庫通信的php應(yīng)用程序,必要的API通常通過PHP擴(kuò)展來實現(xiàn)。

          API可以是程序性的或者面向?qū)ο蟮?。使用過程api可以調(diào)用函數(shù)來執(zhí)行任務(wù),使用面向?qū)ο骯pi可以通過api實例化類,然后在結(jié)果對象上調(diào)用方法。

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

          1.php的mysql擴(kuò)展:允許開發(fā)與mysql數(shù)據(jù)庫交互的PHP應(yīng)用程序,僅適用于mysql4.3.1以下版本,此擴(kuò)展提供一個過程api;

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

          2.php的mysqli擴(kuò)展:mysql的更新改進(jìn)擴(kuò)展,允許我們訪問MySQL 4.1及以上版本提供的功能,此擴(kuò)展包含在php5以上版本,此mysqli擴(kuò)展改進(jìn) 面向?qū)ο蟮腶pi、支持多語句、增強(qiáng)調(diào)試功能等等。

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

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

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

          驅(qū)動程序:

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

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

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

          mysqli擴(kuò)展是在PHP 5.0.0版本中引入的。mysqlnd驅(qū)動程序包含在PHP 5.3.0版中。

          從應(yīng)用的層面(上層)來看,通過php的mysql和mysqli擴(kuò)展提供的API去操作數(shù)據(jù)庫;

          從底層來看,mysqlnd提供了底層和數(shù)據(jù)庫交互的支持(和mysql數(shù)據(jù)庫進(jìn)行網(wǎng)絡(luò)協(xié)議交互);

          在linux上安裝:

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

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

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

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

          ./configure

          –with-mysql=mysqlnd #使用mysql擴(kuò)展并使用mysqlnd官方驅(qū)動程序

          –with-mysqli=mysqlnd #使用mysqli擴(kuò)展并使用mysqlnd官方驅(qū)動程序

          –with-pdo-mysql=mysqlnd #使用pdo擴(kuò)展并使用mysqlnd官方驅(qū)動程序

          安裝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只默認(rèn)安裝了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源里沒有l(wèi)ibiconv-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加密擴(kuò)展庫

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

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

          ./configure

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

          –enable-mysqlnd #使用mysqlnd

          –with-mysqli=mysqlnd #使用mysqli擴(kuò)展并使用mysqlnd官方驅(qū)動程序

          –with-pdo-mysql=mysqlnd #使用pdo mysql擴(kuò)展并使用mysqlnd官方驅(qū)動程序

          –with-iconv-dir=/usr/local/libiconv #使php支持iconv函數(shù),用于字符編碼強(qiáng)制轉(zhuǎn)換

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

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

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

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

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

          –enable-xml #支持xml擴(kuò)展

          –disable-rpath #關(guān)閉額外的運行庫文件

          –enable-bcmath #使用bcmath擴(kuò)展,打開圖片大小調(diào)整,在zabbix監(jiān)控會用到

          –enable-shmop

          –enable-sysvsem

          –enable-inline-optimization

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

          –enable-mbregex

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

          –enable-mbstring #多字節(jié)支持

          –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 文件支持,擴(kuò)展了libXML2庫 ,需要libxslt軟件

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

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

          –enable-ftp #打開ftp的支持

          –enable-opcache=no

          其中與fpm有關(guān)的選項是:

          –enable-fpm

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

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

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

          –with-fpm-acl 使用POSIX訪問控制列表 (默認(rèn)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是阿里云的服務(wù)器、nginx是1.14.2、mysql是5.6.40,過程中所遇到的問題如下:

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

          查看內(nèi)存情況如下:

            [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后執(zhí)行  [root@iZ2ze4vbp6wu2etcksvay7Zphp]#swapoff/opt/swap  

          phpize的用法:手動編譯安裝php的擴(kuò)展

          增加pdo擴(kuò)展(我的已經(jīng)在安裝php的時候已經(jīng)增加此擴(kuò)展了)

          首先進(jìn)去源碼包pdo目錄下

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

          其次執(zhí)行/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  

          最后執(zhí)行make &&make install編譯安裝

            [root@iZ2ze4vbp6wu2etcksvay7Zpdo]#make&&makeinstall  

          成功則出現(xiàn)

          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((我的已經(jīng)在安裝php的時候已經(jīng)增加此擴(kuò)展了)),進(jìn)入源碼包pdo_mysql目錄下,執(zhí)行/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  

          成功則出現(xiàn)

          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和進(jìn)程池配置文件兩個。

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

          全局配置部分:

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

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

          emergency_restart_threshold =int

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

          emergency_restart_interval =mixed

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

          process_control_timeout =mixed

          daemonize =boolean 設(shè)置 FPM 在后臺運行。設(shè)置“no”將 FPM 保持在前臺運行用于調(diào)試。默認(rèn)值:yes。

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

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

          第一個php程序hello world。

            

          helloworld ';>

          在瀏覽器輸入day/hello.php

          PHP基礎(chǔ)及安裝過程

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

          繼續(xù)從php獲取系統(tǒng)信息,如下

              

          PHP基礎(chǔ)及安裝過程

          輸出正在使用的瀏覽器

            echo$_SERVER['HTTP_USER_AGENT'];  >  

          PHP基礎(chǔ)及安裝過程

          以及以下:

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

          PHP基礎(chǔ)及安裝過程

          處理表單略過咯~

          贊(0)
          分享到: 更多 (0)
          網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號