PHP Namespace 錯誤 Warning call_user_func_array() expects parameter 1 to be a valid callback

使用 __NAMESPACE__  取得當前文件的 Namespace

呼叫 Namespace 裡的 function

/**
* https://vector.cool
*/
Namespace VECTOR\COOL;

function test() {
    echo "Hello world!\n";
}

call_user_func(__NAMESPACE__ .'\test');

呼叫 Namespace 裡的 class 中的 function

/**
* https://vector.cool
*/
Namespace VECTOR\COOL;

class Hello {
    static public function test() {
        echo "Hello world!\n";
    }
}

call_user_func(__NAMESPACE__ .'\Hello::test'); // String
call_user_func(array(__NAMESPACE__ .'\Hello', 'test')); // Array

在 WordPress Action 中呼叫

/**
* https://vector.cool
*/
Namespace V123\PLUGIN\CFU;
add_action('init',__NAMESPACE__.'\create_initial_admin_menu');

參考資料:

http://php.net/manual/en/language.namespaces.nsconstants.php
https://stackoverflow.com/questions/14682356/relative-namespaces-and-call-user-func[……]

閱讀更多

PHP php.ini 在哪裡?

開發PHP時,難免要修改PHP.ini,問題來了,PHP.ini在哪裡,我們可以透過一個簡單的方式找到 PHP.ini 的檔案路徑

建立一個PHP檔案,裡面就寫一行 phpinfo(),運行這個檔案,它會列出所有PHP相關資訊

<?php
phpinfo();

PHP.ini 就在下方紅框處,這是Windows上的PHP,Linux上的PHP一樣可以這麼用[……]

閱讀更多

PHP print_r() 轉成字串或變數

PHP開發者應該對 print_r()  不陌生,可以直接在瀏覽器中吐出Array中的結構,在Debug時邦很大的忙,但有一種情境是 SERVER 端被動接收 API 的回傳值,可能是一個POST,但我想了解這API回傳的值是否正確,於是寫了一個Log檔去紀錄,但Array直接寫入Log,會把Array強制轉型成字串,變成 “Array” 字串,還是無法知道Array裡面傳了什麼值,print_r()其實還有第二個參數,設定第二個參數,可以把Array 輸出的文字轉成字串,這樣我們就可以很容易地在Log中清楚地看見POST回傳值了。

範例:

 
$var = print_r($arr, true);

寫在Log忠誠這樣:

 
[2018-03-11 18:34:06]tset
[2018-03-11 18:48:39]Array
(
    [CustomField1] => 
    [CustomField2] => 
    [CustomField3] => 
    [CustomField4] => 
    [MerchantID] => 2000132
    [MerchantTradeNo] => 1520765300
    [PaymentDate] => 2018/03/11 18:48:38
    [PaymentType] => WebATM_BOT
    [PaymentTypeChargeFee] => 5
    [RtnCode] => 1
    [RtnMsg] => 交易成功
    [SimulatePaid] => 0
    [StoreID] => 
    [TradeAmt] => 2000
    [TradeDate] => 2018/03/11 18:48:19
    [TradeNo] => 1803111848192948
    [CheckMacValue] => AF663A711138967263DD625549D84BF684343BEC7527A2E76759133FF93F6A87
)

 

 [……]

閱讀更多

Fix Curl Error: SSL certificate problem: unable to get local issuer certificate

最近正在安裝 WHMCS localhost 開發環境,程式安裝成功,但許可證一直無法通過,在原廠協助下,來來回回終於找到錯誤原因,就是 Curl 有錯誤,錯誤訊息:

Curl Error: SSL certificate problem: unable to get local issuer certificate

Fix Curl Error: SSL certificate problem: unable to get local issuer certificate

Curl在 WHMCS 中是很重要的,很多API的介接都需要靠它,我已經成功修復錯誤,以下分享修正方法。

修正 unable to get local issuer certificate 錯誤

Step 1. 下載CA憑證

到這個網址下載憑證: Download the certificate bundle.

Download the certificate bundle.

點紅框處下載,檔名為 cacert.pem

Step 2. 複製檔案到PHP安裝目錄中

雖然可以放在任意位置,單純是因為好找,所以我把它放在PHP安裝目錄中:

C:\php-7\extras\ssl\cacert.pem

Step 3. 確認PHP.ini啟用 mod_ssl 模組

找到 PHP.ini  檔打開它並查找 php_openssl.dll

如果它前面有分號,代表沒有開啟,請將分號移除

;extension=php_openssl.dll

如果 PHP.ini  中沒有查找到 php_openssl.dll  請於空白處,自行加入下方這一行

extension=php_openssl.dll

Step 4. 設定cacert.pem

繼續在 PHP.ini  中查找 curl.cainfo  及 openssl.cafile  這兩行

填入 Step 2 的 cacert.pem  檔案之絕對路徑,和上一個步驟一樣,前方有分號請移除分號,如果找不到這兩行請自行添加

特別注意:目錄斜線跟 Windows 檔案總管的斜線相反,要用左斜線

curl.cainfo="C:/php-7/extras/ssl/cacert.pem"
openssl.cafile="C:/php-7/extras/ssl/cacert.pem"

