如何同時在Apache運行多版本的php(在windows上)

2021年1月23日 尚無評論

本次升級最大的動作之一就是把先前一直想要升級PHP的念想給實現了,因為目前這台是PHP5,而且上面還有其它服務在運行不方便直接升級

所以就只好在同一個apahce實作同時間運行多版本的PHP了

一開始看了一些文件,原本是想用最單純的方式 VirtualHost 再搭配使用不同版本的PHP engine ,看似可以,網路上好像也有蠻多人有類似這樣的說法

但實測結果,這是不可行的,至少在windows 環境下是不可行的,因為會遇到 這個警訊「Only first PHPINIDir directive honored per configuration tree – subsequent ones ignored」

因為php.ini 的路徑只能設定一個,就算在VirtualHost 裡設定也不行,只要出現兩次也會報錯,但因為php5 和php7差異太大,如果是同php5.5 or php5.6,那採用同一個 php.ini或許還是可行,但看來這方向就要調整才行。

後來改採 Apache FastCGI ASF module的整合方式,利用執行CGI的方式執行PHP來達到運行多版本,廢話不多說,直接說我的作法:

  1. 到此連結 https://www.apachelounge.com/download/VC15/  下載mod_fcgid ,要注意你的VC版本,不合就自己換。
  2. 解開後mod_fcgid 後放到apahce modules目錄
  3. 修改apahce conf/httpd.conf加上

    • LoadModule fcgid_module modules/mod_fcgid.so
    • 解開 Include conf/extra/httpd-default.conf  
    • 如果 Include conf/extra/httpd-vhosts.conf 沒解開也一定要解開才行
  4. 修改conf/extra/httpd-default.conf 加上以下片斷在最下方

    FcgidInitialEnv PATH "c:/php-5/;C:/WINDOWS/system32;C:/WINDOWS;C:/WINDOWS/System32/Wbem;"
    FcgidInitialEnv SystemRoot "C:/Windows"
    FcgidInitialEnv SystemDrive "C:"
    FcgidInitialEnv TEMP "C:/WINDOWS/Temp"
    FcgidInitialEnv TMP "C:/WINDOWS/Temp"
    FcgidInitialEnv windir "C:/WINDOWS"
    FcgidIOTimeout 64
    FcgidConnectTimeout 16
    FcgidMaxRequestsPerProcess 1000
    FcgidMaxProcesses 50
    FcgidMaxRequestLen 8131072
    # Location of php.ini
    FcgidInitialEnv PHPRC "c:/php-5/"
    FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 1000
    <Files ~ "\.php$">
      AddHandler fcgid-script .php
      FcgidWrapper "c:/php-5/php-cgi.exe" .php
      Options +ExecCGI
    </Files>
    
  5. 修改你的conf/extra/httpd-vhosts.conf 在你準備要用PHP7的domain Virtual Host之中加上以下設定 

    FcgidInitialEnv PHPRC "c:/php-7"
    <Files ~ "\.php$">
    	php_flag engine off
    	AddHandler fcgid-script .php
    	FcgidWrapper "c:/php-7/php-cgi.exe" .php
    </Files>
    
    
  6. 再重啟Apache,就完成啦,實測一下兩個不同的domain 就分別顯示不同的版本

目前大多人的寫法都是把多版本PHP運行都利用mod_fcgid搭配VirtualHost 來實現,但我這裡的作法就是和別人不一樣,原本的PHP作法我都不動,我是直接在想要的VirtualHost  domain  加上mod_fcgid 來實現運行指定的PHP版本 ,我發現這樣用之後Include conf/extra/httpd-default.conf   這個不使用 也不用加也不會有任何影響

另外,原本在測試使用基本方式達到運行多版本的PHP,卡在php.ini 設定上,我有發現有文章提及不設定php.ini DIR Path,改指向使用php 程式路徑中的ini,利用windows PATH參數指定搜尋的路徑,可能是一條可行的路,不過我都試成功了就不再多花時間去TRY了,提供以下連結,讓有興趣的人可以去試試看(不過文章有點舊請要有心理準備)

Windows環境讓PHP4與PHP5共存,使用Apache

