테스트 사이트 - 개발 중인 베타 버전입니다

php 5.4 버전 new CURLFile

dbxo 12개월 전 조회 2,134

new CURLFile 함수가 5.5 이상 7버전에서 사용을 하는데

저희 회사 php 버전에 5.4 버전이라 해당 함수 사용을 못해서

파일 업로드 api 사용이 불가능해서

혹시 해당 기능을 5.4 버전에서 사용해보신 분 있으시면 답변 부탁드립니다.

며칠째 골머리를 썩고 있는데 

해결을 못하고 있습니다. ㅠㅠ

고수님들의 조언 부탁드립니다.

댓글을 작성하려면 로그인이 필요합니다.

답변 4개

glitter0gim
12개월 전

※ 바운더리와 컨텐츠를 직접 설정하여 보세요.

</p>

<p><?php

$file_path = '/path/to/your/file.txt';

if (!file_exists($file_path)) {

    die("File does not exist: $file_path");

}

$url = "<a href="https://example.com/upload";" target="_blank" rel="noopener noreferrer">https://example.com/upload";</a>

$file_content = file_get_contents($file_path);

$file_name = basename($file_path);

$boundary = uniqid();

$delimiter = '-------------' . $boundary;</p>

<p>$post_data = "--" . $delimiter . "\r\n" .

    "Content-Disposition: form-data; name=\"file\"; filename=\"" . $file_name . "\"\r\n" .

    "Content-Type: application/octet-stream\r\n\r\n" .

    $file_content . "\r\n" .

    "--" . $delimiter . "--\r\n";

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_POST, true);

curl_setopt($ch, CURLOPT_HTTPHEADER, [

    "Content-Type: multipart/form-data; boundary=" . $delimiter,

    "Content-Length: " . strlen($post_data)

]);

curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);

if (curl_errno($ch)) {

    echo 'CURL Error: ' . curl_error($ch);

} else {

    echo 'Response: ' . $response;

}

curl_close($ch);</p>

<p>

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

R
12개월 전

</p>

<p> </p>

<p><?php</p>

<p> </p>

<p>// 파일 업로드를 위한 URL</p>

<p>$url = '<a href="https://example.com/upload.php';" target="_blank" rel="noopener noreferrer">https://example.com/upload.php';</a></p>

<p> </p>

<p>// 업로드할 파일의 경로</p>

<p>$filename = 'test.txt';</p>

<p> </p>

<p>// curl 세션 초기화</p>

<p>$ch = curl_init();</p>

<p> </p>

<p>// 헤더 설정</p>

<p>$headers = array(</p>

<p>    'Content-Type: multipart/form-data'</p>

<p>);</p>

<p> </p>

<p>// 옵션 설정</p>

<p>curl_setopt_array($ch, array(</p>

<p>    CURLOPT_URL => $url,</p>

<p>    CURLOPT_POST => true,</p>

<p>    CURLOPT_POSTFIELDS => array(</p>

<p>        'file' => curl_file_create($filename)</p>

<p>    ),  </p>

<p>    CURLOPT_HTTPHEADER => $headers</p>

<p>));</p>

<p> </p>

<p>// 요청 실행</p>

<p>$result = curl_exec($ch);</p>

<p> </p>

<p>// 오류 처리</p>

<p>if (curl_errno($ch)) {</p>

<p>    echo 'Error: ' .</p>

<p>curl_error($ch);</p>

<p>} else {</p>

<p>    // 업로드 성공 시 응답 처리</p>

<p>    echo $result;</p>

<p>}</p>

<p> </p>

<p>// curl 세션 종료</p>

<p>curl_close($ch);</p>

<p>

 

시도해보세요

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

12개월 전

api 도 외부에서 제공하는것일텐데 아마 답변대로 처리가 어려울것 같습니다.

근본적인 해결방법이 아니고 api 업체에서도 굳이 우회처리된 파일을 만들어주긴 힘드니까요..

이번 기회에 php7 이상으로 업데이트를 하시는게 좋을것 같습니다.

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

d
dbxo
12개월 전
답변 감사합니다.

댓글을 작성하려면 로그인이 필요합니다.

그누위즈
12개월 전

php버전을 사실 올리시는게 맞습니다만..

 

</p>

<p><?php

// 업로드할 파일 경로

$file_path = '/path/to/your/file.txt';</p>

<p>// 업로드하려는 파일이 존재하는지 확인

if (!file_exists($file_path)) {

    die("File does not exist: $file_path");

}</p>

<p>// CURL 초기화

$ch = curl_init();</p>

<p>// API URL 설정

$url = "<a href="https://example.com/upload";" target="_blank" rel="noopener noreferrer">https://example.com/upload";</a> // 파일을 업로드할 API의 URL

curl_setopt($ch, CURLOPT_URL, $url);</p>

<p>// POST 요청 설정

curl_setopt($ch, CURLOPT_POST, true);</p>

<p>// 파일 데이터 설정 (PHP 5.4에서 @를 사용)

$post_fields = [

    'file' => '@' . $file_path, // 파일 경로에 '@'를 추가

    'other_field' => 'example_value' // 추가 필드가 있을 경우 함께 전송

];

curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);</p>

<p>// CURL 옵션 설정

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);</p>

<p>// 요청 실행

$response = curl_exec($ch);</p>

<p>// CURL 에러 체크

if (curl_errno($ch)) {

    echo 'CURL Error: ' . curl_error($ch);

} else {

    echo 'Response: ' . $response;

}</p>

<p>// CURL 종료

curl_close($ch);

?>

 </p>

<p>

 

  • php.ini에서 allow_url_fopenallow_url_include가 활성화되어 있어야 합니다.
  • file_uploads 설정도 On으로 설정되어야 합니다.
로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

d
dbxo
12개월 전
답변 감사합니다.
하지만 해당 방법으로는 안되더라구요 ㅠㅠ

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인