Rumah >pembangunan bahagian belakang >tutorial php >Penerangan terperinci tentang masalah serius yang memakan masa file_get_contents dan getimagesize
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!