參考網址:https://fannys23.pixnet.net/blog/post/48239316
配合 PHP 8 停止支援 __autoload(),改用 sql_autoloaod_register()
配合 PHP 8 停用 each(),改用 foreach()
錯誤訊息:PHP Fatal error: Uncaught Error: Call to undefined function each()
while(list(, $line) = @each($lines)) {
改寫為:
foreach ($lines as $line) {
在 PHP 8 要對 PHPExcel 做的調整:
-
陣列元素不可再使用大括號 {} 操作,需要使用中括號 []
-
錯誤訊息:PHP Fatal error: Array and string offset access syntax with curly braces is no longer supported
-
原本在 PHP 7 的寫法為:
$str = array(1, 2, 3);
$test = $str{0};
改寫為:
$str = array(1, 2, 3);
$test = $str[0];
-
在 DefaultValueBinder.php 出現 "Trying to access array offset on value of type int",依照 stackoverflow 的上的討論,我將第 86 行由:
} elseif ($pValue[0] === '=' && strlen($pValue) > 1) {
改為:
} elseif (0 === strpos($pValue, '=') && strlen($pValue) > 1) {
https://forum.gamer.com.tw/C.php?bsn=60292&snA=8686
解決count()的錯誤
原本在PHP7能運行的count()程式段,在PHP8會報error
Exception: count(): Argument #1 ($value) must be of type Countable|array, null given
報錯原因
因為count()在PHP8需要是array或是countable,否則會報TypeError
在PHP7時期只會跳warning
https://www.php.net/manual/en/function.count.php
解決方案
第一種:先作宣告
於第425行後加上以下兩條
$new_Timestamp = [];
$new_TimestampTitle = [];
第二種:加上is_countable()
將434的if(count($new_TimestampTitle)>0){
改為if (is_countable($new_TimestampTitle) && count($new_TimestampTitle) > 0) {
調整sport/ns到php8.1.2(ubuntu 22.04預設php版本)
adodb升級至v5.22.7
include/config.php 修正
//Smarty 偵錯
define('DEBUG' , 'false') ;
比較麻煩的是這個錯誤
Fatal error: Uncaught Error: Undefined constant "play_group_level_id" in /var/www/html/ns/sum/sum_item.php:20 Stack trace: #0 {main} thrown in /var/www/html/ns/sum/sum_item.php on line 20
陣列的索引值如果是文字則必需有''包住,之前的版本只是會提出警告,php8直接給Fatal error
例如:$sys_conf[play_place] 必需改為$sys_conf['play_place']
用sublime text正則表示式找陣列,以「$」開頭,以「[」結束的字串
\$(\w+)\[
\w matches any word character (equivalent to [a-zA-Z0-9_])
\$(\w+)\[(\w+)]