■ 新疆 趙修文
編者按:在Windows 系統(tǒng)中,使用帝國CMS 架設(shè)的個(gè)人學(xué)習(xí)網(wǎng)站,采用PHPStudy 集成運(yùn)行環(huán)境(包括Apache、Nginx、MySQL 和PHP)。由于PHPStudy 集成的上述軟件更新較慢,因此需要手動(dòng)升級更新,并確保網(wǎng)站能夠正常運(yùn)行。該方法同樣適用于其他集成環(huán)境軟件升級。
下面具體介紹如何進(jìn)行自定義升級。
備份好網(wǎng)站數(shù)據(jù)后,開始我們的升級之旅。
1.在 Visual Studio(https://visualstudio.microsoft.com/)下載2019版的Visual C++庫運(yùn)行時(shí)組件,該組件有X86 和X64版本,對于32 位操作系統(tǒng)只能安裝X86 版,對于64 位操作系統(tǒng)可以安裝任意一個(gè)版本或同時(shí)安裝2 個(gè)版本,只要和所運(yùn)行的PHP 架構(gòu)一致就可以了,系統(tǒng)根據(jù)運(yùn)行的PHP 版本知道該調(diào)用哪個(gè)庫。PHP 的 Windows 網(wǎng)站也提供該組件的下載。
2.到PHP 的Windows 網(wǎng)站(https://windows.php.net/)下載最新的64 位非線程安全版PHP。PHP 有多種運(yùn)行模式,以模塊化方式使用的選擇線程安全版,以FastCGI 方式使用的選擇非線程安全版。如Apache 可以以模塊化(apache2handler)或FastCGI 方式運(yùn)行PHP,Nginx、IIS 使用FastCGI 方式。
3.到Nginx(http://nginx.org/)下載最新的Windows 版Nginx;到Apache(http://www.apacheloungec om/)下載64 位Windows 版的Apache;到MySQL(https://downloads.mysql.com) 下載64 位MySQL。
1.基礎(chǔ)配置
集成環(huán)境PHPStudy 安裝在D:PHPStudy 目錄,網(wǎng)站放在D:PHPStudywww 目錄。首先運(yùn)行安裝Visual C++庫運(yùn)行時(shí)組件,安裝后在“程序和功能”中可看到其版本號為14.26,此版本包括了Visual C++2015-2019 的運(yùn)行時(shí)組件,所以其他被包含的版本可以卸載掉。
2.PHP 升級與配置
(1)安裝。將下載的php7.4.9-nts 解壓到D:PHPStudyExtensionsphp 目錄下,退出并重啟PHPStudy,就可以看到自定義的php7.4.9-nts 了。
(2)配置。進(jìn)入php7.4.9-nts 目錄,復(fù)制php.iniproduction 并將文件名改為php.ini。打開此文件,將short_open_tag=On、extension_dir="ext" 前面的注釋“;”刪除,然后開啟PHP 擴(kuò)展bz2、curl、gd2、mbstring、mysqli(也可以通過PHPStudy 開啟PHP 擴(kuò)展);此外可以設(shè)置expose_php=Off,防止別人掃描時(shí)暴露系統(tǒng)的PHP 版本信息。
(3)驗(yàn)證。打開命令行窗口,進(jìn)入php7.4.9-nts 目錄,然后執(zhí)行php -version命令,可以看到PHP 版本信息并且沒有任何報(bào)錯(cuò)。如果報(bào)“vcruntime140.dll not compatibile with PHP”,則說明安裝的Visual C++庫運(yùn)行時(shí)組件不兼容,請下載安裝上述版本;如果報(bào)“找不到PHP 擴(kuò)展庫”,說明擴(kuò)展庫路徑設(shè)置不正確,請檢查配置文件的extension_dir 值。
3.Nginx 升級與配置
將D:phpStudyExtensi ons 目錄下網(wǎng)站使用的nginx(如Nginx1.15.11)目錄改名或移到其他位置,將下載的1.18 版解壓,目錄名改為Nginx1.15.11。打開Nginx1.15.11/conf 目錄下的nginx.conf 文件,部分參考配置如下:
修改完配置文件后,可以使用nginx -t -c .conf ginx.conf 命令檢查配置是否正確。
4.Apache 升級與配置
下面以FastCGI 方式使用PHP 來配置Apache,將D:phpStudyExtensions 目錄下網(wǎng)站使用的Apache(如Apache2.4.39)目錄改名或移到其他位置,并復(fù)制conf目錄下的vhosts 目錄;將下載的2.4.46 版解壓,目錄名改為Apache2.4.39,將剛才復(fù)制的vhosts 目錄移到conf 目錄里。打開主配置文件httpd.conf,修改配置。
(1)Define SRVROOT“D:/phpStudy/Extensions/Apache2.4.39”,路徑必須是絕對路徑,且末尾不帶/。
(2)配置要加載的模塊(刪除注釋或增加)mod_rewrite.so、mod_socache_shmcb.so、mod_ssl.so、mod_fcgid.so。
(3)包含擴(kuò)展配置文件httpd-mpm.conf、httpdautoindex.conf、httpdinfo.conf,注釋默認(rèn)虛擬主機(jī)配置文件Include conf/vhosts.conf,增加Include conf/vhosts/*.conf(也可以將其內(nèi)容粘貼到vhosts.conf 文件中,就不用注釋該指令和前述復(fù)制此文件夾的操作)。
(4)修改虛擬主機(jī)配置,打開vhosts/localhost_80.conf,刪除Order allow,den y 和Allow from all 指令(該訪問控制指令由mod_access_compat 模 塊 提供,Apache 已棄用,已由mod_authz_host 模 塊 的Require 指令代替,若不刪除此指令則需在主配置文件中加載前一個(gè)模塊。指令的具體用法可查閱模塊幫助文檔upgrading 部分http://httpd.apache.org/docs/2.4/upgrading.html)。
若在modules 目錄中沒有mod_fcgid.so 文件,可在Apache 網(wǎng)站單獨(dú)下載mod_fcgid 模塊,下載解壓后將.so 文件放到modules目錄,然后在主配置文件中加載模塊即可使用。解壓后的ReadMe 文件中有FastCGI配置樣例,可參考配置localhost_80.conf,更多幫助請查閱Apache 服務(wù)器文檔(http://httpd.apache.org/docs/2.4)。
修改完配置文件后,可以使用httpd -t 命令,檢查配置文件語法是否正確,還可以使用httpd -S 命令查看運(yùn)行時(shí)的配置。
5.MySQL 升級與配置
(1)安裝。在PHPStudy中停止數(shù)據(jù)庫,將D:phpStudy Extensions 目錄下網(wǎng)站使用的MySQL(如MySQL5.7.26,為MyISM 引擎)目錄改名或移到其他位置;將下載的5.7.30 版解壓,目錄名改為MySQL5.7.26。
(2)數(shù)據(jù)庫初始化。進(jìn)入bin 目錄,執(zhí)行mysqld --in itialize --explicit_defaults_f or_timestamp=true --basedir=”../” datadir=”../data”。
(3)遷移數(shù)據(jù)。將原數(shù)據(jù)庫data 目錄中用戶數(shù)據(jù)庫復(fù)制到該data 目錄中。這種方式,一般對跨小版本的升級沒有問題,若失敗請使用其他備份恢復(fù)方式。
(4)創(chuàng)建配置文件。復(fù)制原數(shù)據(jù)庫的配置文件my.ini,檢查basedir、datadir 的值是否正確,也可以在PHPStudy 中點(diǎn)擊MySQL5.7.26 的配置,設(shè)置默認(rèn),軟件就會(huì)自動(dòng)創(chuàng)建my.ini 文件。
(5)數(shù)據(jù)庫系統(tǒng)設(shè)置。啟動(dòng)數(shù)據(jù)庫:mysqld;連接數(shù)據(jù)庫:mysql -uroot -p,數(shù)據(jù)庫初始化后root 的臨時(shí)密碼保存在data 目錄下的.err日志文件中;連接成功后修改root 用戶密碼,如改為Moyx_269:set password=’Moyx_269’;,退出并停止數(shù)據(jù)庫(mysqladmin shutdown-uroot -p),現(xiàn)在可以使用PHPStudy 控制數(shù)據(jù)庫了。
數(shù)據(jù)庫配置文件修改后,使用mysqld --verbose--help 1>nul 命令可以對配置文件的[mysqld] 部分進(jìn)行語法檢查,若沒有[ERROR]輸出說明語法正確;使用mysql --help --verbose 1>nul 命令可以對配置文件的[client] 部分進(jìn)行語法檢查,若沒有輸出說明語法正確。
1.打開網(wǎng)站中的e/config/config.php 文件,將數(shù)據(jù)庫類型由mysql 改為mysqli,因?yàn)檫@個(gè)版本的PHP 已經(jīng)不再支持該連接方式,如果原來使用的就是mysqli,則不需要修改。
2.打開網(wǎng)站中的e/clas s/connect.php,將如下這一行:
因?yàn)間et_magic_quotes_gpc 函數(shù)已被新版本的PHP移除,系統(tǒng)將用戶提交數(shù)據(jù)的過濾交由程序員完成。此外,帝國CMS 源碼中對用戶提交數(shù)據(jù)已有過濾,因此不需要再修改添加。
在PHPStudy 中,將服務(wù)器切換為Nginx+php-7.4.9-nts,然后啟動(dòng)服務(wù)器,能啟動(dòng)說明配置沒有問題。進(jìn)一步驗(yàn)證服務(wù)是否確實(shí)啟動(dòng),在命令行執(zhí)行netstat-abn,查看nginx 和php-cgi是否正常運(yùn)行,若正??梢钥吹絧hp-cgi.exe 進(jìn)程監(jiān)聽TCP 9000 端口,nginx.exe進(jìn)程監(jiān)聽TCP 80 端口。若沒有看到相應(yīng)的輸出,請按照前述步驟檢查配置是否正確。
當(dāng)然也能通過命令行的方式分別啟動(dòng),只是比較繁瑣(不能通過雙擊方式啟動(dòng)),以下命令均在各自安裝目錄中執(zhí)行。
(1)啟動(dòng)Nginx,start nginx。
(2)啟動(dòng)MySQL,mysqld。
(3)啟動(dòng)PHP,php-cgi-b 127.0.0.1:9000 -c ./php.ini。
若要使用Apache,可以在PHPStudy 中切換,當(dāng)然也可以使用命令啟動(dòng)。
(1)安裝名字為Apache 2.4 服務(wù),httpd -k install-n“Apache2.4”。
(2)啟動(dòng),httpd -w -n“Apache2.4” -k start。
測試網(wǎng)站前后臺(tái)各項(xiàng)功能均正常,升級完成。在PHP網(wǎng)站升級過程中,PHP 錯(cuò)誤報(bào)告級別應(yīng)設(shè)置為E_ALL,目的是輸出PHP 運(yùn)行時(shí)的所有錯(cuò)誤信息,便于修正程序錯(cuò)誤。
一般是根據(jù)頁面報(bào)錯(cuò)信息、Web 服務(wù)器日志等查找錯(cuò)誤原因,同時(shí)也不要忽略檢查PHP、Web 服務(wù)器和數(shù)據(jù)庫的配置。升級完畢投入運(yùn)行前要恢復(fù)PHP 錯(cuò)誤報(bào)告級別,以免帶來安全隱患。