>  기사  >  백엔드 개발  >  PHP 컬로 얻은 데이터가 불완전하면 어떻게 해야 합니까?

PHP 컬로 얻은 데이터가 불완전하면 어떻게 해야 합니까?

藏色散人
藏色散人원래의
2021-02-23 18:01:493817검색

php 컬로 얻은 불완전한 데이터에 대한 해결 방법: 1. "CURLOPT_RETURNTRANSFER=true"를 제거합니다. 2. 데이터 소스 서버의 nginx 캐시 구성을 수정합니다.

PHP 컬로 얻은 데이터가 불완전하면 어떻게 해야 합니까?

이 문서의 운영 환경: Windows 7 시스템, PHP7.1, Dell G3 컴퓨터.

php 컬이 불완전한 데이터를 얻습니다

컬이 데이터를 얻을 때 결과 문자열 길이가 상대적으로 큽니다. 동일한 결과라도 매번 얻은 데이터는 불완전하고 길이도 다릅니다.

HEADER 정보를 Except:로 변경해 보았지만 여전히 작동하지 않습니다(해결할 수 있는 문제는 데이터 양이 너무 많아 결과가 비어 있다는 것입니다).

전체 데이터를 인쇄하려면

 CURLOPT_RETURNTRANSFER = true

를 제거하세요.

해결책:

데이터 소스 서버의 nginx 캐시 구성을 수정하세요. [권장: PHP 비디오 튜토리얼]

fastcgi_buffers는 원래 8*128k에서 다음으로 수정되었습니다. 8* 1M

다음은 https://segmentfault.com/a/1190000007513677

Nginx의 버퍼 메커니즘에서 인용한 것입니다. FastCGI 서버의 응답에 대해 Nginx는 이를 메모리에 버퍼링한 다음 클라이언트 브라우저로 보냅니다. . 버퍼의 크기는 fastcgi_buffers 및 fastcgi_buffer_size 두 값에 의해 제어됩니다.

예를 들어 다음 구성은

fastcgi_buffers 8 4K;

fastcgi_buffer_size 4K;

fastcgi_buffers는 4K 크기의 버퍼를 최대 8개 생성하도록 nginx를 제어하며 fastcgi_buffer_size는 응답을 처리할 때 첫 번째 버퍼의 크기입니다. 전자에서는. 따라서 생성할 수 있는 총 최대 메모리 버퍼 크기는 84K+4K = 36k입니다. 이러한 버퍼는 실제 응답 크기를 기반으로 동적으로 생성되며 한꺼번에 생성되지 않습니다. 예를 들어, 8K 페이지의 경우 Nginx는 총 24K 버퍼 2개를 생성합니다.

응답이 36k 이하인 경우 모든 데이터는 물론 메모리에서 처리됩니다. 응답이 36k보다 크면 어떻게 되나요? 이것이 바로 fastcgi_temp가 하는 일입니다. 추가 데이터는 임시로 파일에 기록되고 이 디렉터리 아래에 배치됩니다.

36Kb는 메모리에 버퍼링되고 나머지는 파일에 기록됩니다. 실제 상황은 Nginx 프로세스를 실행하는 사용자에게 fastcgi_temp 디렉터리에 대한 쓰기 권한이 없어 나머지 데이터가 손실된다는 것입니다.

위 내용은 PHP 컬로 얻은 데이터가 불완전하면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.