
SwooleServer::sendfile는 클라이언트에게 파일을 전송하는 메서드입니다. sendfile를 사용하는 방법은 다음과 같습니다.
- sendfile($fd, $offset, $length, $flags)
- $fd: 전송할 파일의 파일 디스크립터
- $offset: 전송할 파일의 오프셋
- $length: 전송할 파일의 길이
- $flags: 전송 옵션
sendfile를 사용하여 파일을 전송하는 과정을 설명하면 다음과 같습니다.
1. 클라이언트가 파일을 다운로드할 때, 서버는 클라이언트에게 파일의 위치와 크기를 알려줍니다.
2. 클라이언트는 파일을 다운로드할 준비를 합니다.
3. 서버는 클라이언트에게 파일을 전송하기 위해 sendfile 메서드를 호출합니다.
4. sendfile 메서드는 파일을 전송하기 위해 파일 디스크립터, 오프셋, 길이를 전달합니다.
5. 클라이언트는 파일을 다운로드합니다.
sendfile를 사용하여 파일을 전송하는 코드 예제는 다음과 같습니다.
#hostingforum.kr
php
use SwooleHttpRequest;
use SwooleHttpResponse;
class MyServer extends SwooleHttpServer
{
public function onRequest(Request $request, Response $response)
{
$file = 'example.txt';
$fd = fopen($file, 'rb');
$offset = 0;
$length = filesize($file);
$response->header('Content-Type', 'application/octet-stream');
$response->header('Content-Disposition', 'attachment; filename="' . basename($file) . '"');
$response->header('Content-Length', $length);
while ($length > 0) {
$data = fread($fd, 4096);
$response->write($data);
$length -= strlen($data);
}
fclose($fd);
return true;
}
}
이 코드는 클라이언트에게 파일을 다운로드할 수 있도록 해줍니다. 클라이언트는 서버에게 파일을 다운로드할 준비가 되었을 때, 서버는 클라이언트에게 파일을 전송하기 위해 sendfile 메서드를 호출합니다.
2025-07-26 14:14