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

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

Aug 13, 2021 am 09:20 AM

이 글에서는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 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 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)