CURL을 통한 스트림 데이터 출력 방법 > PHP
PHP

CURL을 통한 스트림 데이터 출력 방법

조회 96회 댓글 0건

CURL을 통한 스트림 데이터를 받는 방법으로 아래에서 CURLOPT_WRITEFUNCTION 부분이 해당 부분입니다.

아래 소스의 익명 함수에선 아래가 추가 되어야 스트림 처리를 제대로 할 수 있습니다.

    ob_flush();

    flush();


스트립 처리가 안되는 조건이 있는데 다음과 같습니다.

1) 압축 옵션이 있는경우

압축을 하려면 전체 데이터가 있어야 하기 때문에 버퍼를 중간중간 비워 출력을 할 수 없습니다.


2) 버퍼 설정이 되어 있는 경우

버퍼 설정을 하여 해당 버퍼가 꽉찰때까지 가지고 있다가 출력하는 옵션이 되어 있다면 스트림 형태로 출력을 할 수 없습니다.


우리가 흔히 사용하는 방식은 일정양이 채워지면 청크방식으로 출력을 하는 방법을 많이 사용하고 있습니다.

또는 파일 다운로드 처럼 이미정해진 양을 출력하는 형태(컨텐츠랭스)


그리고 마지막으로 헤더의 컨텐츠 타입은 Content-Type: text/event-stream 으로 설정을 해줘야 하는데 이것에 대한 것은 아래를 참고 하시면 됩니다.

ChatGPT/PHP at main · pabburi2/ChatGPT · GitHub 


잘 되고 있나에 대한 구분은 브라우저로 봤을때 출력 결과가 한꺼번에 나오는것이 아닌 버퍼를 비웠을때 내용이 브라우저에 바로 나와야 합니다.

그렇지 않으면 서버 설정문제로 원하는 결과를 보고 있는것이 아닙니다.


09b687c0366b2d4ac6f5d03a78d3d8b9_1679673515_2567.png
 


<?
$model = "gpt-3.5-turbo";

$header = array(
    'Authorization: Bearer '.$API_KEY,
    'Content-type: application/json',
);

$params = json_encode(array(
    'messages'        => $data,
    'model'         => $model,
    'temperature'   => 1,
    'max_tokens'    => 1500,
    'top_p'         => 1,
    'frequency_penalty' => 0,
    'presence_penalty'  => 0,
    'stream'        => True
));

// create a new cURL resource
$curl = curl_init();
// set URL and other appropriate options
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HEADER, 0);

curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_POSTFIELDS, $params);
// enable streaming
curl_setopt($curl, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($curl, CURLOPT_WRITEFUNCTION, function($curl, $chunk) {
    // do something with the streamed data
    echo $chunk;
    return strlen($chunk);
});

// execute the request
curl_exec($curl);

// close cURL resource
curl_close($curl);




  • 페이스북으로 공유
  • 트위터로  공유
  • 구글플러스로 공유
전체 137건 1 페이지
  • profile_image 네이버 스마트스토어용 API에 대한것으로 스마트스토어가 있는 경우 가입하여 사용 할 수 있습니다.아래는 되는지 확인하기 위해서 테스트로 만든것으로서 실제사용은 함수나 클래스로 간략하게 만들 필요가 있습니다.필요한것들은 아래와 같습니다.- CURL사용시 HTTP 헤더로 전달(인증등)- CURL을 GET으로 사용- CURL을 POST로 사용- HTTP 헤더를 분리해서 배열에 담아 두었다가 필요한것 있는지 참고 <?php // https://a…
  • profile_image Warning: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages:error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /home/ing.php on line 50 위와 같이 SSL 관련 오류가 발생 하는 경우는 아래 처럼 해주면 됩니다.  $context=a…
  • profile_image 1.2.3.4 8비트로 된 IPV4를 정수형 숫자로 변환하는 함수 입니다.8비트 이기 때문에 10진수로 표현이 가능한것은 256개로서 0 부터 시작하기 때문에 255까지 가능 합니다.int 형으로 반환이 되는데 이는 PHP의 int 형을 따릅니다.PHP는 OS시스템을 따르게 됩니다.그렇기 때문에 32bit와 64bit OS는 int 크기가 다르기 때문에 ip2long 함수를 사용하게 되면 다른 숫자를 반환 합니다.이부분은 요즘 32bit 사용하…
  • profile_image 변수나 함수를 한글로 사용해 보았다. 영문으로 사용하면 스네이크 카멜표기법같은것을 사용하는데 한글을 사용하게 되면 언더라인만 들어가기 때문에 이 부분에 대한 규칙이 필요 할 수 있다.현재 까지 영문만 사용 했는데 국내에서만 사용하는 것이라면 굳이 영문을 사용할 필요가 있을까 하는 생각이 들었다.문제는 한글을 사용하면 어떤 경우에 안될까봐 이게 문제이다.  function 한글함수명( string $한글='eee' ) : object {    $…
  • profile_image 웹브라우저를 통한 데이터 전송을 PHP에서 받은 방법은 GET과 POST가 있습니다.PHP에선 슈퍼글로벌 이란 변수가 있으며 일반 글로벌 변수와는 약간 다릅니다. 내장된 글로벌 변수라고 생각을 하셔도 됩니다.URL을 통해서 파라미터를 받으면 이는 GET에 해당 되어 $_GET 의 변수에 담아져 있고 배열입니다.$GLOBALS$_SERVER$_GET$_POST$_FILES$_COOKIE$_SESSION$_REQUEST$_ENV위가 슈퍼글로벌 변수…
  • profile_image 현재는 잘 사용하지 않는데 예전에는 쓰인것이 있습니다.저도 왜? 쓰였는지 이해가 잘 가지 않는 부분입니다. 배열을 사용하면 되는데 말입니다.가능하면 알아보기 쉬운 배열을 사용하는 것이 좋겠습니다. 하지만 남이 사용했을 경우 볼줄을 알아야 되기 때문에 아래와 같습니다.  $abc    = 'def';  $def    = 'abc';  // def 변수의 값을 출력 - 달러가 2개 들어가면 변수의 값이 변수가 된다.  echo $$abc . PHP…