日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OSS: cURL error: Empty reply from server (52)

發布時間:2023/12/3 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OSS: cURL error: Empty reply from server (52) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

環境:

PHP7.2 、TP6、OSS-sdk

背景:

在項目中,有一個需求是上傳圖片,由于圖片比較大,所以使用內部的一套壓縮圖片邏輯后,再上傳到阿里云的oss文件存儲服務中,于是碰到一個問題,上傳圖片卡了一會后oss底層就拋了一個?cURL error: Empty reply from server (52)出來

?

解決過程

一、定位問題所在

1. 一開始懷疑是阿里云oss的問題,于是聯系阿里小二排查,在oss上的實時查詢日志查詢了一下,并沒有找到對應圖片的請求。阿里小二回復說沒有記錄日志說明請求還沒到oss服務上, 并且排查了服務并沒有問題, 需要在客戶端查詢一下代碼邏輯

?

2. 經過進一步定位發現, 如果去除了圖片壓縮的代碼邏輯就能夠正常上傳圖片。但是圖片壓縮邏輯其實也沒啥邏輯,也是PHP內置的那些函數:imagecreatetruecolor |?imagecopyresampled? , 而且圖片壓縮完能夠正常打開,說明圖片沒有問題,問題應該還在代碼上面

3. 在排查所有可能后,最終采用抓包來分析數據,抓包后發現一個問題:

客戶端上傳數據到 24669 字節后,就一直停住了, 過了60s后,服務端連接超時,然后發送了FIN 主動斷開連接

而從請求頭來看,content-length的大小是 76201,這個大小剛好是那張圖片壓縮前的大小

壓縮前的圖片 (76201) :

?

壓縮后的圖片(24669) :

二. 發現問題

問題已定位出來,原因是執行了壓縮后,再調用oss上傳, 而在oss上傳的header上面發現content-length還是圖片壓縮之前的大小,故需要查找為什么沒有獲取到最新的文件大小

經過翻看oss-sdk的底層代碼后發現, 他這個值是調用php底層的filesize函數

于是查找PHP的函數幫助文檔, 發現問題所在 !!

?

當使用 stat(),lstat() 或者任何列在受影響函數表(見下面)中的函數時,PHP 將緩存這些函數的返回信息以提供更快的性能。然而在某些情況下,你可能想清除被緩存的信息。例如如果在一個腳本中多次檢查同一個文件,而該文件在此腳本執行期間有被刪除或修改的危險時,你需要清除文件狀態緩存。這種情況下,可以用 clearstatcache() 函數來清除被 PHP 緩存的該文件信息。

最終問題出現在PHP的文件操作函數上,因為壓縮圖片的時候使用了文件操作函數,而到oss-sdk里面也又使用了一次, 導致獲取的是緩存的結果

也因為我們壓縮前和壓縮后使用的是同一個圖片路徑 , 所以才導致這個坑能被我們給挖出來

總結

在使用PHP底層的文件操作函數時,如果同一個句柄操作同一張圖片需要注意,可以有以下兩種解決方案:

1.?操作前操作后獲取圖片的信息的中間,需要調用clearstatcache方法進行清除緩存

2. 操作圖片后另存為另外一個新的圖片路徑

?

總結

以上是生活随笔為你收集整理的OSS: cURL error: Empty reply from server (52)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。