PHP8適應

出自跨校選修
於 2025年12月23日 (二) 16:15 由 丁志仁討論 | 貢獻 所做的修訂 →‎網路檔案櫃
跳至導覽 跳至搜尋

jendo::Php7適應 在 wiki1231 的 分類:Etable 中

DSM

自 DSM 7.3 起停用 PHP 8.0(含 8.0) 以前的 PHP 套件

「Web Station / 指令碼語言設定 / PHP / 使用者定義 Default Profile PHP 8.1 / 編輯 / 擴充模組」

  • 核取:
    1. curl,網路 / API,主動對外發送 HTTP / HTTPS / FTP 等請求(抓 API、下載檔案)
      常見情境:呼叫 REST API(LINE、reCAPTCHA、Google、政府資料);下載遠端檔案、抓網頁內容
    2. gd,影像處理函式庫(生成、裁切、縮放、加浮水印、畫文字)
      常見情境:圖片加字,如:drawword.php;上傳圖片後自動縮圖;產生驗證碼
    3. iconv,編碼 / 國際化,字元編碼轉換(如 UTF-8 ↔ Big5)
      常見情境:相容於舊系統、CSV、政府資料;PHP 8.x 處理歷史 Big5 資料
    4. intl,編碼 / 國際化,處理語系、日期、數字、排序規則
      常見情境:多語系網站;正確顯示各國日期格式;Unicode 排序(比 sort() 正確)
    5. mysqli,資料庫,與 MySQL / MariaDB 溝通
      常見情境:資料庫操作;支援 prepared statement(防 SQL injection)
    6. openssl,加密、解密、憑證、HTTPS、金鑰處理
      常見情境:HTTPS 憑證;JWT / OAuth;加密資料(AES、RSA)
    7. pdo_mysql,資料庫,PDO(PHP Data Objects) 是一種 PHP 的資料庫抽象層 (Database Abstraction Layer),它提供了一個統一、一致的介面,讓 PHP 程式可以無縫地連接和操作不同的資料庫(如 MySQL, PostgreSQL, SQLite, SQL Server 等),而不需要針對特定資料庫寫不同的程式碼,核心價值是簡化多資料庫切換、提升程式的可攜性和可維護性。
      常見情境:寫「可換資料庫」的程式;Laravel / 現代 PHP 框架;應該與 mysqli 擇一使用
    8. zlib,壓縮,gzip、deflate
      常見情境:HTTP gzip 壓縮;壓縮檔處理;效能與頻寬優化
  • 待核取
    1. bcmath,計算,高精度數學運算(避免浮點誤差)
    2. exif,影像,讀取圖片中的 EXIF 中繼資料
      常見情境:照片拍攝時間;手機拍照方向;GPS 資訊
    3. ftp,網路 / API,FTP 協定上傳、下載、管理檔案
      常見情境:舊系統;NAS ↔ 主機檔案同步(非加密);漸被 SSH/SFTP 取代
    4. posix,系統,存取 Unix / Linux 系統層級資訊
      常見情境:取得使用者 UID / GID;CLI 工具、NAS 腳本;權限判斷
    5. sockets,網路 / API,底層網路通訊(TCP / UDP socket)
      常見情境:即時通訊;自訂通訊協定;伺服器間低階連線
    6. ssh2,網路 / API,透過 SSH 連線遠端主機(含 SFTP)
      常見情境:NAS 遠端部署;用 PHP 操作其他主機;安全檔案傳輸(取代 FTP)
    7. xls,文件,讀寫 Excel(.xls)檔案的擴充或外掛
      常見情境:匯入 / 匯出 Excel;舊版 Excel 檔案;⚠️ 多半會改用 PhpSpreadsheet 套件。
    8. zip,壓縮,建立與解壓縮 ZIP 檔案
      常見情境:批次下載;備份資料;上傳後自動解壓

PHP8

套件名:PHP8.1

套件安裝後,主程式有三組路徑:

  • 實體位置(實際存放路徑):/volume1/@appstore/PHP8.1/usr/local/bin/php81
    解說:/分割名/@appstore/套件名/腳本用名
  • 管理入口,DSM 管理套件框架的標準路徑:
    1. /var/packages/<套件名>/scripts 資料夾,用於啟停、升級腳本
    2. /var/packages/<套件名>/etc -> /volume1/@appconf/PHP8.1 資料夾,用於設定套件自己的狀態
    3. /var/packages/<套件名>/conf 資料夾,用於套件對外服務、可被其他系統引用的設定
    4. /var/packages/<套件名>/target -> /volume1/@appstore/PHP8.1 指向真正安裝位置的捷徑
    5. /var/packages/<套件名>/home -> /volume1/@apphome/PHP8.1
    6. /var/packages/<套件名>/share -> /volume1/@appshare/PHP8.1
    7. /var/packages/<套件名>/tmp -> /volume1/@apptemp/PHP8.1
    8. /var/packages/<套件名>/var -> /volume1/@appdata/PHP8.1
    9. /var/packages/<套件名>/INFO 檔案,「這是什麼套件」的靜態身分證,DSM 會用其中的資訊來:在套件中心顯示名稱 / 版本;判斷是否能啟動;判斷 CPU 架構是否相容…
    10. /var/packages/<套件名>/enabled 檔案,「目前是否啟用」的即時狀態旗標,表現「這個套件現在是不是開著?」,通常只是空檔案(或極小),存在 = 套件被啟用 / 不存在 = 套件被停用
  • 使用入口,使用者腳本用名:
    /usr/local/bin/php81 -> /var/packages/PHP8.1/target/usr/local/bin/php81 皆指向主程式
    /usr/local/bin 之下放所有已安裝套件(含 PHP8.1 的已安裝套件)的執行捷徑
    /usr/local/bin 通常在 PATH 中

PHP8.1 各擴充套件實際存放在 /volume1/@appstore/PHP8.1/usr/local/lib/php81/modules 之下的各 *.so
/volume1/@appstore/PHP8.1/usr/lib 則放各擴充套件的執行捷徑

福留子孫

調外掛

  1. 修復 LinkedImages 外掛
    • 調整 LocalSettings.php 內容
    • 讓 images 中的圖檔瀏覽器可讀:DSM / File Station / images 資料夾 / 右鍵選單 / 內容 / 權限標籤 / 新增 http 群組 / 給全部讀取權限 / 套用到這個資料夾、子資料夾、檔案 / 儲存
    • 重整頁「跳至頁首」

interwiki資料表

iw_prefix 欄,大寫改小寫


網路檔案櫃

  1. GfUploadFiles.php 的 if(($_SESSION['login_user']==$fileOwn['user']) => if(($_SESSION['login_user']===($fileOwn['user']??null))
  2. /uploadFiles/index.php 待全面部署,已修改以下部分:
    • $_SESSION['checkin']==1 =>($_SESSION['checkin']??)==1
    • $_REQUEST['act']=='uploadYTVedioForm' => ($_REQUEST['act']??)=='uploadYTVedioForm'
    • $_REQUEST['act']=='addDirForm' => ($_REQUEST['act']??)=='addDirForm'
    • $_REQUEST['sessionDestroy']!=1 => ($_REQUEST['sessionDestroy']??)!=1