php 컬로 얻은 불완전한 데이터에 대한 해결 방법: 1. "CURLOPT_RETURNTRANSFER=true"를 제거합니다. 2. 데이터 소스 서버의 nginx 캐시 구성을 수정합니다.
이 문서의 운영 환경: 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!