2021年7月11日 星期日

寶塔、phpstudy、phpEnv 使用心得

前言

之前一直使用XAMPP當做windows的測試環境,但是有以下缺點:
1. 不能切換php版本
2. 用的是apache不是nginx
3. 無php擴展安裝
4. 無偽靜態配置
5. 無軟件管理
優點:
netstat 本機端口監聽圖形界面  => 但是可以用 windows 內建功能【資源監視器(resmon)】中的【接聽連接埠】取代

為了能使用低版本的php測試SQL注入,和使用不同版本的php測試不同專案
改使用以下工具

寶塔

優點

支持linux和windows
可安裝php 5.2 - 8.0 多版本的php,並快速切換php版本,安裝php擴展
linux可安裝5.1-8.0 版本的mysql,windows可安裝5.5-8.0 版本的mysql。可安裝mariadb
面板可查到mysql密碼
內建不同php框架的nginx偽靜態模板
linux版本在面板快速切換php cli的版本
面板整合:反向代理、重定向、計劃任務、SSL、防火墻

特點

新項目自動生成.user.ini 、index.html、404.html
面板上安裝PHP後會自動安裝composer


缺點

pecl只支持到php 7.3,不支持php 7.4、php 8.0

CentOS 安裝寶塔

https://www.bt.cn/download/linux.html  宝塔Linux面板 7.7.0
https://www.shopee6.com/web/web-tutorial/remove-bt-panel-forced-login.html  一键解决BT宝塔面板的强制登陆限制要求教程

安裝

# yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh

去除登錄(windows版本不需要)

# sed -i "s|if (bind_user == 'True') {|if (bind_user == 'REMOVED') {|g" /www/server/panel/BTPanel/static/js/index.js
# rm -rf /www/server/panel/data/bind.pl

查面板登錄信息

# bt 
(然後 prompt輸入14)



CentOS安裝特定版本XDebug

因為寶塔後台php 8 裝的xdebug版本是 v3.0.0
# php -v
PHP 8.0.8 (cli) (built: Jul 13 2021 10:56:23) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.8, Copyright (c) Zend Technologies
    with Xdebug v3.0.0, Copyright (c) 2002-2020, by Derick Rethans

但是 v3.0.0 有bug,在停在斷點時取消斷點,會中止xdebug調試。又寶塔的php 8沒有pecl,所以需要手動安裝 xdebug-3.0.4

下載 xdebug-3.0.4

# wget https://xdebug.org/files/xdebug-3.0.4.tgz

解壓縮

# tar -zxf xdebug-3.0.4.tgz

進入目錄

# cd xdebug-3.0.4/

# phpize

直接configure 會失敗

# ./configure --enable-xdebug
checking for grep that handles long lines and -e... /usr/bin/grep
...
configure: error: Cannot find php-config. Please use --with-php-config=PATH

需指定php 8的php-config 路徑

# ./configure --enable-xdebug --with-php-config=/www/server/php/80/bin/php-config 
# make
# make install

即安裝成功

# php -v
PHP 8.0.8 (cli) (built: Jul 13 2021 10:56:23) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.8, Copyright (c) Zend Technologies
    with Xdebug v3.0.4, Copyright (c) 2002-2021, by Derick Rethans

設定php.ini

/www/server/php/80/etc/php.ini
[xdebug]
zend_extension="/path/xdebug-3.0.4/xdebug.so"
xdebug.mode=debug
xdebug.client_host=192.168.1.x

configure報錯

