iT邦幫忙

0

PHP 5.4.x vs PHP 5.3.x

php

PHP 5.4.x 沒有向上相容於 PHP 5.3.x
週末, 我編譯了php5.4.8, 想取代php5.3.17, 但是在php5.4.8之下, 有些應用系統出現了空白頁面, 而這些系統在php5.3.17之下完全正常. 由於我是用user space的方式編譯, 我在同一系統下同時跑php5.3.x和php5.4.x, 但還是希望能將程式碼升級.
官方網站上有不相容列表:
http://www.php.net/manual/en/migration54.incompatible.php
這裡也有人整理過: http://www.attackr.com/php-5-4-vs-5-3-difference-what-to-watch-out-for-when-coding-with-new-version/
請問有誰曾經修改php5.3.x的程式碼到php5.4.x? 有參考的修改方法嗎?

看更多先前的討論...收起先前的討論...
wiseguy iT邦超人 1 級 ‧ 2012-11-05 16:41:20 檢舉
將 php.ini 的 display_errors 設為 on,或者用
log_errors = On
error_log = php_errors.log
寫到 log 檔去,這樣才知道那個空白頁發生什麼錯誤。
bizpro iT邦大師 1 級 ‧ 2012-11-05 16:53:40 檢舉
謝謝您的意見, 我知道發生了什麼錯誤. 就是session_register和session_unregister的問題, PHP5.4已經沒有這些了, 不是棄用(deprecate), 而是直接丟棄(discard)了. 我想要知道的是, 有將php5.3的程式碼改為PHP5.4相容程式碼的經驗分享嗎?
wiseguy iT邦超人 1 級 ‧ 2012-11-05 23:29:35 檢舉
老實說,改的地方不多,也都不常用,就直接改為 5.4 寫法就好了,你是想要寫成兩個版本都能 run 嗎?
fillano iT邦超人 1 級 ‧ 2012-11-09 23:38:36 檢舉
如果只是session_register/session_unregister的問題,用sed應該可以一次改完吧?或是用像ultraedit的大量取代也可以。

如果是自己維護的程式,就直接改掉就好了,我覺得應該不太需要考慮相容性。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

6
xinbe
iT邦新手 5 級 ‧ 2012-11-08 15:15:47
最佳解答

之前PHP 5.4還在beta的時候
出於好奇想玩玩看,那時wordpress還只支援5.3版的PHP而已
所以很土砲的去看PHP的errorlog
看看有哪些Fatal error再去看看PHP的documention看看如果是
被移除、修改呼叫方式看看裡面的建議有沒有替代方案
進行修改相關的程式碼

我想這個應該也只有這個方式而已,因為這種移除過於老舊的api
實在是很難找到相容的方式

bizpro iT邦大師 1 級 ‧ 2012-11-08 16:00:51 檢舉

謝謝您的回答. 是的, 似乎是這樣了, 但是畢竟Log是呈現過去的事情, 未出現的bug就要等出問題了. 所以不令人心安: 會不會漏掉了什麼沒改, 在不可知的未來一個很少執行的功能出了問題...
我一般上都是用sed來大量修改, 也許會考慮用IDE的refactoring功能. 但是還是不安...

6
linyumo
iT邦新手 4 級 ‧ 2012-11-06 10:32:53

要不要這樣試試,使用原來的組態檔php5.3.17的php.ini取代php5.4.8的php.ini,看看能不能用,之前這招有效,重新啟動可能會有些警告訊系,但可以先不用理會,看看能不能,如果還有問題,可能要看看log檔缺少哪個模組沒載入,再編譯過將模組載入,這樣應該就可以了,之前有遇過,版本越高,鎖的東西越多,為了效能及安全的考量吧

bizpro iT邦大師 1 級 ‧ 2012-11-06 11:29:48 檢舉

5.3的php.ini有一個地方要off掉, 才能在5.4啟動, 之後的啟動沒問題, 問題在有些應用程式太舊了. 我曾經把跑在5.2的應用系統(別人寫的)移到5.3, 現在想移到5.4, 看來又要測一遍, 很花時間的.

我要發表回答

立即登入回答