Apakah yang perlu saya lakukan jika terdapat ralat dalam muat naik fail curl dalam php7?

醉折花枝作酒筹
Lepaskan: 2023-02-18 07:56:01
ke hadapan
2658 orang telah melayarinya

Artikel ini akan memperkenalkan kepada anda cara menyelesaikan ralat muat naik fail curl dalam php7. Ia mempunyai nilai rujukan tertentu Rakan-rakan yang memerlukan boleh merujuk kepadanya.

Apakah yang perlu saya lakukan jika terdapat ralat dalam muat naik fail curl dalam php7?

Baru-baru ini, apabila projek disambungkan ke antara muka perpustakaan bahan akaun awam WeChat, saya menggunakan kaedah siaran curl untuk menyerahkan fail bahan, dan saya mendapati ia terus menggesa

{"errcode":41005,"errmsg":"data media tiada"}

Kandungan kod

$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);
Salin selepas log masuk

Selepas menyemak dokumentasi rasmi, @ tidak lagi disokong selepas php5.5 Anda mesti menggunakan CurlFile atau tetapkan CURLOPT_SAFE_UPLOAD kepada 1

Terdapat isu "@" pada permintaan POST berbilang bahagian atau kemudian:
Dayakan CURLOPT_SAFE_UPLOAD
Gunakan CURLFile dan bukannya "@".

Dalam php7 curl akan menggesa ralat jika anda menukar CURLOPT_SAFE_UPLOAD seperti berikut:

curl_setopt (): Melumpuhkan muat naik selamat tidak lagi disokong kerana kesilapan

Kami hanya boleh menggunakan CurlFile untuk mengendalikannya secara jujur

$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);
Salin selepas log masuk

Kemudian kami mendapati tiga perangkap besar dalam penulisan seperti ini ( Saya bodoh)

1. Jika CURLOPT_POSTFILEDS melepasi dalam array content_type, ia adalah multipart/form-data jika CURLOPT_POSTFILEDS lulus dalam json atau key-value& content_type, ia adalah x-www-form_urlencoded; ; tetapi WeChat menyokong tatasusunan yang diluluskan oleh data borang

2. Jika terdapat objek dalam tatasusunan, http_build_query akan mengubahnya menjadi tatasusunan

3. CurlFile hanya boleh membaca laluan dalam pelayan. Jika anda ingin memuat naik alamat di Internet, anda perlu memuat turun fail sementara ke pelayan terlebih dahulu, baca laluan fail (laluan mutlak) melalui CurlFile

Jadi kami kemudian. melaraskan kod

$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);
Salin selepas log masuk
Apabila saya fikir saya boleh menyingkirkannya, php7 ada di sini Ralat sintaks notis muncul:

Penukaran tatasusunan kepada rentetan

Kemudian saya menyemak maklumat dan mendapati bahawa CURLOPT_POSTFIEDLDS tidak menyokong tatasusunan berbilang dimensi

Tetapi ralat sintaks notis yang digesa, kami pasti boleh melakukannya Sekat

Teruskan melaraskan kod

$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);
Salin selepas log masuk
Akhirnya bahan berjaya dimuat naik

Saya mendongak dan melihat keadaan sudah gelap

Saya sangat gembira sehingga saya cepat-cepat mengelap hidung dan membersihkan selesai.

Atas ialah kandungan terperinci Apakah yang perlu saya lakukan jika terdapat ralat dalam muat naik fail curl dalam php7?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:csdn.net
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan