PHP에서 curl로 대용량 파일을 보내는 방법

2GB가 넘는 큰 파일을 PHP로 HTTP 요청으로 보내는 것은 memory_limit으로 제한될 수 있기 때문에 쉽지 않습니다.

며칠 동안 Guzzle과 Laravel HTTP 클라이언트로 어려움을 겪었습니다. memory_limit = 5G를 설정해도 다음과 같은 메모리 또는 쓰기 문제가 있었습니다. fwrite(): Write of xxxx bytes failed with errno=0 No error
마침내 PHP 컬 확장으로 만들 수 있었습니다.

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://example.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$headers = [];
$headers[] = 'Content-Type: multipart/form-data';
$headers[] = 'Cookie: something...';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, 1);
$path = '/full/path/to/file';
$file = curl_file_create(realpath($path));
$post = [   
    'file' => $file,
    'other_field' => 'value',
];
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$result = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
var_dump($result,$httpcode);


그것이 당신을 도울 수 있기를 바랍니다!

다음 기사에서는 대용량 파일을 Laravel 앱에 청크 업로드하고 메모리 제한에 의해 제한되지 않는 방법에 대해 설명합니다.

좋은 웹페이지 즐겨찾기