PHP

Debian 9 執行 apt update 出現 GPG error 錯誤的解決方法

今天檢查更新的時候,出現了以下錯誤:

GPG error: https://packages.sury.org/php stretch InRelease: The following signatures were invalid...
E: The repository 'https://packages.sury.org/php stretch InRelease' is not signed.
...

 

問題發生原因在於 DPA 有新的 signing key 了,所以只要更新就可以了

  1. 先移除舊的
    sudo rm /etc/apt/trusted.gpg.d/php.gpg
  2. 接著下載新的
    sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg

這時候再執行 suto apt update 就可以正常更新了

 

[PHP] Autoloading Standard - PSR-0 VS PSR-4

PSR-0

  1. 完整的命名空間 fully-qualified namespace 與 類別 class 必須符合以下結構:
    \<vendor name>\(<namespace\>)*<class name>
  2. 每個命名空間 namespace 必須包含一個 頂級 top-level 的 namespace (vendor name)
  3. 每個命名空間 namecspace 可以擁有任意數量的 子命名空間 sub-namcespaces
  4. 載入檔案時,每個命名空間的分隔符號 separator 必須轉化成 目錄分隔符號
  5. 每個在類別名稱中的下畫線符號 "_" 都要轉化為 目錄分隔符號。該符號在命名空間裡沒有任何特別的用處。

[PHP] trait | interface | abstract 比較

interface abstract trait
  1. 規範子類/子介面一定要具備某些東西,包含變數與function
  2. 可以被多重 繼承(extends),子介面會擁有父母們的所有規範。但父母們之間的function不能重名。
  3. interface裡只能有public function,且都是空的。
  4. 可以有 constant ,但不能被override
  5. implement 的時候,必須 override所有的fucntion

[PHP] 如何利用手動安裝版本的PHP使用 pear 及 pecl

偶爾就會用到,寫一下筆記

[pear]

pear比較簡單,直接用該版本php目錄中的執行檔即可,假設是目錄是/opt/php7,一般來說執行檔都放在在/opt/php7/bin,所以可以這樣
指令範例如下:

  1. 看pear的設定檔資料
    /opt/php7/bin/pear config-show
  2. 安裝某個module
    /opt/php7/bin/pear install xxx/xxx

[pecl]

pecl 則得要指定設定檔(pear.conf),但並沒有限制一定要使用該版本中的執行檔,指令範例如下:

  1. 安裝模組
    pecl -C /opt/php7/etc/pear.conf install memcache