:::
校園網站輕鬆架一般討論區

模組與佈景在php 7.1下的陣列宣告問題

discuss pic 2017-06-16 19:34:21
我在自己的Mac上安裝XAMPP(最新版本,詳細資訊放在最後),架了一個xoops準備用模組產生器來開發模組。
發現如果使用非系統預設以外的佈景,進入首頁就出現「A problem has occurred on our server!」的錯誤畫面,錯誤訊息為:Error: Cannot use string offset as an array
打開站長工具箱,打開php除錯後,發現以下的錯誤訊息:
錯誤: Error: Cannot use string offset as an array 在檔案中的第 /Users/caleb/web/xmm/xoops_data/caches/smarty_compile/509c19f9-system-infoway-default^%%DF^DF8^DF88FB65%%get_var.tpl.php 列 361

這個問題不只有出現在前臺,
在後台,即便使用系統預設佈景,使用「站長工具箱」或「Tad Tools 工具包」的部分功能,也都會出類似上面的錯誤畫面與訊息,如:
Tad Tools 工具包->初始設定
錯誤: Error: Cannot use string offset as an array 在檔案中的第 /modules/tadtools/admin/main.php 列 33
站長工具箱--> 模組隨選
錯誤: Error: Cannot use string offset as an array 在檔案中的第 /modules/tad_adm/admin/adm_function.php 列 26
站長工具箱--> 清理垃圾帳戶
錯誤: Error: Cannot use string offset as an array 在檔案中的第 /modules/tad_adm/admin/spam.php 列 89

若使用tad上的佈景,進入「佈景管理」->主管理介面,出現
錯誤: Error: Cannot use string offset as an array 在檔案中的第 /modules/tadtools/TadUpFiles.php 列 1359
「佈景管理」->選單設定則不會有這個問題。

目前我找到的文題癥結如下:

網路上爬文,發現應該是因為使用陣列前沒有先宣告的問題,我猜有可能是因為php 7.1的關係。我其他的xoops放在hosting上面則完全沒有這個問題,hosting的php版本是7.0。
我去查看出現問題的部分的原始碼,發現老師使用陣列之前,會先宣告,但是宣告樣式為字串陣列,如:$values = "";
若將出問題的部分改為:$values = array();
就可以正常顯示。(目前我已經將佈景管理模組改好,可以正常運作。
我猜,佈景主題裡面也有用到類似的設定,以至於在smrty產生的快取檔案中也會出現這樣的問題。
目前解決的辦法,除了將程式內有問題的部分修正外(我想這是未來一定要做的),
不知道老師有沒有什麼建議的解決方向?有沒有可能在php.ini的設定檔中去調整就可以了呢?還是我得要把php將回7.0?

環境訊息:
Mac OS 10.12.5
XAMPP for Mac 7.1.4
PHP Version 7.1.4
MySQL版本: 5.5.5-10.1.22-MariaDB
XOOPS 2.5.8
站長工具箱 2.59 release
Tad Tools 工具包 3.08 Final
佈景管理 4.2 release
discuss pic 2017-06-16 19:48:27
再提供一下目前找到的問題,
佈景主題會出問題是在  tadtools/theme_common/get_var.tpl
這個檔案內有第357行有個
$positions='';
將之改為 $positions=array(); 之後,套用所有的佈景主題都可以正常了。
discuss pic 2017-06-16 21:08:24
這樣改是對的...
但...應該會有超多地方要改的...
光想我就頭皮發麻...
discuss pic 2017-06-17 05:11:57
看起來這是php 7.1的改變,為了是要讓變數的使用更嚴謹,
短期的做法,是找找看php.ini的設定項目能不能先改著用,
但是長期看來還是得要改的。
目前只能遇到一個改一個了。以我目前所遇到的,感覺上應該還好,不算很多。
看起來主要的問題是在於把陣列變數宣告成字串變數才會出現這個問題。
不然就得要看看有沒有辦法用正規表示的方式進行檔案搜尋,一筆一筆找出要改的地方來。

我需不需要把我已經找到的地方標出來給你參考呢?(利如:檔案名稱,行數...)
discuss pic 2017-06-19 20:18:40
如果有紀錄給我,那當然是最好阿...XD
discuss pic 2017-06-23 14:51:02
目前對於最核心與最常用的模組找到需要修改的地方如下:
tadtools:
/modules/tadtools/TadUpFiles.php 列 601 $all_files_sn
/modules/tadtools/TadUpFiles.php 列 1231 $files 
/modules/tadtools/TadUpFiles.php 列 1348  $files

tad_adm:
/modules/tad_adm/admin/phpini.php Line 38  $main
/modules/tad_adm/admin/spam.php Line 35 $all_data

tad_themes:
/modules/tad_themes/admin/main.php 列 1026  $values

tadnews:
/modules/tadnews/class/tadnews.php 列 544 $ncsn_ok
/modules/tadnews/class/tadnews.php 列 711 $all_news
/modules/tadnews/class/tadnews.php 列 1666 $nsnsort

另外發現,tadnews 3.93 發布文章時發現「發布文章種類」無法出現選項
不知道這個問題是否與php 7.1.4的版本有關。

discuss pic 2017-06-23 16:03:30
太感謝啦~
discuss pic 2017-06-25 10:18:37
發布文章種類」無法出現應該是jquery的問題
不過實際上還是要看過才知道。
discuss pic 2017-07-01 17:12:11
最近另外發現兩個地方:

tadnews:
/modules/tadnews/ajax.php 列 68 $show_col
/modules/tadnews/class/tadnews.php 列 1109 $subnews

:::

計數器

今天: 403403403
昨天: 1810181018101810
總計: 1292757129275712927571292757129275712927571292757