개발 꿀팁/PHP

PHP5.6 CURL을 통해 사진 업로드 @ 부호가 올바르지 않은 호환성 문제

Jammie 2022. 8. 2. 14:12
반응형

하늘은 원래 사진 구름의 API를 시험해 보고 싶었기 때문에 현지에서는 사진을 업로드하는 테스트를 했는데, 우울할 때 이전에 잘 사용하던 CURL 업로드 이미지가 제대로 작동하지 않았다. 원래 몇 분 안에 일을 처리했는데, 결국 반나절 만에 원인을 찾았다. 호환성 문제라니, 정말 어이가 없다.

인터넷 검색 PHP가 CURL을 통해 이미지를 업로드 하는 것은 거의 모두 다음과 유사한 코드입니다

이전에는 이미지 업로드 경로 앞에 다음과 같이 @ 기호를 추가했습니다

$file = __DIR__ .'/0634134726bc5b8b.jpg';
$data = array('mypic'=>'@'. $file);

이렇게 하면 되는데 지금은 보통 PHP 5.6 이하 버전에만 적용되고 있다.
5.6에 직접 @를 붙이는 것은 나무로 유용하다.

해결책은 두 가지다: 호환성과 새로운 방법을 사용하는 것이다.

1. 호환 방법:
CURL에 주로 사용되는 설정 매개 변수 CURLOPT_SAFE_UPLOAD
CURLOPT_SAFE_UPLOAD PHP 5.5의 기본값은 false
PHP 5.6에서는 이미 트루로 묵인됐다.
따라서 다음과 같이 false로 설정할 수 있는 행을 하나 더 늘리면 됩니다.
주기: 이 매개 변수의 설정 순서, CURLOPT_POSTFIE를 설정해야 합니다LDS 파라미터 이전부터 유효합니다!!!

<?php
$url = 'http://127.0.0.1/test3.php';
$file = __DIR__ .'/0634134726bc5b8b.jpg';
$data = array('mypic'=>'@'. $file);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_SAFE_UPLOAD, false);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
$content = curl_exec($curl);
curl_close($curl);
print_r($content);

2. 새로운 이미지 업로드 방법:
CURLFile 클래스 사용하기다음과 같이 파일을 처리합니다

$url = 'http://127.0.0.1/test3.php';
$file = __DIR__ .'/0634134726bc5b8b.jpg';
$data = array('mypic'=>new CURLFile($file));
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
$content = curl_exec($curl);
curl_close($curl);
print_r($content);

 

반응형