看板 PHP 關於我們 聯絡資訊
※ 引述《isolatorAY (Isolator_AY)》之銘言: : 最近在嘗試透過php curl抓取docker remote api傳出的JSON顯示在自己的網頁上,但是遇 : 上一些問題 : 我是利用docker composer同時啟動兩個container,分別是nginx 1.23與php 7.4-fpm : 第一個問題是 : ip/containers/$containerID/logs?stdout=true : 在抓nginx的log可以看到一些資訊,但是從php容器得到的卻是空字串 加上 stderr=true,php-fpm 的 log 往 stderr 塞的樣子 不過實際試了下,每一行 log 前面都有多放 8 byte 的 header 在 PHP 裡面還要另外做處理 ``` [16:41:23] $ curl -s localhost:2375/containers/my-container/logs?stderr=true --output - | xxd -c 20 00000000: 0200 0000 0000 0035 5b30 352d 4175 672d 3230 3232 .......5[05-Aug-2022 00000014: 2031 373a 3536 3a32 315d 204e 4f54 4943 453a 2066 17:56:21] NOTICE: f 00000028: 706d 2069 7320 7275 6e6e 696e 672c 2070 6964 2031 pm is running, pid 1 0000003c: 0a02 0000 0000 0000 3b5b 3035 2d41 7567 2d32 3032 ........;[05-Aug-202 00000050: 3220 3137 3a35 363a 3231 5d20 4e4f 5449 4345 3a20 2 17:56:21] NOTICE: 00000064: 7265 6164 7920 746f 2068 616e 646c 6520 636f 6e6e ready to handle conn [以下略] ``` : 第二個問題是 : ip/containers/$containerID/stats : 直接丟瀏覽器網址欄是持續進行每秒更新一次的..呃..是叫streaming嗎? : 利用跟前面取得log、容器列表等等同樣的curl處裡方式卻會直接得到一個空值字串,請問 : 這種要如何正常的解析呢? : 另外就是有嘗試利用網路上的JSON parser先解析直接丟瀏覽器得到的JSON 資料,發現除了 : 最開始的第一筆資料外,後續更新的都會在"precpu_stats"中包含了前一次的percpu_usage : ,而網路上的JSON parser會將這裡標記為語法錯誤 : 請問這種是不是用php json_decode()就會無法轉換成陣列? 這邊他的做法是維持 HTTP connection,然後每一秒寫一行 json 進去 對於瀏覽器/PHP 來說,等於是一個永遠下載不完的的文字檔案,檔案內容每一行是一個 json PHP 會怎麼處理要看你的 code 怎麼寫,然後對這種「一直讀一直讀讀不完」的東西 還要考慮到 PHP 內部 IO buffer 的行為,可能會囉唆一點 這會連動到 JSON 語法問題 因為...這個字串是合法的 JSON ``` {"key":{"key2":"val1"}} ``` 但這個字串不是 ``` {"key":{"key2":"val1"}} {"key":{"key2":"val2"}} ``` 如果你讀 response 的方法會一次讀進多行 送去 json_decode() 會拿到 null,可以用 json_last_error() 拿到錯誤代碼 如果一次只讀一行的話就能夠正常處理 -- 起來,不願做光棍的人們,把女孩的清純築成我們新的長城 蘿莉控們到了最危險的時候。每個人被迫著發出最後的吼聲。 起來!起來!起來! 我們萬眾一心,往著女孩的裙底,前進! 往著女孩的裙底,前進!前進!前進!進! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.125.137.182 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/PHP/M.1660638456.A.DAC.html
isolatorAY: 感謝! 我來看看 08/17 13:59
bakedgrass: 推 08/18 02:01
※ 編輯: GALINE (218.166.58.169 臺灣), 08/22/2022 11:31:02
gpmm: 推一個(跪 08/22 17:48