Archive

‘PHP’ 分類過的Archive

如何同時在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 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: ,

WINDOWS安裝PHP在IIS7上運行

2013年8月3日 尚無評論

先前如有PHP的需求,在Windows平台上,多半會採用Xampp或是Appserv,因為架站所需的工具都包含了

Apache + PHP + Mysql,根本不用想太多,而這次剛好和先前不太一樣,因為上頭已經有資料庫了,所以只需要安裝PHP

所以就想直接安裝PHP就好,以前就知PHP可以安裝在IIS上,沒想到,現在安裝是這麼的容易,參考了這篇網誌 在IIS 7 上運行 PHP

看來已經不用再手動去設定太多;首先要先去下載PHP Manager 1.2 for IIS 7 ,這真是這個好工具,少了很多手動設定工作業,

下載安裝後在你的IIS7下就能看到PHP Manager的選項(如下圖)。

然後因為還沒指定PHP,所以我們可以先去 http://windows.php.net/download/   下載PHP for windows 版本,回來後先解開看要放在哪

然後再到下圖這個Register new PHP version,選擇你解開PHP壓縮檔的位置即可。

 

然後,完成了~真的~完成~了!!  在處理常式對應之中也可以看到PHP的對應了

 

而在PHP Manager之中,也可以動態create phpinfo 來看PHP的相關參數值,真的還蠻方便的

不過,當然還是有小小卡關,因為小弟安裝在windows 2008 Server 64bit + IIS 7.5 + PHP-5.5.1

安裝後,會出現Error 500訊息,錯誤碼是0x0000135 模組 FastCgiModule 的問題,上網查,多半說.Net Framework 版本有問題,也有說權限問題

還好後來找到這篇網誌 [技術]PHP service in WIN7 64位元 ERROR : FastCGI 處理序意外地結束-排除方法 ,上個月才有人遇到,真是好文呀!

原來PHP VC11 是要VS2012版本才行,在 http://windows.php.net/download/#php-5.5 提到 VC9 or VC11 (Visual Studio 2008 and 2012 compiler respectively)

哈~其實自己失敗時,就有在想會不會是函式版本不支援而出錯,所以再到Microsoft 下載適用於 Visual Studio 2012 Update 3 的 Visual C++ 可轉散發套件

http://www.microsoft.com/zh-tw/download/details.aspx?id=30679 安裝後即可,當然也可以手動安裝就請參考該位大大的網誌即可

這樣就可以啦~真的覺得還蠻容易的!!

Categories: PHP, 系統設定 Tags: ,

PHP忽略大小寫的字串處理

2013年6月18日 尚無評論

在PHP5 之後,有提供了字串處理時忽略大小寫的函式,蠻不錯用的而且也很好記憶,在此列出常用的幾個函式介紹:

 

strstr($str ,$keyword)  對應的函式就是stristr 

該函式主要是找出$keyword之後的字串(可以將原本要用substr函式才能處理的事簡化)

值得一提,在PHP 5.3.0 之後 strstr函式,增加一個參數  strstr($str ,$keyword [,$before_boolean=false]),如設定為true,則效果反向可以找出$keyword之前的字串

請參考http://php.net/manual/zh/function.stristr.php

 

strpos($str, $keyword [,$offset=0]) 對應的函式就是stripos

主要是回傳$str之中$keyword首次出現的位置

如果是要找最後一次出現的位置可以改用 strrpos 當然對應的函式是strripos

請參考http://www.php.net/manual/zh/function.stripos.php

 

str_replace($searchKeyword , $replace  ,$str) 對應的函式就是str_ireplace

可以將$str之中,全部的$searchKeyword都會換成$replace 

請參考http://php.net/manual/zh/function.str-ireplace.php

 

strcmp($str1  ,$str2) 對應的函式,要注意就不是常用的加上i 而是strcasecmp

可以針對$str1,及$str2 進行字串大小比對,$str1>$str2會回傳正數, 小於會回傳負數,相等會回傳0

請參考http://www.php.net/manual/zh/function.strcmp.php

然而這函式還有其它類似作用的函式 ,都一樣有提供忽略大小寫,如下:

strncmp(可指定比較時使用的最大長度) 對應的是strncasecmp,請參考http://www.php.net/manual/zh/function.strncmp.php

strnatcmp (自然順序的比較)對應的是strnatcasecmp,請參考http://www.php.net/manual/zh/function.strnatcmp.php

 

如果是要在preg_ match 或是preg_ match_all 之中忽略大小寫進行比對呢?

只要在$pattern之中加上i即可,例如 原本preg_match("/HI (.*?) from/",$str,$martchs)  只要改成這樣即可

preg_match("/HI (.*?) from/i",$str,$martchs)

詳細使用請參考 http://www.php.net/manual/zh/function.preg-match.php

Categories: PHP, 程式開發 Tags:
分頁: 1 2 3 4 下一頁