Datetime比對(diff)天數因PHP版本而不同

php Datetime比對差異天數因php版本而不同,原因是因為時區設定

底下這段程式在不同php版本執行下有不同的結果。

<?php
$date1Str = '1988-04-18';
$date1 = new DateTime($date1Str,new DateTimeZone('PRC'));
$date2Str = '1900-01-31';
$date2 = new DateTime($date2Str,new DateTimeZone('PRC'));
echo "php version: ".phpversion();
echo "<br/>";
echo sprintf("%s與%s相差天數<br/>",$date1Str,$date2Str);
echo $date1->diff($date2)->days;
閱讀全文〈Datetime比對(diff)天數因PHP版本而不同〉

使用jQuery ajax跨網域http auth+Yii2 cors設定

jQuery ajax設定

$.ajax({
    ....
    xhrFields: {
        withCredentials: true
    },
    ....
});

如果是跨網域的ajax request,這段一定要加,不然就算server端的cors有設好,到瀏覽器這裡還是會擋掉http auth認證。同網域下(同http協定、網域和port)可省略。

http auth的對話方塊
http auth的對話方塊
閱讀全文〈使用jQuery ajax跨網域http auth+Yii2 cors設定〉

CORS的簡述及Yii2設定

cors的機制是,當跨網域透過ajax要求資料時,瀏覽器會先向來源網站詢問是否允許跨網域要求資料,此為prelight request,只回傳相關headers,不輸出任何內容。

如果來源網站有回應cors相關header時,並且ajax request符合headers規範的條件,瀏覽器就會放行連線。若來源網站沒有回應cors相關headers時,視為不允許跨網域連線。

這限制的執行是由瀏覽器端來負責,若瀏覽器不實作cors機制,就算來源網站有正常回覆 cors headers也不會有效果。

閱讀全文〈CORS的簡述及Yii2設定〉

取消在homestead環境下,php寄信預設使用mailhog

homestead環境裡面,mailhog是透過systemd管理的服務,因此可以使用systemctl來控制服務的狀況。

如果要取消php預設透過mailhog寄信,有兩種方法:

閱讀全文〈取消在homestead環境下,php寄信預設使用mailhog〉

啟用phpMyAdmin兩階段驗證後卻找不到Google Authenticator的驗證碼

日前因為測試phpMyAdmin的兩階段驗證功能,有使用Google Authenticator作為兩階段驗證的機制,但因故刪了Google Authenticator的驗證碼,卻沒有取消phpMyAdmin的兩階段驗證,結果就沒辦法再透過phpMyAdmin登入mysql。後來找到方法可以解決這個問題。

閱讀全文〈啟用phpMyAdmin兩階段驗證後卻找不到Google Authenticator的驗證碼〉

AcmePhp註冊e-mail時產生AcmePhp\Ssl\Exception\KeyPairGenerationException

通常這個狀況是因為執行環境是windows。

因為AcmePhp註冊e-mail需要產生account key pair

這時候windows的php需要找到 openssl.cnf 的設定 閱讀全文〈AcmePhp註冊e-mail時產生AcmePhp\Ssl\Exception\KeyPairGenerationException〉

Proudly using Dynamic Headers by Nicasio WordPress Design