2011-06-07

惱人的osTube 2.6…PHP 5.3

本日,來給它檢查官方的php53修正檔中,倒底是修了什麼…


注意:由於官方給的修正檔只針對付費版,也就是說,如果我們以免費版強上修正檔的話,不免會有錯。
http://wayneifo.blogspot.com/2010/10/ostube-26-ubuntu-1004php53.html說的一樣,如果付上class.banner的話,網頁會掛點…
(迷:但搞不好可以從這一些檔案挖一些付費版的功能,但,這是違法的…要注意)
1)signup.php(位置在osTube的根目錄下)
a)session_register() => $_SESSION()
大約在101行,有一個「session_register("ostube_friend");」
session_register()---此function在v5.3.0已被移除,詳細請看PHP manual-(session_register)
修正:『$_SESSION("ostube_friend");
2)header.php(位置在osTube/admin/)
a)session_register() => $_SESSION()
大約在17行,有一個「session_register("ostube_user", "ostube_pass", "ostube_language");」
修正:『$_SESSION("ostube_user");   $_SESSION("ostube_pass");  $_SESSION("ostube_language");』
b)set_magic_quotes_runtime(0) => ini_set('magic_quotes_runtime', 0)
大約在51行,有一個「set_magic_quotes_runtime(0);」
set_magic_quotes_runtime()---此function在v5.3.0被移除,詳細請看PHP manual-(set_magic_quotes_runtime)
修正:『ini_set('magic_quotes_runtime', 0);』
不過,官方修正檔是直接把這51行直接給註解掉…沒用ini_set()…
3)tags.php(位置在osTube/admin/moduls/)
a)session_register() => $_SESSION()
大約在13行,「session_register("ostube_admin_tags_mark");」
大約在14行,「session_register("ostube_admin_tags_search");」
修正:
『$_SESSION("ostube_admin_tags_mark");』
『$_SESSION("ostube_admin_tags_search");』
4)header.php(位置在osTube/includes/)
a)session_register() => $_SESSION()
大約在37行,「session_register("ostube_user", "ostube_pass", "ostube_language");」
修正:
$_SESSION("ostube_user");
$_SESSION("ostube_pass");
$_SESSION("ostube_language");
b)set_magic_quotes_runtime(0) => ini_set('magic_quotes_runtime', 0)
大約在69行,「set_magic_quotes_runtime(0);」
修正:『ini_set('magic_quotes_runtime', 0);』
不過,官方修正檔是直接把69行給註解起來,沒有使用ini_set()
c)??
??的意思,代表不是PHP 5.3不支援…
在約172行,原檔這一行是註解起來的,是「//    'index' => array('index.php', array())」(註:原檔這一行沒用分號(;)做結尾
但官方修正檔把這一行的註解給拿掉,等於是啟用它。
修改:『 'index' => array('index.php', array())』(註:官方修正檔仍沒有用分號(;)做結尾)
5)class.database.php(位置在osTube/includes/)
a)??
一樣,還是有鬼怪的地方。
約在282、283行,在原檔的時候,它已經是把eregi()給註解起來不用,改用preg_match()了…
不過,官方修正檔有再修正原先的preg_match()的rule…
原檔:「if(!preg_match("^select",$sql)) return false;」
修正:『if(!preg_match("/^select/i",$sql)) return false;』
eregi()---此function在v5.3.0已被移除,詳細請看PHP manual-(eregi)
6)class.login.php(位置在osTube/includes/)
a)session_register() => $_SESSION()
約在98行,「session_register("ostube_next");」
修正:『$_SESSION("ostube_next");』
b)session_unregister() => unset($_SESSION())
約213、214行
原檔的時候,是連用「session_unregister("ostube_next"); unset($_SESSION("ostube_next");」
修正:把『session_unregister("ostube_next");』給註解起來,僅留下『unset($_SESSION("ostube_next");』
約232、233行
修正:把『session_unregister("ostube_user");』給註解起來,僅留下『unset($_SESSION("ostube_user");』
約237、238行
修正:把『session_unregister("ostube_pass");』給註解起來,僅留下『unset($_SESSION("ostube_pass");』
7)class.mail.php(位置在osTube/includes/)
a) passing by reference
約65、69、72、78行…你會看到call by reference的方式在new Swift_Message()…也就是在new前多加了「&」。
據PHP manual-(Passing by reference)說…這樣的方式在v5.3.0就不建議且不支援使用(其怪,php不是可以oo嗎,因為oo不使用??)
修正:反正在這四行的地方,你在new前面有看到「&」的都刪掉
---
所以,以這七個檔案可以推出…
session_register、session_unregister、set_magic_quotes_runtime、passing by reference的都要修正…

沒有留言: