찾다
백엔드 개발PHP7php7에서 컬 파일 업로드 시 오류가 발생하면 어떻게 해야 하나요?

이 글에서는 php7에서 컬 파일 업로드 오류를 해결하는 방법을 소개하겠습니다. 도움이 필요한 친구들이 모두 참고할 수 있기를 바랍니다.

php7에서 컬 파일 업로드 시 오류가 발생하면 어떻게 해야 하나요?

최근 프로젝트가 컬 포스트 방식을 사용하여 WeChat 공개 계정의 자료 라이브러리 인터페이스에 연결되어 자료 파일을 제출했는데 계속해서

{"errcode": 41005, "errmsg" 메시지가 표시되는 것을 발견했습니다. : "미디어 데이터 누락" }

코드 내용

$url = self::$add_material . $accessToken . '&type=' . $key;
$data = [
            'media' => '@' . $fileName,
            'form-data' => $fileInfo,
            'description' => json_encode([
                'title' => $fileName,
                'introduction' => ''
            ]),
        ];
self::init($url);
$data = is_array($data) ? http_build_query($data) : $data;
curl_setopt(self::$curl, CURLOPT_POST, 1);
curl_setopt(self::$curl, CURLOPT_POSTFIELDS, $data);
$info = curl_exec(self::$curl);
curl_close(self::$curl);

공식 문서를 확인한 결과 php5.5 이후에는 @가 더 이상 지원되지 않습니다. CurlFile을 사용하거나 CURLOPT_SAFE_UPLOAD를 1

멀티파트에 "@" 문제가 있습니다.
PHP 5.5 이상용 솔루션:
CURLOPT_SAFE_UPLOAD를 활성화합니다.
"@" 대신 CURLFile을 사용합니다.

php7에서는 CURLOPT_SAFE_UPLOAD를 변경하면 다음과 같은 오류 메시지가 표시됩니다.

curl_setopt(): 안전한 업로드 비활성화 오류에서는 더 이상 지원되지 않습니다

CurlFile을 사용하여 정직하게 처리할 수만 있습니다

$url = self::$add_material . $accessToken . '&type=' . $key;
$data = [
            'media' => new \CURLFile($fileName),
            'form-data' => $fileInfo,
            'description' => json_encode([
                'title' => $fileName,
                'introduction' => ''
            ]),
        ];
self::init($url);
$data = is_array($data) ? http_build_query($data) : $data;
curl_setopt(self::$curl, CURLOPT_POST, 1);
curl_setopt(self::$curl, CURLOPT_POSTFIELDS, $data);
$info = curl_exec(self::$curl);
curl_close(self::$curl);

그런 다음 이렇게 작성하면서 세 가지 큰 함정을 발견했습니다(나는 바보입니다)

1 CURLOPT_POSTFILEDS가 배열 content_type에 전달되는 경우 , CURLOPT_POSTFILEDS가 전달되는 경우 입력이 json이거나 key-value이고 content_type이 x-www-form_urlencoded인 경우, WeChat은 form-data에 의해 전달된 배열을 지원합니다.

2. 배열에서 http_build_query는 이를 배열로 변경합니다

3. CurlFile은 서버의 경로만 읽을 수 있습니다. 인터넷에 주소를 업로드하려면 먼저 서버의 임시 디렉터리에 다운로드해야 합니다. 그런 다음 CurlFile

을 통해 파일 경로(절대 경로)를 읽습니다.그러면 코드를 조정합니다

$url = self::$add_material . $accessToken . '&type=' . $key;
$data = [
            'media' => new \CURLFile($fileName),
            'form-data' => $fileInfo,
            'description' => json_encode([
                'title' => $fileName,
                'introduction' => ''
            ]),
        ];
self::init($url);
curl_setopt(self::$curl, CURLOPT_POST, 1);
curl_setopt(self::$curl, CURLOPT_POSTFIELDS, $data);
$info = curl_exec(self::$curl);
curl_close(self::$curl);

맞습니다. 제거할 수 있다고 생각했을 때 php7에서 알림 구문 오류가 나타났습니다.

Array to 문자열 변환

그러다가 정보를 확인해보니 CURLOPT_POSTFIEDLDS가 다차원 배열을 지원하지 않는 것으로 나타났습니다

하지만 알림 메시지의 구문 오류로 인해 완전히 차단할 수 있습니다

코드를 계속 조정하세요

$url = self::$add_material . $accessToken . '&type=' . $key;
$data = [
            'media' => new \CURLFile($fileName),
            'form-data' => $fileInfo,
            'description' => json_encode([
                'title' => $fileName,
                'introduction' => ''
            ]),
        ];
self::init($url);
curl_setopt(self::$curl, CURLOPT_POST, 1);
@curl_setopt(self::$curl, CURLOPT_POSTFIELDS, $data);
$info = curl_exec(self::$curl);
curl_close(self::$curl);

드디어 자료가 나왔습니다 업로드 성공

위를 보니 벌써 어두워졌네요

너무 기뻐서 얼른 코 닦고 짐 챙겨서 퇴근했어요

추천 학습: php 동영상 튜토리얼

위 내용은 php7에서 컬 파일 업로드 시 오류가 발생하면 어떻게 해야 하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
이 기사는 CSDN에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전