php curl取得資料不完整的解決方法:1、去掉「CURLOPT_RETURNTRANSFER=true」;2、修改資料來源伺服器的nginx快取配置。
本文操作環境: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中文網其他相關文章!