Apabila pihak ketiga log masuk untuk kali pertama (QQ, WeChat ), avatar pengguna platform akan ditukar secara automatik Tukar kepada avatar pihak ketiga, kod yang berkaitan adalah seperti berikut
$logo = "http://thirdqq.qlogo.cn/g?b=oidb&k=OMu7e7tukTueShatFXVX1w&kti=ZDyqNAAAAAE&s=100&t=1611112388" try { $fileContent = file_get_contents($logo); } catch (\Exception $e) { throw new \Exception("读取文件[" . $logo ."]失败"); } $imageInfo = getimagesize($logo); if (empty($imageInfo)) { throw new \Exception("文件[" . $logo ."]格式有误(非图片)"); } $base64Image = 'data:' . $imageInfo['mime'] . ';base64,' . base64_encode($fileContent);
Akibatnya, apabila mendapatkan avatar pengguna QQ dan menggunakan file_get_contents() untuk mendapatkan kandungan fail avatar, ia mengambil masa 18 hingga 20 saat
Kemudian saya mencari dalam talian dan mengatakan bahawa saya boleh menetapkan tamat masa
$context = stream_context_create([ 'http' => [ 'timeout' => 3 //超时时间,单位为秒 ] ]); // Fetch the URL's contents $fileContent = file_get_contents($logo, 0, $context);
Namun, ia tidak berjaya Tamat masa 3 saat tidak berkuat kuasa
Ganti dengan GuzzleHttp atau Curl PHP sendiri mendapat kandungan avatar, dan hasilnya tiada masa tamat
$logo = "http://thirdqq.qlogo.cn/g?b=oidb&k=OMu7e7tukTueShatFXVX1w&kti=ZDyqNAAAAAE&s=100&t=1611112388" try { $client = new Client(['timeout' => 3]); $fileContent = $client->get($logo)->getBody()->getContents(); } catch (\Exception $e) { throw new \Exception("读取文件[" . $logo ."]失败"); } $imageInfo = getimagesize($logo); if (empty($imageInfo)) { throw new \Exception("文件[" . $logo ."]格式有误(非图片)"); } $base64Image = 'data:' . $imageInfo['mime'] . ';base64,' . base64_encode($fileContent);
Namun, terdapat penemuan yang memakan masa, fungsi getimagesize juga mengambil masa 18 hingga 20 saat
Kandungan avatar telah diperolehi secara normal , PHP juga mempunyai fungsi untuk mendapatkan mime melalui kandungan imej iaitu getimagesizefromstring
$logo = "http://thirdqq.qlogo.cn/g?b=oidb&k=OMu7e7tukTueShatFXVX1w&kti=ZDyqNAAAAAE&s=100&t=1611112388" try { $client = new Client(['timeout' => 3]); $fileContent = $client->get($logo)->getBody()->getContents(); } catch (\Exception $e) { throw new \Exception("读取文件[" . $logo ."]失败"); } $imageInfo = getimagesizefromstring($logo); if (empty($imageInfo)) { throw new \Exception("文件[" . $logo ."]格式有误(非图片)"); } $base64Image = 'data:' . $imageInfo['mime'] . ';base64,' . base64_encode($fileContent);
Masalah ini telah selesai.
Pembelajaran yang disyorkan: "Tutorial Video PHP"
Atas ialah kandungan terperinci Penerangan terperinci tentang masalah serius yang memakan masa file_get_contents dan getimagesize. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!