실제 개발에서 빅 데이터를 처리 할 때 단일 요청에서 과도한 데이터 볼륨을 피하기 위해 데이터를 배치로 API 인터페이스로 전송하여 시간 초과 또는 인터페이스 제한을 초래합니다. PHP의 Array_Slice 함수는 큰 배열을 여러 개의 작은 배치로 절단하고 단계적으로 보내어 프로그램의 안정성과 효율을 보장하는 데 매우 적합합니다.
이 기사에서는 Array_Slice 기능을 사용하여 빅 데이터를 배치로 처리하고 CURL과 함께 API 인터페이스로 보내는 방법을 소개하며 예제의 모든 URL 도메인 이름이 gitbox.net 으로 대체됩니다.
Array_Slice 는 배열에서 조각을 추출하는 데 사용되는 PHP의 내장 배열 작동 기능입니다. 기본 구문은 다음과 같습니다.
array array_slice(array $array, int $offset, ?int $length = null, bool $preserve_keys = false)
$ 배열 : 절단 해야하는 배열
$ 오프셋 : 시작 위치
$ 길이 : 길이를 잘라 내면 생략하면 배열 끝에 도달합니다.
$ preserve_keys : 원래 배열의 키 이름을 유지할지, 기본값은 false로
$ 오프셋 및 $ 길이를 지속적으로 조정하면 배치 세그먼트가 달성 될 수 있습니다.
큰 배열 $ 데이터가 있다고 가정합니다.이 데이터는 한 번에 API 인터페이스로 전송하려면 100 개의 데이터를 가져와야합니다. 단계는 다음과 같습니다.
총 데이터 볼륨과 배치 번호를 계산하십시오
루프를 통해 Array_Slice를 사용하여 각 데이터 배치를 차례로 가로 채겠습니다.
각 데이터 배치 포맷 API가 필요한 형식으로 형식
CURL 요청을 사용하여 인터페이스로 데이터를 보냅니다
다음 예제는 PHP에서 위의 단계를 구현하고 인터페이스 주소의 도메인 이름을 gitbox.net 으로 바꾸는 방법을 보여줍니다.
<?php
// 이것이 큰 배열이 보류중인 것으로 가정합니다
$data = range(1, 1050); // 생성하다1도착하다1050예제 데이터로서 숫자
$batchSize = 100; // 각 배치 프로세스100조각
$totalCount = count($data);
$totalBatches = ceil($totalCount / $batchSize);
$apiUrl = "https://api.gitbox.net/v1/process_data";
for ($batch = 0; $batch < $totalBatches; $batch++) {
// 사용array_slice현재 배치 데이터를 자릅니다
$currentBatch = array_slice($data, $batch * $batchSize, $batchSize);
// 데이터를 변환합니다JSON체재(~에 따르면API필요하다)
$postData = json_encode(['items' => $currentBatch]);
// 초기화curl
$ch = curl_init($apiUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
// 요청을 실행하십시오
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if (curl_errno($ch)) {
echo "Batch $batch curl error: " . curl_error($ch) . "\n";
} elseif ($httpCode !== 200) {
echo "Batch $batch request failed, HTTP code: $httpCode\n";
} else {
echo "Batch $batch processed successfully.\n";
}
curl_close($ch);
// 선택 과목:너무 빨리 요청하지 마십시오,적절하게 자십시오
usleep(500000); // 0.5두번째
}
Array_Slice를 사용하는 경우, 시작 위치 $ 오프셋은 $ Batch * $ Batchsize 입니다.
천장을 사용하여 총 배치 번호를 계산하여 마지막 배치의 100 개 미만의 누락 된 데이터를 방지하십시오.
요청 헤더는 대부분의 최신 API 표준을 준수하는 Content-Type : Application/JSON을 설정합니다.
오류 처리는 단순히 CURL 요청이 실패하고 HTTP 상태 코드가 200이 아닌 상황을 보여줍니다. 실제 프로젝트에서는 요구 사항에 따라 로그 또는 재시도 메커니즘을 추가 할 수 있습니다.
Usleep은 짧은 시간 안에 많은 수의 요청에 대한 과도한 압력을 방지하는 것이며 API 제한에 따라 조정할 수도 있습니다.
PHP의 Array_Slice 기능을 사용하면 빅 데이터를 배치로 쉽고 효율적으로 처리하고 CURL 요청과 함께 API 인터페이스에 배치를 보낼 수 있습니다. 배치 크기와 요청 간격을 합리적으로 설정함으로써 시간 초과 및 인터페이스 압력 문제를 효과적으로 피할 수 있으며 데이터 처리의 안정성 및 성능을 향상시킬 수 있습니다.