首頁  >  文章  >  後端開發  >  php curl 取得資料不完整怎麼辦

php curl 取得資料不完整怎麼辦

藏色散人
藏色散人原創
2021-02-23 18:01:493863瀏覽

php curl取得資料不完整的解決方法:1、去掉「CURLOPT_RETURNTRANSFER=true」;2、修改資料來源伺服器的nginx快取配置。

php curl 取得資料不完整怎麼辦

本文操作環境:Windows7系統、PHP7.1、Dell G3電腦。

php curl 取得資料不完整

 curl取得資料的時候,結果的字串長度比較大。相同的結果每次取得的資料都不全,長度也不一樣。

 試著把 HEADER資訊修改為except: 但還是不行(這個可以解決的問題是資料量太大導致取得結果為空的情況)。

 去掉

 CURLOPT_RETURNTRANSFER = true

可以列印出完整資料

#解決方案:

修改資料來源伺服器的nginx快取設定【推薦:PHP影片教學

fastcgi_buffers 由原來的8*128k修改到8*1M

以下引自https://segmentfault.com/a /1190000007513677

Nginx的buffer機制,對於來自FastCGI Server 的Response,Nginx 將其緩衝到記憶體中,然後依序傳送到客戶端瀏覽器。緩衝區的大小由 fastcgi_buffers 和 fastcgi_buffer_size 兩個值控制。

 比如如下配置:

 fastcgi_buffers 8 4K; 

 fastcgi_buffer_size 4K;

 fastcgi_buffers 控制nginx 最多創建8 個大小為4K 的緩衝區,而fastcgi_buffer_size 則是處理Response 時第一個緩衝區的大小,不包含在前者。所以總計能創建的最大記憶體緩衝區大小是 84K 4K = 36k。而這些緩衝區是根據實際的 Response 大小動態產生的,並不是一次性建立的。例如一個 8K 的頁面,Nginx 會建立 24K 共 2 個 buffers。

 當 ​​Response 小於等於 36k 時,所有資料當然全部在記憶體中處理。如果 Response 大於 36k 呢? fastcgi_temp 的作用就在於此。多出來的資料會被暫時寫入檔案中,放在這個目錄下面。

 記憶體中緩衝了 36Kb,剩下的會寫入的檔案。而實際的情況是,執行 Nginx Process 的使用者並沒有 fastcgi_temp 目錄的寫權限,所以剩下的資料就遺失了。

 

以上是php curl 取得資料不完整怎麼辦的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn