使用 Workerman 開發 WebSocket 應用

WebSocket 是什麼

Workerman 是什麼

從 putty 退出背景執行也不終止

 

實際使用的範例

 

CentOS7 開啟防火牆

睡一覺起來有關資料庫應用不正常問題

workerman 是一個常駐程式,說白就是一個無限迴圈的程式。MySQL 有設計一個 Wait Timeout 的機制,預設是 28800 秒 (8 小時),因為在程式初期測試時因為不可能閒置到 8 小時,而且只要一使用時間就會重新計算,所以大部分發現的時機都是睡一覺隔天使用才發現資料庫的功能都已經失效

顯示處理程序列表

MySQL server has gone away

要使用 try{} catch(){} 來攔截 MySQL 錯誤,必須在初始 PDO 時開啟錯誤攔截

然後在 workerman 使用 SQL 之前檢查連線

\App\MySQL::CheckConnection() 程式

 

913 total views, 2 views today

網頁表格另存 Excel – PHPExcel

網頁 (PHP) 產生 Excel 方法

  • 直接把網頁的 Table 表格轉成 .xls 檔案 Export Html Table To Excel Spreadsheet using jQuery – table2excel 。優點快速,缺點開啟時會出現警告,商業應用不適合,公司內部湊合用
  • 產書真正的 Excel ,使用本文使用 PHPExcel 套件可以讀取或產生原生 Excel 格式檔案。優點標準,缺點很麻煩

PHPExcel

使用 PHP 處理 Excel 格式檔案

讀取 Excel 檔案

產生 Excel

儲存格格式 PHPExcel_Style_NumberFormat

範例 2 – 直接輸出下載檔案

Fatal error: Allowed memory size

在寫入大量資料時,出現了 Fatal error: Allowed memory size 的錯誤

無效方案

指定欄位格式

要注意 setCellValue 修改成 setCellValueExplicit

Fatal error: Class ‘XMLWriter’ not found

補一個 php-xml 就好了

1,323 total views, 2 views today

hinet hichannel 取得 index.m3u8 播放路徑

2020/8/11 停止維護

hichannel 更改了 token ,現在只需要一個 token 和一個 expires ,因為沒有實際利益 Hoyo 本人也沒在使用這個收聽功能,因此停止維護

實際運作結果

先看一下可播放的實際案例網址

解讀

  1. ra-000073 是頻道的代號名稱,ra-000073 是 NEWS98 ,KissRadio 是 ra-000042
  2. index.m3u8 表示使用 HTTP HLS 串流技術
  3. expire1 & expire2 表示可以執行播放的時間區間,你拿一個早上八點到下午四點的播放網址在晚上執行是不能播放的
  4. token1 & token2 和 expire 是相呼應的,意思就是如果 expire 的數值為 1000 算出 token 是 ABC999 ,那一樣的執行環境算出的 token 就會相同

參考資料

寫 PHP 的人轉到 python 會遇到的問題有

  1. 結束不用加分號
  2. \t 和空白是坑爹的不一樣
  3. 縮行不是爽縮就可以縮
  4. 相同功能的 function 預設的輸出和 PHP 不同

 

好好研究一下網頁是如何運作,追到了 radio_proxy.swf 這個檔案,網頁的播放最後就是由這個 Flash 檔案生成播放路徑,這時又要尋找「反組譯」黑科技

可惜的是,閃客 Sothink SWF Decompile 解不開,大概也有反制黑科技的技術吧

還好這種東西有線上版可以用!?…

不知道當時哪來的腦洞想到上網找 online 版,不過結果是美好的,至少是解開有看到類似 ActionScript 的輸出了。

下面是有關產生 token 的片段程式

基本上和 python 架構是一樣的,只是反組譯有少東西,最關鍵的 KEYS 沒有解開,只好回頭繼續研究 python

後來證實 python 有關 token 的演算法是正確的

Token 演算法

token1 字串組成

token2 字串組成

token1 範例,token2 只要將最後的 1 改成 2 即可

然後拿去 md5() 再跑 base64_encode() 就可以得到 Token 了

index.m3u8 內容

PHP 程式碼

 更新

  • 2019-02-20 網址改為 https:// 以及又改為 index.m3u8 的檔名
  • 2018-06-29 最後 m3u8 產出時, index.m3u8 檔案名稱必須改成 ra-hls/hich-ra000073-audio_track=128000.m3u8 這種格式的檔案名稱

2,612 total views, 2 views today

讓 PHP 等待系統指令執行完成後才繼續

一般使用 ffmpeg 程式時,當執行 ffmpeg 之後,程式不管轉檔是否完成都會繼續往下執行,如果需要使用轉檔完成的檔案進行後續處理就會發生錯誤。

這時只要根據下面程式思路修改即可

參考

結合這兩個程式思路,自行修改為下列程式

 

推薦在聲音轉檔才使用,影片因為轉檔時間需要更久,應該會遇到 HTTP Server Timeout 逾時的問題。

486 total views, 2 views today

PHP preg_match 取不到值

參考

使用 PHPWord 的 replaceBlock() ,明明是正確的搜尋條件,在搜尋字串相對較短時可以正常運作,完整字串時卻無法取得結果。

搞超久才想到是否是字串太長導致,最後證實確實有長度限制,可是 PHP 卻「完全」不給任何警告或錯誤訊息 …

 

160 total views, 1 views today