最近在調試php程序時遇到遇到個php版本帶來的bug,如圖所示
switch語句中的continue要改成break,或者用continue2代替,每次調試都要改下別人的代碼,又不敢提交,這個問題的原因是別人還在用7.1.x的版本,而我裝的是7.3.8,據傳后來7.3的版本中這個bug修復了,索性我就直接換成跟線上保持一致的版本
下面開始在linux上安裝7.1.5版本
下載安裝php
#下載 wget https://www.php.net/distributions/php-7.1.5.tar.gz #解壓 tar -zxvf php-7.1.5.tar.gz cd php-7.1.5 #安裝 ./configure --prefix=/usr/local/php7.1 --with-config-file-path=/usr/local/php --enable-mbstring --with-openssl --enable-ftp --with-gd --with-jpeg-dir=/usr --with-png-dir=/usr --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-pear --enable-sockets --with-freetype-dir=/usr --with-zlib --with-libxml-dir=/usr --with-xmlrpc --enable-zip --enable-fpm --enable-xml --enable-sockets --with-gd --with-zlib --with-iconv --enable-zip --with-freetype-dir=/usr/lib/ --enable-soap --enable-pcntl --enable-cli --with-curl make && make install
由於之前安裝過一個php版本,依賴都是安裝好的,上面的步驟都還順利
安裝依賴庫
php依賴插件可通過 https://pecl.php.net 下載
以redis為例
wget https://pecl.php.net/get/redis-5.2.0.tgz tar -zxvf redis-5.2.0.tgz cd redis-5.2.0 /usr/local/php7.1/bin/phpize ./configure --with-php-config=/usr/local/php7.1/bin/php-config make && make install
在php.ini 添加依賴
vim /usr/local/php7.1/etc/php.ini
一般添加在module下
;extension_dir="/usr/local/php7.1/lib/php/extensions/no-debug-non-zts-20160303" #取決於你的依賴編譯后的目錄,這行也可注釋掉 [redis] extension="redis.so"
安裝xdebug
如果要斷點調試php代碼需安裝xdebug
下載地址 https://xdebug.org/download
編譯步驟同上
vim /usr/local/php7.1/etc/php.ini
一般添加在文件最底部
[XDebug] zend_extension="xdebug.so" xdebug.remote_port= 8888 #xdebug 監聽的端口 xdebug.remote_enable = 1 xdebug.remote_autostart = 1 xdebug.remote_handler = dbgp xdebug.remote_host= 10.90.xx.xx #服務ip 用於遠程調式
配置php-fpm
#重命名php-fpm下的www.conf cd /usr/local/php7.1/etc/php-fpm.d cp www.conf.default www.conf #重命名 php-fpm.conf cd /usr/local/php7.1/etc cp php-fpm.conf.default php-fpm.conf
配置更多的php-fpm 進程(提高並發)
vim php-fpm.conf 在末尾加上
pm.max_children = 100 pm.start_servers = 30 pm.min_spare_servers = 20 pm.max_spare_servers = 100 pm.max_requests = 500
讓不同的版本的php-fpm監聽不同端口
vim /usr/local/php7.1/etc/php-fpm.d/www.conf
listen = 127.0.0.1:9001 #監聽 9001端口
啟動php-fpm
service php-fpm start #(restart\stop) 啟動、重啟、停止,一般服務器上只有一個php版本使用可以這么玩
多個版本的話就不可以這么玩了
#殺死所有的fpm進程 killall php-fpm #啟動指定版本的php-fpm /usr/local/php7.1/sbin/php-fpm
#當然也可指定php配置文件和fpm配置文件 /usr/local/php7.1/sbin/php-fpm -c /usr/local/php7.1/etc/php.ini -y /usr/local/php/etc/php-fpm.conf
遇到的坑
1、我開phpinfo 中明明可以看到 我安裝的依賴 如redis ,但是 php -m中看不到,web請求可以調用 redis,php 執行腳本 找不到 Redis類
解: 使用 php --ini 查看配置文件目錄
如果 Loaded Configuration File: (none) 把 php.ini 文件復制一份到上面的默認目錄下(/usr/local/php7.1)即可
反之php -m 中有安裝的模塊,web請求找不到該模塊,也是同樣道理
總之:啟動的php-fpm 和本地的php 可能不是同一份 php.ini ,筆者用默認的命令,不指定php.ini 只在 /usr/local/php7.1中維護一份 php.ini文件