Categories: PHP Tags: ,

如何排除PHP Fatal error: Uncaught Error: Call to undefined function split()

2021年1月22日 尚無評論

在更換wordPress改使用php7後,在前端及後端編輯器時又發生問題啦,又要debug 了,查了一下出現了「 Fatal error: Uncaught Error: Call to undefined function split() 」錯誤

查了一下,原來是php7 已停用 split(),所以就報錯啦,而這問題出錯在我安裝的sociable外掛上,最新版都無法排除看來這套件也很久沒再更新了,先排除此問題之後再來看看是否要更換此外掛

找了一下資料,目前可以使用 preg_split() 或 explode() 來替代split() 

if (count(explode("Counter",$sitename))>1){
//if (count(split("Counter",$sitename))>1){

	$link.= $href;

}else{

$link .= '<a title="'.$sitename.'" class="'.$sociable_options['icon_option'].'_'.$sociable_options['icon_size'].'" style="'.$style.'" rel="nofollow" ' . $target . ' href="' . $href . '">' . "" . '</a></li>' ;

}

 

照著上面這樣改,就可以啦。

 

參考資料:

How to fix the error with split() in php?

Categories: PHP, 部落格更改誌 Tags: ,

更新wordPress後的異常排除

2021年1月22日 尚無評論

雖然可以自動更新wordPress至最新版,從前端查看blog時看起來都正常

不過一到後端在要編輯新文章時,就出現白色視窗 什麼都沒有出現

通常這時候可以按下F12 進行查看,或是直接開wordPress的Debug Mode(前篇有介紹),就可以追查啦,如下圖

看來真是慘呀,一些看起來可以正常的功能,其實也是慘到不行

這些問題,多半就是外掛造成的,所以在更新前,官方建議先關掉所有的外掛,呵 我就是沒走正路,所以如想要知道是不是這樣的問題,最快的方式就是直接將外掛所有都停用,變成很乾淨的wordPress,此時應該這些錯誤就不會出現啦,除非你的佈景主題使用的太特別 不然應該都是可解的。

如果可解,就要來看看是哪個外掛造成的,這時多半先要確認所有外掛都是最新版,因為你wordPress都升級了,外掛有些為了要配合也會要升級的,如升級外掛後問題都還是在,那就要一個一個來拆除看看,像我就是使用了Picasa的套件造成這問題,Picasa都陣亡那麼久了,我套件還一直掛著 ~看來真的太久沒有用了

Categories: 部落格更改誌 Tags:

如何排除WordPress Fatal error: ‘break’ not in the ‘loop’ or ‘switch’ context

2021年1月20日 尚無評論

這次除了升級wordPress,也一併從php5版 升級php7,所以同時間做這麼多調整,就等於拿石頭砸自己的腳 哈 哈

好吧都砸腳了,當然還是要搞好才行,在升上去php7後,原本可以用的wordPress ,忽然在一些功能上變成不能執行了,只好再追查下去

首先,將debug mode打開一看,才能找到問題點(如下圖),看來是套件衝突到了

查了一下,php 7.0以上版本,不允許 break 在  for 或 foreach 、switch 之外的地方出現,所以報出錯誤,排除的方式很簡單

就是去找到該路徑的程式,都有行數了,找了一下該行數,多半這錯誤的行數,是可以直接註解掉 無意義的程式,就大膽的註解掉吧

再重新運行後就可以正常了。

Categories: PHP, 部落格更改誌 Tags: ,

如何開啟WordPress的偵錯功能 (Debug模式)

2021年1月20日 尚無評論

升級WordPress遇到麻煩了,執行後空白一片的網頁  要如何排除問題呢

首先只要找到你的設定檔 wp-config.php,啟動debug mode即可,把false 改成 true就可以啦

改完後一執行,就會看到一堆提醒及警訊出來,通常問題是在最下方 找一下Fatal error 就可以看到啦

記得,查完後要關起來呀,不然前端一樣會看到一堆醜醜的訊息 

Categories: 部落格更改誌 Tags:
分頁: 1 2 3 4 5 6 7 8 9 10 ... 86 87 88 下一頁