[php]升級到PHP8之後的調整

參考網址: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 做的調整:

  1. 陣列元素不可再使用大括號 {} 操作,需要使用中括號 []

     

     

     

     

     

     

     

    • 錯誤訊息: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];
       
  2. 在 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+)] 

 

 

 

本篇發表於 Linux系統, 程式設計。將永久鏈結加入書籤。