Step 5. 重新啟動服務器

重啟後,重新測試

Fix Curl Error: SSL certificate problem: unable to get local issuer certificate

參考:[……]

閱讀更多

解決 Fatal error: Call to undefined function exif_read_data()

上傳圖片遇到下面問題:

Fatal error: Call to undefined function exif_read_data()

支援版本

官方文件 PHP4 以上就支援此 exif_read_data()

如果已符合版本需求還是會出現此錯誤,可以試試看下面的解決方法。

解決方法:

  1. 找到你的 PHP.ini 文件
  2. 找到下面這一行
    ;extension=php_exif.dll
  3. 把前方的分號移除,如果找不到這行,可以直接複製下列文字,貼於 PHP.ini 裡
    extension=php_exif.dll
  4. 重新啟動Apache

[……]

閱讀更多

檔案文件 big5 轉 Utf-8 解決亂碼問題

網頁文件中的文字雖然看起來都一樣,但編碼不同可能會造成亂碼問題

假設我在head宣告文件為UTF-8,但網頁文件卻是big5編碼,可能會造成亂碼問題,網頁設計多少都會遇到過這種狀況,這時需要將文件轉換至正確的文件編碼。

使用Notepad++檔案編碼互轉

Notepad++是有名的免費軟體 (繁體中文)

 

以Notepad++開啟文件


上圖紅框處為目前文件編碼


上方工具列:編碼 > 轉換至 UTF-8 碼格式 ( 檔首無BOM )

“檔首無BOM”,BOM是在檔案開始會有幾個隱藏字元,
如果不確定BOM功能,建議選擇”檔首無BOM”的 UTF-8


紅框處確認轉換後編碼,在按下:檔案 > 儲存檔案

顯示正常囉囉!!

網頁造成亂碼的原因很多,有可能是文件,也有可能是資料庫,這只是一種解決方案,慢慢累積經驗囉

[……]

閱讀更多

MariaDB vs MySQL versions 版本兼容性比較表

版本兼容性比較表 Replication Compatibility

MySQL 移植 MariaDB 相容性可參考下表

Slave↓ Master→
MariaDB-5.5
MariaDB-10.0
MariaDB-10.1
MariaDB-10.2
MySQL-5.6
MySQL-5.7
MySQL-8.0

MariaDB-5.5
Ok
No
No
No
No
No
No

MariaDB-10.0
Ok
Ok

Ok

MariaDB-10.1
Ok
Ok
Ok

Ok

MariaDB-10.2
Ok
Ok
Ok
Ok
Ok
Ok

MySQL-5.6

X
X
X

MySQL-5.7

X
X
X

MySQL-8.0

X
X
X

MariaDB versus MySQL – Compatibility

[……]

閱讀更多

PHP 比較版本、檢查版本 – 適用字串的版號

為什麼要比較版本

利用 version_compare() 來比較版本

<?php

echo version_compare('v1.02.3','v1.10.2','>');

?>

請注意:

在為您的項目分配版本號時,請記住,WordPress使用PHP version_compare() 函數來比較插件版本號。因此,在您發布新版本的插件之前,您應該確保這個PHP函數認為新版本比舊版本“更大”。例如,1.02實際上大於 1.1。

其他使用範例

是用於字串版號

<?php

version_compare('1.2.3.4RC7.7', '1.2.3.4RC7.8')

version_compare('8.2.50.4', '8.2.52.6')

version_compare('ver.1.00.1', 'ver.1.00.2')

?>

檢查PHP版本

<?php
if (version_compare(PHP_VERSION, '7.0.0') >= 0) {
    echo 'I am at least PHP version 7.0.0, my version: ' . PHP_VERSION . "\n";
}

if (version_compare(PHP_VERSION, '5.3.0') >= 0) {
    echo 'I am at least PHP version 5.3.0, my version: ' . PHP_VERSION . "\n";
}

if (version_compare(PHP_VERSION, '5.0.0', '>=')) {
    echo 'I am at least PHP version 5.0.0, my version: ' . PHP_VERSION . "\n";
}

if (version_compare(PHP_VERSION, '5.0.0', '<')) {
    echo 'I am still PHP 4, my version: ' . PHP_VERSION . "\n";
}
?>

 

 [……]

閱讀更多

WHMCS 7.x.x 繁體中文語言包

您還再慢慢翻嗎?時間就是金錢

WHMCS不支援繁體中文,翻譯需要耗費大量時間及成本,

網路上找得到的版本很不齊全,版本也不盡相容。

所以我們開啟繁體中文贊助計畫。訂閱贊此計畫,

於更新時會自動電子郵件給您,為您的WHMCS維持最新的更新版本

就是這麼簡單

 

 

支援5.XX

支援7.3.0(當前版本)

WHMCS 繁體中文語言包下載

 

安裝步驟:

1.解壓縮附件

2.將lang目錄複製,覆蓋並取代WHMCS安裝目錄的lang目錄即可。

非常簡單

 

注意:

執行更新前請先妥善備份您的檔案[……]

閱讀更多