# ./configure --enable-xdebug --with-php-config=/www/server/php/72/bin/php-config
configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.
=> 安裝re2c  # yum install re2c
checking for gawk... gawk
checking whether to enable Xdebug support... yes, shared
checking whether to enable Xdebug developer build flags... no
./configure: line 4483: syntax error near unexpected token `-Wbool-conversion,'
=> 重新安裝PHP 7.2
./configure: line 4483: `    AX_CHECK_COMPILE_FLAG(-Wbool-conversion,                _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wbool-conversion")'


wget時https證書過期

# wget https://xdebug.org/files/xdebug-3.1.5.tgz
...
ERROR: cannot verify xdebug.org's certificate, issued by ‘/C=US/O=Let's Encrypt/CN=R3’:
  Issued certificate has expired.
To connect to xdebug.org insecurely, use `--no-check-certificate'.

--no-check-certificate 或 # yum update ca-certificates  

Windows 安裝特定版本的XDebug

https://xdebug.org/download 直接下載 Windows binaries ,如 PHP 8.0 VS16 (64 bit)  
然後直接修改 php.ini
C:\BtSoft\php\80\php.ini
zend_extension="C:\BtSoft\php\80\ext\php_xdebug-3.0.4-8.0-vs16-nts-x86_64.dll"
xdebug.mode = debug
xdebug.client_port = 9003
xdebug.client_host = "192.168.1.x"
xdebug.idekey=PHPSTORM

避免Windows寶塔開機自動啟動服務

Windows服務中將以下的服務的啟動類型改成【手動】
btPanel
btTask
mysql
nginx

安裝不同版本的MySQL

https://www.cnblogs.com/bjlhx/p/10538781.html  007-docker-安装-mysql:5.6
因為寶塔已經安裝了MySQL5.7,一次只能安裝一個MySQL,如果要同時安裝不同版本的MySQL需使用docker
以MySQL 5.6為例
新建目錄 /root/my-mysql-5.6  ,將MySQL資料放在這裡
# docker run -p 23306:3306 --name my-mysql-5.6 -v /root/my-mysql-5.6:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
Unable to find image 'mysql:5.6' locally
5.6: Pulling from library/mysql
..
第一次會拉取官方mysql:5.6鏡像

如果你的機器不能訪問MySQL 5.6 服務可以進入容器這樣做
# docker exec -it my-mysql-5.6 bash
root@c5fe23e1a123:/# mysql -u root -p
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' ;
Query OK, 0 rows affected (0.00 sec)

就可以以23306端口訪問MySQL 5.6服務

--character-set-server=utf8mb4 => 讓你的 character_set_server 是 utf8mb4 而不是latin1
--collation-server=utf8mb4_unicode_ci => 讓你的 collation_server 是 utf8mb4_unicode_ci 而不是latin1_swedish_ci

安裝beanstalkd 和 beanstalkd-console

如果開發環境選用寶塔而不是laradock,而寶塔軟件管理無beanstalk,可使用docker
# docker run -d -p 11300:11300 --name beanstalkd schickling/beanstalkd
# docker run -d -p 2080:2080 --link beanstalkd:beanstalkd schickling/beanstalkd-console
然後即可透過瀏覽器訪問 beanstalkd-console 


一直提示open_basedir restriction in effect(windows server 2016)

https://www.bt.cn/bbs/thread-6877-1-1.html  一直提示open_basedir restriction in effect
網站目錄 =》 取消勾選【防跨站攻击(open_basedir)

phpstudy

版本  8.1.1.3

優點

可安裝php 5.2 - 8.0 多版本的php,並快速切換php版本,安裝php擴展
可安裝5.1-8.0 版本的mysql
面板可查到mysql密碼
mysql不佔用windows服務,不與XAMPP和寶塔產生服務路徑衝突 => 裝了寶塔的mysql後phpstudy的mysql就起不來了

特點

面板設置nginx偽靜態(編輯=>偽靜態和偽靜態是相同的),設完後在專案目錄下將偽靜態寫入 nginx.htaccess(nginx)或 .htaccess(apache)。
網站自動生成index.html 入口文件
網站自動生成 error 錯誤頁面目錄

缺點

php小版本非最新版
php-fpm 9000端口和phpstorm xdebug 端口衝突,需要更改xdebug端口

phpEnv

版本 8.9.0

優點

可離線安裝(預設只有php 7.4,面板軟件商店下載解壓縮後即完成php多版本安裝)
php-fpm 和phpstorm xdebug 端口不衝突 
可安裝php 5.2 - 8.2 多版本的php,並快速切換php版本
面板可改MySQL密碼
內建不同php框架的nginx URL重寫模板
可安裝redis MySQL
預設裝好composer(phpEnv\tools\Composer\composer.phar)

同時跑多版本MySQL

phpEnv裝 MySQL 5.7
到MySQL官網下載MySQL 8.0
https://dev.mysql.com/downloads/file/?id=516927
下載 mysql-installer-community-8.0.32.0.msi ,雙擊執行安裝
選擇 Server only
(一直下一步)
使用3308端口,避免和MySQL 5.7 3306 衝突
(一直下一步)
設定MySQL密碼
服務名:MySQL80
(一直下一步完成安裝)
在服務中啟動/停用 MySQL 8.0服務







結論

推薦使用寶塔做開發環境
推薦使用phpEnv做開發環境