PHP 取 youtube 影片id

取得 youtube id

youtube 現在分享網址有好多種,

可能是這樣:

https://youtu.be/p_T3oNKjAT8

可能是這樣:

https://www.youtube.com/watch?v=p_T3oNKjAT8

不確定User會填入哪一種分享網址的情況下,下面這方法可以解析出這些類型的 youtube id

試試看:

<?php
/**
 * Get Youtube video ID from URL
 *
 * @param string $url
 * @return mixed Youtube video ID or FALSE if not found
 */
function getYoutubeIdFromUrl($url) {
    $parts = parse_url($url);
    if(isset($parts['query'])){
        parse_str($parts['query'], $qs);
        if(isset($qs['v'])){
            return $qs['v'];
        }else if(isset($qs['vi'])){
            return $qs['vi'];
        }
    }
    if(isset($parts['path'])){
        $path = explode('/', trim($parts['path'], '/'));
        return $path[count($path)-1];
    }
    return false;
}
// Test
$urls = array(
    'http://youtube.com/v/dQw4w9WgXcQ?feature=youtube_gdata_player',
    'http://youtube.com/vi/dQw4w9WgXcQ?feature=youtube_gdata_player',
    'http://youtube.com/?v=dQw4w9WgXcQ&feature=youtube_gdata_player',
    'http://www.youtube.com/watch?v=dQw4w9WgXcQ&feature=youtube_gdata_player',
    'http://youtube.com/?vi=dQw4w9WgXcQ&feature=youtube_gdata_player',
    'http://youtube.com/watch?v=dQw4w9WgXcQ&feature=youtube_gdata_player',
    'http://youtube.com/watch?vi=dQw4w9WgXcQ&feature=youtube_gdata_player',
    'http://youtu.be/dQw4w9WgXcQ?feature=youtube_gdata_player'
);
foreach($urls as $url){
    echo $url . ' : ' . getYoutubeIdFromUrl($url) . "\n";
}

 [……]

閱讀更多

CodeIgniter Fix Fatal error: session_start(): Failed to initialize storage module: user (path: )

Fatal error: session_start(): Failed to initialize storage module: user (path: )

解決方法1:

開啟CodeIgniter設定檔,預設再 application/config/config.php

把:

改成:

解決方法2:

改用 DB session ,必須先連接資料庫,起設定好資料庫連線資訊

開啟CodeIgniter設定檔,預設再 application/config/config.php

改成

匯入資料表

[……]

閱讀更多

Fix Google reCaptcha invalid-json error

使用 Google reCaptcha 驗證碼進行後端驗證,拋出 invalid-json 錯誤,分享解決這問題的方法:

解決方法:

開啟檢查 PHP.ini 設定,搜尋「allow_url_fopen」,若值不是 On 請改成 On 開啟它,如下:

allow_url_fopen = On

接著搜尋「extension=php_openssl.dll」,確認是否開啟,前方有分號「;」代表沒開啟

;extension=php_openssl.dll

將前方的分號「;」移除,如下:

extension=php_openssl.dll

重新啟動 SERVER

 [……]

閱讀更多

Warning: file_get_contents(): Unable to find the wrapper “https” …

解決錯誤訊息:

Warning: file_get_contents(): Unable to find the wrapper “https” – did you forget to enable it when you configured PHP?

解決方法:

需要開啟 php php_openssl 的這個 extension
開啟 php.ini,搜尋:「extension=php_openssl.dll」

;extension=php_openssl.dll

將前方的分號「;」移除

extension=php_openssl.dll

重新啟動 SERVER[……]

閱讀更多

PHP 呼叫 Namespace 文件中的 function

呼叫 Namespace 文件裡的 function

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

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

VECTOR\COOL\test();

呼叫 Namespace 文件裡 class 中的 function

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

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

VECTOR\COOL\HELLO::test();

在 WordPress Action 中呼叫

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

function test() { 
	echo "Hello world!\n"; 
}
add_action('init','VECTOR\COOL\test');

參考資料:

http://php.net/manual/en/language.namespaces.nsconstants.php[……]

閱讀更多

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
)

 

 [……]

閱讀更多

解決 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


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

顯示正常囉囉!!

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

[……]

閱讀更多