2017-05-12 4 views
0

저는 Lightspeed 서버를 실행하고 내장 된 LS 캐시를 사용하여 페이지를 캐시합니다.Guzzle이 요청을 올바르게 실행하지 않습니다.

페이지를 저장할 때 캐시에 제거 요청을 실행하는 플러그인을 작성하고 있지만 Guzzle이 일괄 처리 된 요청을 올바르게 전송하지 못하는 것 같습니다.

Guzzle에서 오류가 표시되지 않지만 서버에 충돌하는 PURGE 요청을 볼 수 없습니다. 그러나 대신 cURL을 실행하면 훌륭하게 작동합니다.

$batch = \Guzzle\Batch\BatchBuilder::factory() 
    ->transferRequests(20) 
    ->bufferExceptions() 
    ->build(); 

$client = new \Guzzle\Http\Client(); 
$client->setDefaultOption('headers/Accept', '*/*'); 

foreach ($paths as $path) 
{ 
    $request = $client->createRequest('PURGE', $path); 
    $request->setProtocolVersion('1.0'); 
    $request->addHeader('Host', 'mydomain.com'); 
    $batch->add($request); 
} 

$requests = $batch->flush(); 
$batch->clearExceptions(); 

컬 모두의

foreach ($paths as $path) 
{ 
    $curl = curl_init($path); 
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PURGE"); 
    curl_exec($curl); 
} 

답변

1

먼저 폭음 폭식 3.x를이 (당신이 사용하고 있는지) 오래된 있기 때문에, 6.x의를 폭식하는 마이그레이션 할 지원되지 않습니다. 위의 코드는 당신보다 조금 복잡하다

$client = new \GuzzleHttp\Client(); 

$requestGenerator = function() use ($client, $paths) { 
    foreach ($paths as $path) { 
     yield $client->requestAsync('PURGE', $path); 
    } 
} 

$allRequests = \GuzzleHttp\Promise\each_limit(
    $requestGenerator(), 
    5 // How many concurrent requests should be done? 
); 

$allRequests->wait(); 

처럼

은 목구멍 6.x에서 함께이 보일 것입니다,하지만 그것은 큰 장점이 있습니다 - 동시성. 당신의 임무를 위해 그것은 큰 개선, IMO.

+0

Guzzle 6을 의존성으로 추가하고이 코드를 연결하면 요청이 성공적으로 전송됩니다. 감사합니다 알렉세이. –

관련 문제