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.
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);
Selepas menyemak dokumentasi rasmi, @ tidak lagi disokong selepas php5.5 Anda mesti menggunakan CurlFile atau tetapkan CURLOPT_SAFE_UPLOAD kepada 1
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 jujurTerdapat isu "@" pada permintaan POST berbilang bahagian atau kemudian:
Dayakan CURLOPT_SAFE_UPLOAD
Gunakan CURLFile dan bukannya "@".
$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);
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 CurlFileJadi 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);
$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);
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!